<?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>141088</bug_id>
          
          <creation_ts>2015-01-30 10:03:18 -0800</creation_ts>
          <short_desc>Rename shared() static member functions to singleton() for singleton classes.</short_desc>
          <delta_ts>2015-01-30 12:50:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>koivisto</cc>
    
    <cc>mjs</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1065583</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 10:03:18 -0800</bug_when>
    <thetext>Rename shared() static member functions to singleton() for singleton classes as per the recent coding style change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065585</commentid>
    <comment_count>1</comment_count>
      <attachid>245724</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 10:10:54 -0800</bug_when>
    <thetext>Created attachment 245724
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065588</commentid>
    <comment_count>2</comment_count>
      <attachid>245725</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 10:19:01 -0800</bug_when>
    <thetext>Created attachment 245725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065597</commentid>
    <comment_count>3</comment_count>
      <attachid>245727</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 11:04:36 -0800</bug_when>
    <thetext>Created attachment 245727
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065605</commentid>
    <comment_count>4</comment_count>
      <attachid>245725</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-01-30 11:29:50 -0800</bug_when>
    <thetext>Comment on attachment 245725
Patch

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

Massive clean up, I like it :)

Make sure to fix iOS before landing!

&gt; Source/WebCore/bindings/js/JSCryptoKeySerializationJWK.cpp:-176
&gt; -        algorithm = CryptoAlgorithmRegistry::shared().create(CryptoAlgorithmIdentifier::HMAC);

If is is used everywhere, may I suggest moving CryptoAlgorithmRegistry::shared() out of the branches?

&gt; Source/WebCore/loader/FrameLoader.cpp:1765
&gt; +            PageCache::singleton().pruneToSizeNow(PageCache::singleton().maxSize() / 2, PruningReason::MemoryPressure);

Let&apos;s put the singleton in a temp variable instead of querying it twice.

&gt; Source/WebCore/page/scrolling/ScrollingThread.cpp:43
&gt; +    if (!singleton().m_threadIdentifier)

Let&apos;s use a local variable for the value.

Personally, I would still scope this call: ScrollingThread::singleton().

&gt; Source/WebCore/page/scrolling/ScrollingThread.cpp:51
&gt; +    singleton().createThreadIfNeeded();

ditto

&gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:743
&gt; -    m_layerImage = ScratchBuffer::shared().getScratchBuffer(templateSize);
&gt; +    m_layerImage = ScratchBuffer::singleton().getScratchBuffer(templateSize);

Local variable?

&gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:899
&gt; +    ScratchBuffer::singleton().setCachedShadowValues(FloatSize(), Color::black, ColorSpaceDeviceRGB, IntRect(), FloatRoundedRect::Radii(), m_layerSize);
&gt; +    m_layerImage = ScratchBuffer::singleton().getScratchBuffer(layerRect.size());

Local variable?

&gt; Source/WebKit/mac/WebView/WebView.mm:7918
&gt; -    PageCache::shared().setMaxSize(pageCacheSize);
&gt; +    PageCache::singleton().setMaxSize(pageCacheSize);

Local variable?

&gt; Source/WebKit/win/WebCoreSupport/WebVisitedLinkStore.cpp:65
&gt; +    singleton().removeVisitedLinkHashes();

I would scope.

&gt; Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp:185
&gt; -        NetworkProcess::shared().downloadManager().startDownload(downloadID, request);
&gt; +        NetworkProcess::singleton().downloadManager().startDownload(downloadID, request);

Local variable?

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:298
&gt; +    data.statisticsNumbers.set(&quot;DownloadsActiveCount&quot;, singleton().downloadManager().activeDownloadCount());
&gt; +    data.statisticsNumbers.set(&quot;OutstandingAuthenticationChallengesCount&quot;, singleton().authenticationManager().outstandingAuthenticationChallengeCount());

Scope?
Local variable?

&gt; Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm:138
&gt; +    if (NetworkCache::singleton().isEnabled()) {
&gt; +        NetworkCache::singleton().setMaximumSize(urlCacheDiskCapacity);

Local variable?

&gt; Source/WebKit2/PluginProcess/PluginProcess.cpp:74
&gt; +    if (singleton().shouldTerminate())
&gt; +        singleton().terminate();

Scope?
Local variable?

&gt; Source/WebKit2/UIProcess/WebProcessPool.cpp:678
&gt; +    parameters.hasImageServices = ServicesController::singleton().hasImageServices();

Local variable?

&gt; Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp:126
&gt; +    if (!WebProcess::singleton().parentProcessConnection()-&gt;sendSync(Messages::WebProcessPool::HandleSynchronousMessage(messageName, UserData(WebProcess::singleton().transformObjectsToHandles(messageBody))), Messages::WebProcessPool::HandleSynchronousMessage::Reply(returnUserData), 0))

Local variable?

&gt; Source/WebKit2/WebProcess/Plugins/PDF/PDFPlugin.mm:1665
&gt; +    WebProcess::singleton().parentProcessConnection()-&gt;sendSync(Messages::WebPasteboardProxy::SetPasteboardTypes(pasteboardName, pasteboardTypes),

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp:216
&gt; +    if (!WebProcess::singleton().parentProcessConnection()-&gt;sendSync(Messages::WebPageProxy::CreateNewPage(webFrame-&gt;frameID(), request.resourceRequest(), windowFeatures, navigationActionData), Messages::WebPageProxy::CreateNewPage::Reply(newPageID, parameters), m_page-&gt;pageID()))

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:113
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:127
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:139
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:153
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:167
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:180
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebCoreSupport/WebPlatformStrategies.cpp:196
&gt; +        if (WebProcess::singleton().usesNetworkProcess())

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebFrame.cpp:254
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebFrame.cpp:273
&gt; +    if (WebProcess::singleton().usesNetworkProcess()) {

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebInspectorUI.cpp:132
&gt; +        WebProcess::singleton().parentProcessConnection()-&gt;send(Messages::WebInspectorProxy::Detach(), m_inspectedPageIdentifier);

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:477
&gt; +    WebProcess::singleton().addMessageReceiver(Messages::WebPage::messageReceiverName(), m_pageID, *this);

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:561
&gt; +    WebProcess::singleton().removeMessageReceiver(Messages::WebPage::messageReceiverName(), m_pageID);

Local variable?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1619
&gt; +    InjectedBundle* injectedBundle = WebProcess::singleton().injectedBundle();

Local variable?

&gt; Tools/DumpRenderTree/WorkQueue.cpp:44
&gt;      static WorkQueue* sharedInstance = new WorkQueue;
&gt;      return sharedInstance;

Odd

&gt; Tools/DumpRenderTree/mac/DumpRenderTree.mm:1873
&gt; +    WorkQueue::singleton()-&gt;clear();

Local variable?

&gt; Tools/DumpRenderTree/mac/FrameLoadDelegate.mm:162
&gt; +        WorkQueue::singleton()-&gt;setFrozen(true); // first complete load freezes the queue for the rest of this test

Local variable?

&gt; Tools/DumpRenderTree/win/DumpRenderTree.cpp:1110
&gt; +    WorkQueue::singleton()-&gt;clear();

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp:211
&gt; +    WKBundlePageRef page = InjectedBundle::singleton().page()-&gt;page();

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp:460
&gt; +    WKBundlePageSetPageZoomFactor(InjectedBundle::singleton().page()-&gt;page(), 1);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp:469
&gt; +    WKBundlePageSetPageZoomFactor(InjectedBundle::singleton().page()-&gt;page(), 1);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp:478
&gt; +    WKBundlePageSetTextZoomFactor(InjectedBundle::singleton().page()-&gt;page(), 1);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp:487
&gt; +    WKBundlePageSetTextZoomFactor(InjectedBundle::singleton().page()-&gt;page(), 1);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:655
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:677
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:688
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:699
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:710
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:852
&gt; +    switch (InjectedBundle::singleton().testRunner()-&gt;whatToDump()) {

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:873
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpAllFrameScrollPositions())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:919
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:941
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:975
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:995
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1014
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1023
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFrameLoadCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1029
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFrameLoadCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1035
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFrameLoadCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1062
&gt; +    if (InjectedBundle::singleton().isTestRunning()

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1118
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1160
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1174
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1191
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1231
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1350
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1377
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1392
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1404
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1427
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpApplicationCacheDelegateCallbacks()) {

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1452
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpDatabaseCallbacks()) {

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1543
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1558
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1573
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1598
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1623
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1638
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1650
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpEditingCallbacks()) {

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1668
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1685
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1699
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1713
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1727
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1742
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1749
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1760
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1771
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1777
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1783
&gt; +    if (InjectedBundle::singleton().testRunner()-&gt;shouldDumpFullScreenCallbacks())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:1895
&gt; +    if (frame != InjectedBundle::singleton().topLoadingFrame())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:151
&gt; +    InjectedBundle::singleton().outputText(&quot;FAIL: Timed out waiting for notifyDone to be called\n\n&quot;);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:157
&gt; +    if (!InjectedBundle::singleton().isTestRunning())

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:175
&gt; +    WKBundleAddUserScript(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), scriptWorld.get(), sourceWK.get(), 0, 0, 0,

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:185
&gt; +    WKBundleAddUserStyleSheet(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), scriptWorld.get(), sourceWK.get(), 0, 0, 0,

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:289
&gt; +    WKRetainPtr&lt;WKArrayRef&gt; origins(AdoptWK, WKBundleCopyOriginsWithApplicationCache(InjectedBundle::singleton().bundle()));

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:361
&gt; +    WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(InjectedBundle::singleton().page()-&gt;page());

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:377
&gt; +    WKRetainPtr&lt;WKDataRef&gt; audioData(AdoptWK, WKBundleCreateWKDataFromUInt8Array(InjectedBundle::singleton().bundle(), context, data));

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:582
&gt; +    WKBundleOverrideBoolPreferenceForTestRunner(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), toWK(preference).get(), toBool(value));

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:601
&gt; +    WKBundleSetUserStyleSheetLocation(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), location);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:614
&gt; +    WKBundleSetSpatialNavigationEnabled(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), enabled);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:619
&gt; +    WKBundleSetTabKeyCyclesThroughElements(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().page()-&gt;page(), enabled);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:639
&gt; +    WKBundleSetAsynchronousSpellCheckingEnabled(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().pageGroup(), enabled);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:645
&gt; +    WKBundleSetWebNotificationPermission(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().page()-&gt;page(), originWK.get(), true);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:651
&gt; +    WKBundleSetWebNotificationPermission(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().page()-&gt;page(), originWK.get(), false);

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:656
&gt; +    WKBundleRemoveAllWebNotificationPermissions(InjectedBundle::singleton().bundle(), InjectedBundle::singleton().page()-&gt;page());

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:661
&gt; +    WKBundleFrameRef mainFrame = WKBundlePageGetMainFrame(InjectedBundle::singleton().page()-&gt;page());

Local variable?

&gt; Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp:739
&gt; +    WKRetainPtr&lt;WKURLRef&gt; baseURLWK(AdoptWK, WKBundleFrameCopyURL(WKBundlePageGetMainFrame(InjectedBundle::singleton().page()-&gt;page())));

Local variable?

&gt; Tools/WebKitTestRunner/TestController.cpp:677
&gt; +    WKContextPostMessageToInjectedBundle(TestController::singleton().context(), messageName.get(), resetMessageBody.get());

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:132
&gt; +    TestController::singleton().configureViewForTest(*this);

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:248
&gt; +            WKPageForceRepaint(TestController::singleton().mainWebView()-&gt;page(), this, TestInvocation::forceRepaintDoneCallback);

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:353
&gt; +        TestController::singleton().mainWebView()-&gt;addChromeInputField();

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:360
&gt; +        TestController::singleton().mainWebView()-&gt;removeChromeInputField();

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:367
&gt; +        TestController::singleton().mainWebView()-&gt;makeWebViewFirstResponder();

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:376
&gt; +        WKPageSetCustomBackingScaleFactor(TestController::singleton().mainWebView()-&gt;page(), backingScaleFactor);

Local variable?

&gt; Tools/WebKitTestRunner/TestInvocation.cpp:499
&gt; +        if (TestController::singleton().workQueueManager().processWorkQueue()) {

Local variable?

&gt; Tools/WebKitTestRunner/mac/WebKitTestRunnerEvent.mm:39
&gt; +    WKPoint location = TestController::singleton().eventSenderProxy()-&gt;position();

Local variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065606</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 11:32:05 -0800</bug_when>
    <thetext>Thanks, I&apos;ll fix the mac build and take into consideration Ben&apos;s comments before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065618</commentid>
    <comment_count>6</comment_count>
      <attachid>245731</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 12:47:27 -0800</bug_when>
    <thetext>Created attachment 245731
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1065620</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-30 12:49:39 -0800</bug_when>
    <thetext>Committed r179409: &lt;http://trac.webkit.org/changeset/179409&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245724</attachid>
            <date>2015-01-30 10:10:54 -0800</date>
            <delta_ts>2015-01-30 10:18:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141088-20150130101101.patch</filename>
            <type>text/plain</type>
            <size>551444</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzZmZmFlYTYxNThkYmE4ZTFiMGZmMDBiYzgxYTUyMDk2ZmFjZjUyLi5lMjk0ZGI2MzNhMWRlNDY3
NTgxZDEzMDJlNWYxOWEwNTQ0MTVkNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5n
bGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5j
dGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2VzIGFzIHBl
ciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
cmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLm1tOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNp
bmdsZXRvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcDoK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6flJlbW90ZUlu
c3BlY3RvckRlYnVnZ2FibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JE
ZWJ1Z2dhYmxlOjppbml0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6dXBkYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6c2V0UmVtb3RlRGVidWdnaW5nQWxsb3dlZCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnBhdXNlV2FpdGluZ0ZvckF1dG9tYXRpY0luc3Bl
Y3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjp1
bnBhdXNlRm9ySW5pdGlhbGl6ZWRJbnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZXR1cCk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQpOgorCiAyMDE1LTAxLTI5ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTc5
MzU3IGFuZCByMTc5MzU4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE2NmE2NWEzYThkNzJkOTZlZTkyMTIwNjRm
MzRlMGQ3MWJmOTdlNzUuLmY4NjNkMjQzNjMzMDZhYzRjOWYzMzY2YTdiNDgyYTc2YWE0NTU5OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNSBAQAogMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVy
IGZ1bmN0aW9ucyB0byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkg
c3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAg
ICAgICBjbGFzc2VzIGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKzIw
MTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBPcHRp
bWl6ZSBNZW1vcnlDYWNoZTo6Z2V0U2Vzc2lvbk1hcCgpIGEgYml0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwNjkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMWUy
NjI2ZmY1N2QwODA5NTNmYjQwZWNjMjcwN2Q4NWRjMzdlN2ZlLi4zMjFkMTA5OTAzNTZmNjA2MmNm
YTNhOWVmZDRjYWNmNzZhOGE4OGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAx
LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNo
YXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0
b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24o
KSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSByZWNlbnQgY29kaW5n
IHN0eWxlIGNoYW5nZS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5j
cHA6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlUHJvdmlkZXIuaDoKKwogMjAxNS0wMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBCdWlsZCBmaXggYWZ0ZXIgcjE3OTM2
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCAxYWU1NDM0MDE4OTMyMGE4OGFhODlmNWJhMThjNDVmMjIw
NmIxMTA3Li44NmM5M2I1OTY2NzJhMmQxNmQ1MDM3ODlkMmNiMDg2MDQwOWMwODc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0
YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAg
ICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1
LTAxLTI5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
bW9yZSBNb3VudGFpbiBMaW9uIGNvZGUgZnJvbSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBi
NDZjOTI4M2Q0OWNjZDU0MWFhODE0ODUyNTZkNjgzNDBmYTE3OTk0Li43YzczOTg1OTgyMWMyMDAw
Y2Q2NDRiYzc2YTlmNjRmOGMwYWI4NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkg
Zm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRv
IHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAgICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJl
Y2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1LTAxLTI5ICBCcmVudCBGdWxnaGFtICA8
YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEJ1aWxkIGZpeCBhZnRlciByMTc5
MzY4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDhiYzg0YzI0ODM0ZmM0MzUwODE5ZTBiYTlmZDQyNGFlMzUwZTAz
MWEuLjUxNTA3ODgyMjY3NzEyZDIyNGM5YjA0NWJmZTNkM2M5MmViYjgwN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0
byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJl
ciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2Vz
IGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKIDIwMTUtMDEtMjkgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFJlc2l6ZSB0aGUgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIGFnYWluIGFmdGVyIGxlYXZpbmcgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAwZGZmYzI4NmYw
M2ZiZDJiNzE5NzNiMzEwMzAwNTI3ZjI0ZmQzNTRlLi4yY2Q4NTE5N2IzZjQyODgyMTg0YjRmOGJh
ZmEwYTg4ZGUyOTc0NmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1
Y3QgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm87CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBSZW1vdGVJbnNwZWN0b3IgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdGFydERpc2FibGVkKCk7
Ci0gICAgc3RhdGljIFJlbW90ZUluc3BlY3RvciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFJlbW90
ZUluc3BlY3RvciYgc2luZ2xldG9uKCk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFJlbW90ZUluc3BlY3Rvcj47CiAKICAgICB2b2lkIHJlZ2lzdGVyRGVidWdnYWJsZShSZW1vdGVJ
bnNwZWN0b3JEZWJ1Z2dhYmxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0KaW5kZXggYzhhMzllNjQxZjFh
NDUwNGNhMjU0YTQ0NDgzOWM2YzQ3NGUxZTcwMy4uNDZkNTA0NGM1ZTAyMjRmOTJlNTYyMjQ4Nzg3
NDBmYWY0N2EwZjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5tbQpAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c3RhcnREaXNhYmxlZCgpCiAgICAgUmVtb3RlSW5zcGVjdG9yOjpz
dGFydEVuYWJsZWQgPSBmYWxzZTsKIH0KIAotUmVtb3RlSW5zcGVjdG9yJiBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpCitSZW1vdGVJbnNwZWN0b3ImIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yPiBzaGFyZWQ7
CiAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogICAg
IH0pOwogCiAgICAgbm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKFdJUlNlcnZpY2VBdmFpbGFibGVO
b3RpZmljYXRpb24sICZtX25vdGlmeVRva2VuLCBtX3hwY1F1ZXVlLCBeKGludCkgewotICAgICAg
ICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCk7
CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0dXBYUENDb25uZWN0aW9u
SWZOZWVkZWQoKTsKICAgICB9KTsKIAogICAgIG5vdGlmeV9wb3N0KFdJUlNlcnZpY2VBdmFpbGFi
aWxpdHlDaGVja05vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCmluZGV4IGRmZWUwZWJiYzkyOWNiYTQ2ZmMzNTZlZWVkN2VjZjFhNzNiMzg5OTguLmFj
ODNhMThlOTU5OTViMWMzNTg2ZmE3ODYxMDcxZmNjNGU1ZWI4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZTo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSgpCiAKIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGU6On5SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKCkKIHsKLSAgICBSZW1v
dGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVucmVnaXN0ZXJEZWJ1Z2dhYmxlKHRoaXMpOworICAgIFJl
bW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5pdCgpCiB7Ci0gICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaGFyZWQoKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9CiAKIHZv
aWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6dXBkYXRlKCkKIHsKLSAgICBSZW1vdGVJbnNw
ZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS51cGRhdGVEZWJ1Z2dhYmxlKHRoaXMpOwogfQogCiB2b2lkIFJlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNldFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxv
d2VkKQpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNl
dFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogICAgIG1fYWxsb3dlZCA9IGFs
bG93ZWQ7CiAKICAgICBpZiAobV9hbGxvd2VkICYmIGF1dG9tYXRpY0luc3BlY3Rpb25BbGxvd2Vk
KCkpCi0gICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkudXBkYXRlRGVidWdnYWJsZUF1
dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6
c2luZ2xldG9uKCkudXBkYXRlRGVidWdnYWJsZUF1dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhp
cyk7CiAgICAgZWxzZQotICAgICAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURl
YnVnZ2FibGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudXBk
YXRlRGVidWdnYWJsZSh0aGlzKTsKIH0KIAogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm8g
UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5mbygpIGNvbnN0CkBAIC04NywxMyArODcsMTMg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjpwYXVzZVdhaXRpbmdGb3JBdXRvbWF0
aWNJbnNwZWN0aW9uKCkKICAgICBBU1NFUlQoYXV0b21hdGljSW5zcGVjdGlvbkFsbG93ZWQoKSk7
CiAKICAgICBFdmVudExvb3AgbG9vcDsKLSAgICB3aGlsZSAoUmVtb3RlSW5zcGVjdG9yOjpzaGFy
ZWQoKS53YWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbihpZGVudGlmaWVyKCkpICYmICFsb29w
LmVuZGVkKCkpCisgICAgd2hpbGUgKFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkud2FpdGlu
Z0ZvckF1dG9tYXRpY0luc3BlY3Rpb24oaWRlbnRpZmllcigpKSAmJiAhbG9vcC5lbmRlZCgpKQog
ICAgICAgICBsb29wLmN5Y2xlKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZTo6dW5wYXVzZUZvckluaXRpYWxpemVkSW5zcGVjdG9yKCkKIHsKLSAgICBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpLnNldHVwQ29tcGxldGVkKGlkZW50aWZpZXIoKSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZXR1cENvbXBsZXRlZChpZGVudGlmaWVyKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1t
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KaW5kZXggYTk3ZGNiYmJhZDkwODMyNzk1Y2Q0OWJkNTU0
ZDRhNjUwMzg0MTVjZS4uOGU3OWE1NmIyOWQyZDNhM2I4Y2YzMDczMjY3YzYxODI2MDQ5MDFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3Rl
SW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24u
bW0KQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uOjpzZXR1cChib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbikKICAgICAgICAgewogICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9kZWJ1Z2dhYmxlTXV0
ZXgpOwogICAgICAgICAgICAgaWYgKCFtX2RlYnVnZ2FibGUgfHwgIW1fZGVidWdnYWJsZS0+cmVt
b3RlRGVidWdnaW5nQWxsb3dlZCgpIHx8IG1fZGVidWdnYWJsZS0+aGFzTG9jYWxEZWJ1Z2dlcigp
KSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zZXR1cEZhaWxl
ZChpZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xl
dG9uKCkuc2V0dXBGYWlsZWQoaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICBtX2RlYnVn
Z2FibGUgPSBudWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBt
X2RlYnVnZ2FibGUtPmNvbm5lY3QodGhpcywgaXNBdXRvbWF0aWNJbnNwZWN0aW9uKTsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZChOU1N0cmluZyAqbWVzc2FnZQogCiBib29sIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc2VuZE1lc3Nh
Z2VUb1JlbW90ZUZyb250ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoaWRlbnRpZmll
cigpLCBtZXNzYWdlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKaW5kZXggYzNlMDg2ZjUzNWMy
MjllYTllNTJjZTlhNTg4YmQxNmEzZjI0YzIxMi4uNjhjN2QwNDg4Nzc2NTE1NTJjZmVlNzVkNzcy
MDI1MzZlNmQyZDFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZE1hbmFnZXIuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBOYXZpZ2F0b3JHYW1l
cGFkKiBuYXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKICAg
ICByZXR1cm4gTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOwogfQogCi1HYW1lcGFk
TWFuYWdlciYgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCitHYW1lcGFkTWFuYWdlciYgR2FtZXBh
ZE1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVw
YWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwogICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwpAQCAt
NjEsNyArNjEsNyBAQCBHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIoKQogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkKQogewogICAgIC8vIE5vdGlmeSBibGluZCBOYXZpZ2F0b3JzIGFuZCBXaW5k
b3dzIGFib3V0IGFsbCBnYW1lcGFkcyBleGNlcHQgZm9yIHRoaXMgb25lLgotICAgIGZvciAoYXV0
byogZ2FtZXBhZCA6IEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkucGxhdGZvcm1HYW1lcGFkcygp
KSB7CisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKICAgICAgICAgaWYgKCFnYW1lcGFkIHx8IGdhbWVwYWQg
PT0gJnBsYXRmb3JtR2FtZXBhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTksNyAr
MTE5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpCiAgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5pc0VtcHR5KCkgJiYgbV9nYW1l
cGFkQmxpbmRET01XaW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVw
YWRzKCkpCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKS5wbGF0Zm9ybUdhbWVwYWRzKCkpCiAgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2Ft
ZXBhZCwgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3Mp
OwogCiAgICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CkBAIC0yMTgsNyArMjE4
LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWF5YmVTdGFydE1vbml0b3JpbmdHYW1lcGFkcygp
CiAgICAgaWYgKCFtX25hdmlnYXRvcnMuaXNFbXB0eSgpIHx8ICFtX2RvbVdpbmRvd3MuaXNFbXB0
eSgpKSB7CiAgICAgICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZE1hbmFnZXIgaGFzICVpIE5hdmln
YXRvckdhbWVwYWRzIGFuZCAlaSBET01XaW5kb3dzIHJlZ2lzdGVyZWQsIGlzIHN0YXJ0aW5nIGdh
bWVwYWQgbW9uaXRvcmluZyIsIG1fbmF2aWdhdG9ycy5zaXplKCksIG1fZG9tV2luZG93cy5zaXpl
KCkpOwogICAgICAgICBtX2lzTW9uaXRvcmluZ0dhbWVwYWRzID0gdHJ1ZTsKLSAgICAgICAgR2Ft
ZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5zdGFydE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKKyAg
ICAgICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zdGFydE1vbml0b3JpbmdHYW1lcGFk
cyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdhbWVwYWRNYW5h
Z2VyOjptYXliZVN0b3BNb25pdG9yaW5nR2FtZXBhZHMoKQogICAgIGlmIChtX25hdmlnYXRvcnMu
aXNFbXB0eSgpICYmIG1fZG9tV2luZG93cy5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HKEdhbWVw
YWQsICJHYW1lcGFkTWFuYWdlciBoYXMgbm8gTmF2aWdhdG9yR2FtZXBhZHMgb3IgRE9NV2luZG93
cyByZWdpc3RlcmVkLCBpcyBzdG9wcGluZyBnYW1lcGFkIG1vbml0b3JpbmciKTsKICAgICAgICAg
bV9pc01vbml0b3JpbmdHYW1lcGFkcyA9IGZhbHNlOwotICAgICAgICBHYW1lcGFkUHJvdmlkZXI6
OnNoYXJlZCgpLnN0b3BNb25pdG9yaW5nR2FtZXBhZHModGhpcyk7CisgICAgICAgIEdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkuc3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmgKaW5kZXggMTA0NjBiODVmYzViZjcxZGQ3MGQwODA2ZThlZDczMzBjMDI0YzcxZC4uMTExNDhl
MTI0ODM2MzkxYjA1NTc2Mjk3ZWY0M2ZkNzhiOTNmYmM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgR2FtZXBhZE1hbmFnZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHYW1lcGFkTWFuYWdlcik7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPEdhbWVwYWRNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgR2FtZXBh
ZE1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBHYW1lcGFkTWFuYWdlciYgc2luZ2xldG9u
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3Jt
R2FtZXBhZCYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVw
YWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKaW5k
ZXggNWQ3YjUzOTYyMmFhOTQwODhiMWYxMTYwNzdkMmI3N2VkZTkxMTdlOC4uMThmMWI0ZTYzNWY2
OGIxN2Y3YjAyNzljNDJlNThjMmUxYzRiYjljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5hdmlnYXRvckdhbWVwYWQ6Ok5hdmlnYXRvckdhbWVwYWQo
KQogICAgIDogbV9uYXZpZ2F0aW9uU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKQogewotICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3Rlck5hdmln
YXRvcih0aGlzKTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJOYXZp
Z2F0b3IodGhpcyk7CiB9CiAKIE5hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0b3JHYW1lcGFkKCkK
IHsKLSAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0aGlz
KTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0
aGlzKTsKIH0KIAogY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUo
KQpAQCAtOTEsNyArOTEsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdh
dG9yR2FtZXBhZDo6Z2FtZXBhZHMoKQogICAgIGlmIChtX2dhbWVwYWRzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fZ2FtZXBhZHM7CiAKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1l
cGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRm
b3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBh
ZHMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbGF0Zm9ybUdhbWVwYWRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghcGxhdGZvcm1HYW1lcGFkc1tpXSkgewpAQCAtMTA4
LDcgKzEwOCw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1l
cGFkOjpnYW1lcGFkcygpCiAKIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCkKIHsKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKTsK
KyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBhZHMoKTsKICAgICBtX2dh
bWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgewpAQCAtMTI4LDcg
KzEyOCw3IEBAIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3RlZChQbGF0Zm9y
bUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICB9CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IHBsYXRmb3JtR2FtZXBhZC5pbmRleCgpOwotICAgIEFTU0VSVChHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKVtpbmRleF0gPT0gJnBsYXRmb3JtR2FtZXBhZCk7Cisg
ICAgQVNTRVJUKEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucGxhdGZvcm1HYW1lcGFkcygp
W2luZGV4XSA9PSAmcGxhdGZvcm1HYW1lcGFkKTsKIAogICAgIC8vIFRoZSBuZXcgaW5kZXggc2hv
dWxkIGFscmVhZHkgZml0IGluIHRoZSBleGlzdGluZyBhcnJheSwgb3Igc2hvdWxkIGJlIGV4YWN0
bHkgb25lIHBhc3QtdGhlLWVuZCBvZiB0aGUgZXhpc3RpbmcgYXJyYXkuCiAgICAgQVNTRVJUKGlu
ZGV4IDw9IG1fZ2FtZXBhZHMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IGI5YzY1NGMyZDNi
ZGMxYTJhN2U4NWNjYjU4MjYzNWYzZmM2MTFiZTQuLjMxZmMxOThiMTcxNmMxM2NhODkyNmRmOWVm
NDI1MDIxNThjM2M0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB2b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OmdldFNvdXJjZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrPiBjYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdD4gcmVxdWVzdCA9IE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBpZiAoIU1lZGlhU3RyZWFtQ2VudGVyOjpzaGFy
ZWQoKS5nZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVhc2UoKSkpCisgICAg
aWYgKCFNZWRpYVN0cmVhbUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFSZXF1ZXN0LmNwcAppbmRleCBjYmQ2ZmJhNzk5ZjcwZjc2NWM1MmY1NzdhZjVmZTc2
ZjNhYzZjZTQyLi5jNTMyZDc4ZmQ0YjcxM2NhM2E5NjQxYWI3M2U4Mzg2ZTg4ZGU3MGQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
UmVxdWVzdC5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnN0
YXJ0KCkKIHsKICAgICAvLyAxIC0gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBz
dXBwb3J0aW5nIHRoZSBhdWRpbyBhbmQgdmlkZW8gY29uc3RyYWludHMuIFdlIGRvbid0IHdhbnQg
dG8gYXNrIGZvcgogICAgIC8vIHVzZXIgcGVybWlzc2lvbiBpZiB0aGUgY29uc3RyYWludHMgY2Fu
IG5vdCBiZSBzdXBvcnRlZC4KLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6c2hhcmVkKCkudmFsaWRh
dGVSZXF1ZXN0Q29uc3RyYWludHModGhpcywgbV9hdWRpb0NvbnN0cmFpbnRzLCBtX3ZpZGVvQ29u
c3RyYWludHMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24oKS52YWxpZGF0ZVJl
cXVlc3RDb25zdHJhaW50cyh0aGlzLCBtX2F1ZGlvQ29uc3RyYWludHMsIG1fdmlkZW9Db25zdHJh
aW50cyk7CiB9CiAKICAgICAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQoKQogICAgIFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXNdIHsKICAgICAgICAgLy8gMyAtIHRoZSB1c2VyIGdyYW50ZWQgYWNjZXNzLCBhc2sgcGxhdGZv
cm0gdG8gY3JlYXRlIHRoZSBtZWRpYSBzdHJlYW0gZGVzY3JpcHRvcnMuCi0gICAgICAgIE1lZGlh
U3RyZWFtQ2VudGVyOjpzaGFyZWQoKS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdl
dCgpLCBwcm90ZWN0ZWRUaGlzLT5tX2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1f
dmlkZW9Db25zdHJhaW50cyk7CisgICAgICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24o
KS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdldCgpLCBwcm90ZWN0ZWRUaGlzLT5t
X2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1fdmlkZW9Db25zdHJhaW50cyk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCmluZGV4IDc2OWQ3MmRlMDg4YTE3NGVjYzAz
YzhmNzNkMTI2NGRmM2Q0YTE0MmEuLjY0ZDU2ZDk3MGE3NGU1ZGMxYWVhYTM4NTk1YjU2YmQxZTYz
NDZmZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxn
b3JpdGhtRGljdGlvbmFyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
cnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcApAQCAtNzksNyArNzksNyBAQCBib29sIEpTQ3J5
cHRvQWxnb3JpdGhtRGljdGlvbmFyeTo6Z2V0QWxnb3JpdGhtSWRlbnRpZmllcihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuZ2V0SWRlbnRpZmllckZvck5hbWUoYWxn
b3JpdGhtTmFtZSwgYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKKyAgICBpZiAoIUNyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5nZXRJZGVudGlmaWVyRm9yTmFtZShhbGdvcml0aG1O
YW1lLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgewogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0
aW9uSldLLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSy5jcHAKaW5kZXggMDJmYTFjMDVjY2NlYmU3NjZmY2NkOTY0N2M5NzE0YmNhZThh
YjQ3My4uNjU5YjM5N2QxMTNhYTM0OTFhYTU1YTEzNjIyMDI5ODMzZmY2MTA4MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldL
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6
YXRpb25KV0suY3BwCkBAIC0xNzMsNDYgKzE3Myw0NiBAQCBib29sIEpTQ3J5cHRvS2V5U2VyaWFs
aXphdGlvbkpXSzo6cmVjb25jaWxlQWxnb3JpdGhtKHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdv
cgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG0+IGFsZ29yaXRobTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4gcGFyYW1ldGVyczsKICAg
ICBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJIUzI1NiIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpITUFDKTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpI
TUFDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZUhNQUNQYXJhbWV0ZXJzKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8yNTYpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0
aG1OYW1lID09ICJIUzM4NCIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFD
KTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKTsKICAgICAgICAgcGFy
YW1ldGVycyA9IGNyZWF0ZUhNQUNQYXJhbWV0ZXJzKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8zODQpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJIUzUxMiIp
IHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgp
LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKTsKKyAgICAgICAgYWxnb3Jp
dGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9B
bGdvcml0aG1JZGVudGlmaWVyOjpITUFDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZUhN
QUNQYXJhbWV0ZXJzKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTIpOwogICAgIH0g
ZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJSUzI1NiIpIHsKLSAgICAgICAgYWxnb3Jp
dGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSk7CisgICAgICAgIGFsZ29yaXRobSA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOwogICAgICAgICBwYXJhbWV0ZXJzID0g
Y3JlYXRlUlNBS2V5UGFyYW1ldGVyc1dpdGhIYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8yNTYpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJSUzM4NCIp
IHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgp
LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSk7Cisg
ICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5j
cmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOwogICAg
ICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBS2V5UGFyYW1ldGVyc1dpdGhIYXNoKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0
aG1OYW1lID09ICJSUzUxMiIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FT
U0FfUEtDUzFfdjFfNSk7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NB
X1BLQ1MxX3YxXzUpOwogICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlUlNBS2V5UGFyYW1ldGVy
c1dpdGhIYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV81MTIpOwogICAgIH0gZWxz
ZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJSU0ExXzUiKSB7Ci0gICAgICAgIGFsZ29yaXRo
bSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNSk7CisgICAgICAgIGFsZ29yaXRobSA9IENy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6UlNBRVNfUEtDUzFfdjFfNSk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6
Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNlIGlm
IChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTQS1PQUVQIikgewotICAgICAgICBhbGdvcml0aG0g
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OlJTQV9PQUVQKTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpSU0FfT0FFUCk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVSU0FLZXlQYXJhbWV0ZXJz
V2l0aEhhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpOwogICAgIH0gZWxzZSBp
ZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJBMTI4Q0JDIikgewotICAgICAgICBhbGdvcml0aG0g
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkFFU19DQkMpOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19DQkMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1l
ID09ICJBMTkyQ0JDIikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMp
OworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMpOwogICAgICAgICBw
YXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigp
OwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJBMjU2Q0JDIikgewotICAg
ICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19DQkMpOworICAgICAgICBhbGdvcml0aG0g
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OkFFU19DQkMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtl
X3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0gZWxzZSBpZiAobV9q
d2tBbGdvcml0aG1OYW1lID09ICJBMTI4S1ciKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRp
Zmllcjo6QUVTX0tXKTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1cp
OwogICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1Q
YXJhbWV0ZXJzPigpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJBMTky
S1ciKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFy
ZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXKTsKKyAgICAgICAg
YWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1cpOwogICAgICAgICBwYXJhbWV0ZXJzID0g
c3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0gZWxz
ZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJBMjU2S1ciKSB7Ci0gICAgICAgIGFsZ29yaXRo
bSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6QUVTX0tXKTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpBRVNfS1cpOwogICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9B
bGdvcml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRocm93VHlwZUVy
cm9yKG1fZXhlYywgIlVuc3VwcG9ydGVkIEpXSyBhbGdvcml0aG0gIiArIG1fandrQWxnb3JpdGht
TmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNy
eXB0b0N1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0
b0N1c3RvbS5jcHAKaW5kZXggYjJhNjQ4ODhkZmE2NWNkMWQ5MzQ1M2IxZjJjNmRiMDE2OWE0MjI5
Ny4uNmJhZWZjZDZlYmQxOTQ1MTY5YmE0YWQyYTNhZmJhMjFjZGZhNjQyNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcApAQCAt
NjcsNyArNjcsNyBAQCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3Jl
YXRlQWxnb3JpdGhtRnJvbUpTVmFsdWUoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdCA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaGFyZWQoKS5jcmVhdGUoYWxnb3JpdGhtSWRlbnRpZmllcik7CisgICAgYXV0byByZXN1bHQg
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKGFsZ29yaXRobUlk
ZW50aWZpZXIpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgTk9UX1NVUFBPUlRFRF9FUlIpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAppbmRleCA3ZjRlZWUz
NGE0Yzg5Y2RiZjg2MTk5MmFkOTk1YzFhM2YxNWQ0YWE1Li40MGRkMmM5MzVkMzUzODUwNTY1NmM1
ZjVjMzU0ZDViMzQwNDAyNjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9Dcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1DcnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnNoYXJlZCgpCitDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENyeXB0b0Fs
Z29yaXRobVJlZ2lzdHJ5PiByZWdpc3RyeTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaAppbmRleCBmMDk0ODE0MWY4MzVmOWZiOWE0OTYwMzA2
NTExYWFmODBlYTZiNTNhLi5iZDY0YjE0MTc5OGYxOWQzYWY5N2ExN2FiYTc0Njk1ZDk5MDY4ZTNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
aApAQCAtNDUsNyArNDUsNyBAQCBjbGFzcyBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSB7CiAgICAg
ZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5PjsKIAog
cHVibGljOgotICAgIHN0YXRpYyBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgc2hhcmVkKCk7Cisg
ICAgc3RhdGljIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5JiBzaW5nbGV0b24oKTsKIAogICAgIGJv
b2wgZ2V0SWRlbnRpZmllckZvck5hbWUoY29uc3QgU3RyaW5nJiwgQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllciYpOwogICAgIFN0cmluZyBuYW1lRm9ySWRlbnRpZmllcihDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXku
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKaW5kZXggYmEyZjAyYTlh
ZDViZGVlOWY3NmQ5ZDY3NDEwMjE5YjQ3ODI1OWE2Mi4uNTNkMWMxZWI1NDVmNjE0MWVlMDUxNzI2
NWFiMTNjNjk4MjVkOTYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0tleS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTYz
LDcgKzYzLDcgQEAgU3RyaW5nIENyeXB0b0tleTo6dHlwZSgpIGNvbnN0CiAKIHZvaWQgQ3J5cHRv
S2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9u
QnVpbGRlciYgYnVpbGRlcikgY29uc3QKIHsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRo
bSkpOworICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNp
bmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1fYWxnb3JpdGhtKSk7CiAgICAgLy8gU3ViY2xh
c3NlcyB3aWxsIGFkZCBvdGhlciBrZXlzLgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9r
ZXlzL0NyeXB0b0tleUhNQUMuY3BwCmluZGV4IDVmYTEzODQxYmQ5ZTcwMzY5OGE1MGVkOWRmZmVm
ZGU0YzViMzY0ZDQuLmI1NTFmN2E5ZWM2MDg2NDVjYjMwODM1Mzg0YWM3ZGUxN2FhM2Q5ODMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCkBAIC03Miw3
ICs3Miw3IEBAIHZvaWQgQ3J5cHRvS2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihD
cnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImCiAgICAgQ3J5cHRvS2V5OjpidWlsZEFs
Z29yaXRobURlc2NyaXB0aW9uKGJ1aWxkZXIpOwogCiAgICAgYXV0byBoYXNoRGVzY3JpcHRpb25C
dWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERlc2NyaXB0aW9u
QnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLm5h
bWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFk
ZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRl
bnRpZmllcihtX2hhc2gpKTsKICAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRp
b25CdWlsZGVyKTsKIAogICAgIGJ1aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4IGI1
NmFjMjI5NGIwNmI3YjY4Nzk2N2Q0MTUzZmU3MzZhYmQ3ZmZiMDQuLmIzM2E2NGU1N2FjYWI0OWE2
NWE1NmI4NzI5ODI0ZGY2YjUwMWFjNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9tYWMvQ3J5cHRvS2V5UlNBTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFj
L0NyeXB0b0tleVJTQU1hYy5jcHAKQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIENyeXB0b0tleVJT
QTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1
aWxkZXImCiAKICAgICBpZiAobV9yZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpIHsKICAgICAgICAg
YXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7
Ci0gICAgICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFtZSIsIENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpKTsKKyAgICAg
ICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwogICAgICAgICBi
dWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKICAgICB9CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggYjNhZDYxOTdl
MmI3MWUxYWQ4MzgxZjNjNzNjNmRlZGM0ZTAwNThiOC4uZWFlNjJiYzcxZjg2MzgwYzcyNTE2Yjdl
NzBkNzFjZTdhZTNiNTA1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNr
Rm9yd2FyZExpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRM
aXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShQ
YXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICAgICAgUmVmUHRyPEhpc3Rv
cnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAgICAgICAgICAgIG1fZW50cmllcy5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAg
ICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgICAgICAgICBQ
YWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0
cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVt
ID0gbV9lbnRyaWVzWzBdOwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwogICAgICAgICBt
X2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCppdGVtKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0p
OwogICAgICAgICBtX2N1cnJlbnQtLTsKICAgICB9CiAKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lk
IEJhY2tGb3J3YXJkTGlzdDo6c2V0Q2FwYWNpdHkoaW50IHNpemUpCiAgICAgICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CiAgICAgICAgIG1fZW50cmllcy5y
ZW1vdmVMYXN0KCk7CiAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOworICAgICAgICBQYWdlQ2FjaGU6OnNp
bmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgfQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjQ1
LDcgKzI0NSw3IEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQog
ICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZW50cmllcykgewogICAgICAgICBpZiAoaXRlbS0+aXNJ
blBhZ2VDYWNoZSgpKSB7CiAgICAgICAgICAgICBkaWRSZW1vdmVBdExlYXN0T25lSXRlbSA9IHRy
dWU7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAg
ICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgcmV0dXJuIGRpZFJlbW92ZUF0TGVhc3RPbmVJdGVtOwpAQCAtMjU1LDcgKzI1
NSw3IEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogdm9pZCBC
YWNrRm9yd2FyZExpc3Q6OmNsb3NlKCkKIHsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2VudHJp
ZXMpCi0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAgICAg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOwogICAgIG1fZW50cmllcy5jbGVh
cigpOwogICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CiAgICAgbV9wYWdlID0gbnVsbHB0cjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKaW5kZXggZWNmNGVhODZlN2EyNWI5ZGM0
YjMyMWJiYTY5ZGI3ZjA1NjQ0ZjExNi4uZTY1Y2U2ZTY2ZmMxZjU5ODllYTZjMzM1MGEyNjk2MGM3
MjUwOTE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKQEAgLTE3Myw3
ICsxNzMsNyBAQCBDYWNoZWRGcmFtZTo6Q2FjaGVkRnJhbWUoRnJhbWUmIGZyYW1lKQogCiAgICAg
ZnJhbWUubG9hZGVyKCkuY2xpZW50KCkuc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUodGhp
cyk7CiAKLSAgICBpZiAobV9pc0NvbXBvc2l0ZWQgJiYgUGFnZUNhY2hlOjpzaGFyZWQoKS5zaG91
bGRDbGVhckJhY2tpbmdTdG9yZXMoKSkKKyAgICBpZiAobV9pc0NvbXBvc2l0ZWQgJiYgUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoKSkKICAgICAgICAgZnJh
bWUudmlldygpLT5jbGVhckJhY2tpbmdTdG9yZXMoKTsKIAogICAgIC8vIGRvY3VtZW50V2lsbFN1
c3BlbmRGb3JQYWdlQ2FjaGUoKSBjYW4gc2V0IHVwIGEgbGF5b3V0IHRpbWVyIG9uIHRoZSBGcmFt
ZVZpZXcsIHNvIGNsZWFyIHRpbWVycyBhZnRlciB0aGF0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hp
c3RvcnlJdGVtLmNwcAppbmRleCAxYjUyNWRmMjhjNDQ3NmZmMjBmMzI2NTExYTNhMTRhYzU1MmJk
NjFjLi5jM2MzNjdmNDNjNDM1NWU0NjkyNGQzMjg1M2UwZDdhNjM3ZGQ1YjQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgSGlz
dG9yeUl0ZW06OnNldFVSTFN0cmluZyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIAogdm9pZCBI
aXN0b3J5SXRlbTo6c2V0VVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucmVtb3ZlKCp0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgq
dGhpcyk7CiAgICAgc2V0VVJMU3RyaW5nKHVybC5zdHJpbmcoKSk7CiAgICAgY2xlYXJEb2N1bWVu
dFN0YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNo
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKaW5kZXggMjJkNjgw
MjU4ZjNjZDRhYWRhODI3ZDM4YTc4N2I3YjBiNjQ3NDM2Mi4uOTYyMDk5MDM4NWEzYzM1MDE0MDky
YjBjOWViZWY4ZTBjOGFjZGFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9Q
YWdlQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcApA
QCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKFBh
Z2UmIHBhZ2UpCiAgICAgZGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQubG9nRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoUmVzdWx0KERpYWdub3N0aWNMb2dnaW5nS2V5czo6cGFnZUNhY2hlS2V5KCksIGVtcHR5
U3RyaW5nKCksIHJlamVjdFJlYXNvbnMgPyBEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdEZhaWwgOiBE
aWFnbm9zdGljTG9nZ2luZ1Jlc3VsdFBhc3MpOwogfQogCi1QYWdlQ2FjaGUmIFBhZ2VDYWNoZTo6
c2hhcmVkKCkKK1BhZ2VDYWNoZSYgUGFnZUNhY2hlOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRp
YyBOZXZlckRlc3Ryb3llZDxQYWdlQ2FjaGU+IGdsb2JhbFBhZ2VDYWNoZTsKICAgICByZXR1cm4g
Z2xvYmFsUGFnZUNhY2hlOwpAQCAtNDg0LDcgKzQ4NCw3IEBAIENhY2hlZFBhZ2UqIFBhZ2VDYWNo
ZTo6Z2V0KEhpc3RvcnlJdGVtJiBpdGVtLCBQYWdlKiBwYWdlKSBjb25zdAogICAgIGlmIChjYWNo
ZWRQYWdlLT5oYXNFeHBpcmVkKCkpIHsKICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0
b3JpbmcgcGFnZSBmb3IgJXMgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBl
bnRyeSBoYXMgZXhwaXJlZCIsIGl0ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwog
ICAgICAgICBsb2dQYWdlQ2FjaGVGYWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25v
c3RpY0xvZ2dpbmdLZXlzOjpleHBpcmVkS2V5KCkpOwotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnJlbW92ZShpdGVtKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUo
aXRlbSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gY2FjaGVk
UGFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9T
b3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCmluZGV4IDk1MzZhOWY4NmRmMjE0ZGEz
MWFjNGFmZTllMzc0MjdhNDg2NTM5MWYuLjBmMmZiNDk2MzgyYjc1ZWNjNzk2NzViMGM5ZjA5MjYy
YWExMDcxNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtNDQsNyArNDQsNyBA
QCBjbGFzcyBQYWdlQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNoZSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIC8vIEZ1bmN0aW9uIHRvIG9i
dGFpbiB0aGUgZ2xvYmFsIHBhZ2UgY2FjaGUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBh
Z2VDYWNoZSYgc2hhcmVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhZ2VDYWNoZSYg
c2luZ2xldG9uKCk7CiAKICAgICBib29sIGNhbkNhY2hlKFBhZ2UqKSBjb25zdDsKIApAQCAtNzMs
NyArNzMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMo
Ym9vbCBmbGFnKSB7IG1fc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzID0gZmxhZzsgfQogCiBwcml2
YXRlOgotICAgIFBhZ2VDYWNoZSgpID0gZGVmYXVsdDsgLy8gVXNlIHNoYXJlZCgpIGluc3RlYWQu
CisgICAgUGFnZUNhY2hlKCkgPSBkZWZhdWx0OyAvLyBVc2Ugc2luZ2xldG9uKCkgaW5zdGVhZC4K
ICAgICB+UGFnZUNhY2hlKCkgPSBkZWxldGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRh
bGx5IGNhbGxzIGRlbGV0ZSAtLSBXZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgog
CiAgICAgc3RhdGljIGJvb2wgY2FuQ2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUuY3BwCmluZGV4IDhkMWVjNDJmM2ExMGYwMmZlMGE4OWE0MmExNjRhZDZm
YmZjNTY1MjkuLmEwZjI4ZGM4MDU4NGQ2ZjdmZmZkMDg0MzU1MjY5NjkxMmZhMGNjMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGVJdGVtOjphbGxvd3NSZXF1ZXN0KFN0b3JlZENyZWRlbnRpYWxzIGluY2x1
ZAogICAgIHJldHVybiB0cnVlOwogfQogCi1Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
JiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKQorQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZSYgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2lu
Z2xldG9uKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIGIv
U291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaApp
bmRleCBlN2QyODFiNzkxN2YwMDZjNzI3NjMzOWQzOGM4MWFjZDNkZTA3OGE2Li5mNDc4NWZmZjI4
ODhhYmU4YjExNWE3ZmQ4ODFjMTVkOWQ5OTU1MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgKQEAgLTY2LDcg
KzY2LDcgQEAgY2xhc3MgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUmIHNoYXJlZCgpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlJiBzaW5nbGV0b24o
KTsKIAogICAgIHZvaWQgYXBwZW5kRW50cnkoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFVS
TCYsIHN0ZDo6dW5pcXVlX3B0cjxDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4p
OwogICAgIGJvb2wgY2FuU2tpcFByZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3Qg
VVJMJiwgU3RvcmVkQ3JlZGVudGlhbHMsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQ
SGVhZGVyTWFwJiByZXF1ZXN0SGVhZGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCmluZGV4IDk1Mjk4MTE4MmQwZDNkNGJlZGZm
YTA0YjFkM2IzZTFhN2Q5MzJhN2YuLmUxYWIxMzg5MThkMWQ5N2M3MjA4MzFmZjU4NzI4ZGNkZGIz
OWU3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFi
bGVMb2FkZXIuY3BwCkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVM
b2FkZXI6Om1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXMK
ICAgICAgICAgbV9zaW1wbGVSZXF1ZXN0ID0gZmFsc2U7CiAgICAgICAgIG1fYWN0dWFsUmVxdWVz
dCA9IFdURjo6bW92ZShjcm9zc09yaWdpblJlcXVlc3QpOwogCi0gICAgICAgIGlmIChDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2Fj
dHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCisgICAgICAgIGlmIChDcm9zc09yaWdp
blByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3Vy
aXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9u
cy5hbGxvd0NyZWRlbnRpYWxzKCksIG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2Fj
dHVhbFJlcXVlc3QtPmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgICAgICBwcmVmbGlnaHRT
dWNjZXNzKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vz
c1JlcXVlc3RXaXRoUHJlZmxpZ2h0KCptX2FjdHVhbFJlcXVlc3QpOwpAQCAtMjU2LDcgKzI1Niw3
IEBAIHZvaWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5h
cHBlbmRFbnRyeShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3Qt
PnVybCgpLCBXVEY6Om1vdmUocHJlZmxpZ2h0UmVzdWx0KSk7CisgICAgICAgIENyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmFwcGVuZEVudHJ5KHNlY3VyaXR5T3Jp
Z2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIFdURjo6bW92ZShwcmVm
bGlnaHRSZXN1bHQpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJl
cXVlc3QgJiYgbV9vcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3ND
b250cm9sKSB7CiAgICAgICAgICAgICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNw
b25zZSwgbV9vcHRpb25zLmFsbG93Q3JlZGVudGlhbHMoKSwgc2VjdXJpdHlPcmlnaW4oKSwgYWNj
ZXNzQ29udHJvbEVycm9yRGVzY3JpcHRpb24pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9h
ZGVyLmNwcAppbmRleCA3MzE5MDg4NzVmMWEwZGJhMzM3MDJiNzgxNThhMDI3NDUxYWU2M2ZiLi5m
ODg0Zjg5YTk5Mjc3MTNjOWI5ZDY0OGQ0MTVlYjdkNjVmYWIzZjRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTE3NDEsNyArMTc0MSw3IEBAIHZvaWQgRnJhbWVMb2Fk
ZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
UGFnZT4gY2FjaGVkUGFnZTsKICAgICBpZiAobV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgJiYgaGlz
dG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpKQotICAgICAgICBjYWNoZWRQYWdlID0gUGFnZUNhY2hl
OjpzaGFyZWQoKS50YWtlKCpoaXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCksIG1fZnJhbWUucGFn
ZSgpKTsKKyAgICAgICAgY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkudGFrZSgq
aGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBMT0co
UGFnZUNhY2hlLCAiV2ViQ29yZUxvYWRpbmcgJXM6IEFib3V0IHRvIGNvbW1pdCBwcm92aXNpb25h
bCBsb2FkIGZyb20gcHJldmlvdXMgVVJMICclcycgdG8gbmV3IFVSTCAnJXMnIiwgbV9mcmFtZS50
cmVlKCkudW5pcXVlTmFtZSgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksCiAgICAgICAgIG1fZnJh
bWUuZG9jdW1lbnQoKSA/IG1fZnJhbWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nQ2VudGVyRWxs
aXBzaXplZFRvTGVuZ3RoKCkudXRmOCgpLmRhdGEoKSA6ICIiLApAQCAtMTc1OCwxMSArMTc1OCwx
MSBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgICAgICAg
ICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIGJlY2F1c2UgdW5kZXIg
bWVtb3J5IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAgICAg
ICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAwIGR1ZSB0byBtZW1vcnkg
cHJlc3N1cmUiKTsKICAgICAgICAgICAgIC8vIERvbid0IGNhY2hlIGFueSBwYWdlIGlmIHdlIGFy
ZSB1bmRlciBtZW1vcnkgcHJlc3N1cmUuCi0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAg
ICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1Jl
YXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbU1lbW9yeUxl
dmVsKCkgPD0gbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKSB7CiAgICAgICAg
ICAgICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSBzeXN0
ZW0gbWVtb3J5IGxldmVsIGlzICVkIGF0OiAlcyIsIHN5c3RlbU1lbW9yeUxldmVsKCksIF9fUFJF
VFRZX0ZVTkNUSU9OX18pOwotICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFn
ZSBjYWNoZSB0byAlZCBkdWUgdG8gbG93IG1lbW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0
byAlZCB0aHJlc2hvbGQpIiwgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkgLyAyLCBzeXN0
ZW1NZW1vcnlMZXZlbCgpLCBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpOwot
ICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdyhQYWdlQ2FjaGU6
OnNoYXJlZCgpLm1heFNpemUoKSAvIDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsK
KyAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgdG8gJWQgZHVl
IHRvIGxvdyBtZW1vcnkgKGxldmVsICVkIGxlc3Mgb3IgZXF1YWwgdG8gJWQgdGhyZXNob2xkKSIs
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWF4U2l6ZSgpIC8gMiwgc3lzdGVtTWVtb3J5TGV2ZWwo
KSwgbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKTsKKyAgICAgICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coUGFnZUNhY2hlOjpzaW5nbGV0b24o
KS5tYXhTaXplKCkgLyAyLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiAgICAgICAg
IH0KICAgICB9CiAjZW5kaWYKQEAgLTE3NzIsOCArMTc3Miw4IEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQg
dG8gY2FjaGUgdGhlIHBhZ2Ugd2UgYXJlIG5hdmlnYXRpbmcgYXdheSBmcm9tIGludG8gdGhlIGJh
Y2svZm9yd2FyZCBjYWNoZS4KICAgICAvLyBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2Ug
d2Uga25vdyBmb3Igc3VyZSB0aGF0IGEgbmV3IHBhZ2UgaXMgYWJvdXQgdG8gYmUgbG9hZGVkLgog
ICAgIEhpc3RvcnlJdGVtJiBpdGVtID0gKmhpc3RvcnkoKS5jdXJyZW50SXRlbSgpOwotICAgIGlm
ICghbV9mcmFtZS50cmVlKCkucGFyZW50KCkgJiYgUGFnZUNhY2hlOjpzaGFyZWQoKS5jYW5DYWNo
ZShtX2ZyYW1lLnBhZ2UoKSkgJiYgIWl0ZW0uaXNJblBhZ2VDYWNoZSgpKQotICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLmFkZChpdGVtLCAqbV9mcmFtZS5wYWdlKCkpOworICAgIGlmICghbV9m
cmFtZS50cmVlKCkucGFyZW50KCkgJiYgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5jYW5DYWNoZSht
X2ZyYW1lLnBhZ2UoKSkgJiYgIWl0ZW0uaXNJblBhZ2VDYWNoZSgpKQorICAgICAgICBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLmFkZChpdGVtLCAqbV9mcmFtZS5wYWdlKCkpOwogCiAgICAgaWYgKG1f
bG9hZFR5cGUgIT0gRnJhbWVMb2FkVHlwZTo6UmVwbGFjZSkKICAgICAgICAgY2xvc2VPbGREYXRh
U291cmNlcygpOwpAQCAtMzE1OSw3ICszMTU5LDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERp
ZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EK
ICAgICAvLyBSZW1lbWJlciB0aGlzIGl0ZW0gc28gd2UgY2FuIHRyYXZlcnNlIGFueSBjaGlsZCBp
dGVtcyBhcyBjaGlsZCBmcmFtZXMgbG9hZAogICAgIGhpc3RvcnkoKS5zZXRQcm92aXNpb25hbEl0
ZW0oJml0ZW0pOwogCi0gICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6
OnNoYXJlZCgpLmdldChpdGVtLCBtX2ZyYW1lLnBhZ2UoKSkpIHsKKyAgICBpZiAoQ2FjaGVkUGFn
ZSogY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuZ2V0KGl0ZW0sIG1fZnJhbWUu
cGFnZSgpKSkgewogICAgICAgICBhdXRvIGRvY3VtZW50TG9hZGVyID0gY2FjaGVkUGFnZS0+ZG9j
dW1lbnRMb2FkZXIoKTsKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldFRyaWdnZXJpbmdBY3Rp
b24oTmF2aWdhdGlvbkFjdGlvbihkb2N1bWVudExvYWRlci0+cmVxdWVzdCgpLCBsb2FkVHlwZSwg
ZmFsc2UpKTsKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnNldExhc3RDaGVja2VkUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlz
dG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9s
bGVyLmNwcAppbmRleCA4MzNlNTg4NGJhYTA3YjM1YjFiMzVlNWY0YmFjMzdkYjM5YzlkZGEyLi5h
Y2Y5MDkwNmVhZGQyMDlkMGQwNGI0YThkZjg3MGU4MGY1ZTk3ZGU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lk
IEhpc3RvcnlDb250cm9sbGVyOjppbnZhbGlkYXRlQ3VycmVudEl0ZW1DYWNoZWRQYWdlKCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2hlbiB3ZSBhcmUgcHJlLWNvbW1pdCwgdGhlIGN1cnJl
bnRJdGVtIGlzIHdoZXJlIGFueSBwYWdlIGNhY2hlIGRhdGEgcmVzaWRlcy4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFr
ZSgqY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS50YWtlKCpjdXJy
ZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CiAgICAgaWYgKCFjYWNoZWRQYWdlKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTMzNiw3ICszMzYsNyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjp1
cGRhdGVGb3JSZWxvYWQoKQogI2VuZGlmCiAKICAgICBpZiAobV9jdXJyZW50SXRlbSkgewotICAg
ICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqbV9jdXJyZW50SXRlbSk7CisgICAgICAg
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCptX2N1cnJlbnRJdGVtKTsKICAgICAKICAg
ICAgICAgaWYgKG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlOjpS
ZWxvYWQgfHwgbV9mcmFtZS5sb2FkZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJl
bG9hZEZyb21PcmlnaW4pCiAgICAgICAgICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3Rh
dGVUb0l0ZW0obV9jdXJyZW50SXRlbS5nZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
aW5kZXggY2IzOTRlYTY1Nzc4ODcyNjM1NmMxODU0ODVhNWYyOGQxMWY5MzU5MS4uZWExNjE1OGU3
MGNhMDYxOGIyZmMyNmJhNTk2NGY1YmI2MWFlODhkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcApAQCAtNDUzLDcgKzQ1Myw3IEBAIERPTVdpbmRvdzo6fkRPTVdpbmRvdygpCiAKICNpZiBF
TkFCTEUoR0FNRVBBRCkKICAgICBpZiAobV9nYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KQotICAg
ICAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3RlckRPTVdpbmRvdyh0aGlzKTsK
KyAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJET01XaW5kb3co
dGhpcyk7CiAjZW5kaWYKIH0KIApAQCAtNTE5LDcgKzUxOSw3IEBAIHZvaWQgRE9NV2luZG93Ojp3
aWxsRGV0YWNoRG9jdW1lbnRGcm9tRnJhbWUoKQogdm9pZCBET01XaW5kb3c6OmluY3JlbWVudEdh
bWVwYWRFdmVudExpc3RlbmVyQ291bnQoKQogewogICAgIGlmICgrK21fZ2FtZXBhZEV2ZW50TGlz
dGVuZXJDb3VudCA9PSAxKQotICAgICAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkucmVnaXN0
ZXJET01XaW5kb3codGhpcyk7CisgICAgICAgIEdhbWVwYWRNYW5hZ2VyOjpzaW5nbGV0b24oKS5y
ZWdpc3RlckRPTVdpbmRvdyh0aGlzKTsKIH0KIAogdm9pZCBET01XaW5kb3c6OmRlY3JlbWVudEdh
bWVwYWRFdmVudExpc3RlbmVyQ291bnQoKQpAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgRE9NV2lu
ZG93OjpkZWNyZW1lbnRHYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KCkKICAgICBBU1NFUlQobV9n
YW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KTsKIAogICAgIGlmICghLS1tX2dhbWVwYWRFdmVudExp
c3RlbmVyQ291bnQpCi0gICAgICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS51bnJlZ2lzdGVy
RE9NV2luZG93KHRoaXMpOworICAgICAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5y
ZWdpc3RlckRPTVdpbmRvdyh0aGlzKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RGVidWdQYWdlT3ZlcmxheXMuY3BwCmluZGV4IGI0YWI2Y2EwOWEwNTM3NTA3MzE4Mjk0ZjhkOTJi
OWMzMWUwYTgyYjQuLmNlMTE0OGJiMGUwOTI0MGYzNjAxY2RmZWY3YjVlODMyZDQzMzc3OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCkBAIC0yMTAsNyArMjEw
LDcgQEAgdm9pZCBSZWdpb25PdmVybGF5OjpyZWNvbXB1dGVSZWdpb24oKQogICAgICAgICBtX292
ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogfQogCi1EZWJ1Z1BhZ2VPdmVybGF5cyYgRGVidWdQ
YWdlT3ZlcmxheXM6OnNoYXJlZCgpCitEZWJ1Z1BhZ2VPdmVybGF5cyYgRGVidWdQYWdlT3Zlcmxh
eXM6OnNpbmdsZXRvbigpCiB7CiAgICAgaWYgKCFzaGFyZWREZWJ1Z092ZXJsYXlzKQogICAgICAg
ICBzaGFyZWREZWJ1Z092ZXJsYXlzID0gbmV3IERlYnVnUGFnZU92ZXJsYXlzOwpAQCAtMjk2LDcg
KzI5Niw3IEBAIHZvaWQgRGVidWdQYWdlT3ZlcmxheXM6OnNldHRpbmdzQ2hhbmdlZChNYWluRnJh
bWUmIGZyYW1lKQogICAgIGlmICghYWN0aXZlT3ZlcmxheVJlZ2lvbnMgJiYgIWhhc092ZXJsYXlz
KGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGVidWdQYWdlT3ZlcmxheXM6OnNoYXJl
ZCgpLnVwZGF0ZU92ZXJsYXlSZWdpb25WaXNpYmlsaXR5KGZyYW1lLCBhY3RpdmVPdmVybGF5UmVn
aW9ucyk7CisgICAgRGVidWdQYWdlT3ZlcmxheXM6OnNpbmdsZXRvbigpLnVwZGF0ZU92ZXJsYXlS
ZWdpb25WaXNpYmlsaXR5KGZyYW1lLCBhY3RpdmVPdmVybGF5UmVnaW9ucyk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuaAppbmRleCAxZjY0MWZkMjhhNDIzMmNi
NDc5NTNkNjIwZjViZjRkZjU0ODA2YmVjLi41NDYxMGEyNDRiYjY5NDdiMGQ5OGFiNmYzNGU0ZjUx
ZWIxY2MzOWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJs
YXlzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5oCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIFJlZ2lvbk92ZXJsYXk7CiAKIGNsYXNzIERlYnVnUGFnZU92ZXJs
YXlzIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRGVidWdQYWdlT3ZlcmxheXMmIHNoYXJlZCgpOwor
ICAgIHN0YXRpYyBEZWJ1Z1BhZ2VPdmVybGF5cyYgc2luZ2xldG9uKCk7CiAKICAgICBlbnVtIGNs
YXNzIFJlZ2lvblR5cGUgewogICAgICAgICBXaGVlbEV2ZW50SGFuZGxlcnMsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCmluZGV4IDc4Y2IxOTM1MzM4OWI3Njg4ZTQ3YjViNWY2YjJmNTAwMGQwNDdlOTcuLjk4
OGFkMDZkY2M5NGNiODFmZDgwNGIxZTE0YjhmNzg3YmUyYWVlYWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCkBAIC05ODksNyArOTg5LDcgQEAgdm9pZCBGcmFtZTo6c2V0UGFnZUFuZFRleHRab29tRmFj
dG9ycyhmbG9hdCBwYWdlWm9vbUZhY3RvciwgZmxvYXQgdGV4dFpvb21GYWN0b3IKICAgICB9CiAK
ICAgICBpZiAoaXNNYWluRnJhbWUoKSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJr
UGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnBhZ2UpOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmds
ZXRvbigpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqcGFnZSk7CiB9CiAKIGZsb2F0IEZy
YW1lOjpmcmFtZVNjYWxlRmFjdG9yKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDdkOTdh
ZWYwZTJiYTIyMmU1NTllNWNiZjhkZWIyODZkYTJkZTcwN2MuLjI3YzA0YjU5NThkY2JhZjJkYjU1
ZjZmYmUyM2E1MTdiZjZkMjE1NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtODM5LDkgKzgzOSw5
IEBAIHZvaWQgUGFnZTo6c2V0RGV2aWNlU2NhbGVGYWN0b3IoZmxvYXQgc2NhbGVGYWN0b3IpCiAg
ICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7CiAKICAgICBtYWluRnJhbWUoKS5k
ZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
Lm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCgqdGhpcyk7CisgICAgUGFnZUNhY2hlOjpz
aW5nbGV0b24oKS5tYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoKnRoaXMpOwogCi0gICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwor
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0
aGlzKTsKICAgICBHcmFwaGljc0NvbnRleHQ6OnVwZGF0ZURvY3VtZW50TWFya2VyUmVzb3VyY2Vz
KCk7CiAKICAgICBtYWluRnJhbWUoKS5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5kaWRDaGFuZ2VE
ZXZpY2VTY2FsZUZhY3RvcigpOwpAQCAtOTIxLDcgKzkyMSw3IEBAIHZvaWQgUGFnZTo6c2V0UGFn
aW5hdGlvbihjb25zdCBQYWdpbmF0aW9uJiBwYWdpbmF0aW9uKQogICAgIG1fcGFnaW5hdGlvbiA9
IHBhZ2luYXRpb247CiAKICAgICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKLSAg
ICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7
CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMo
KnRoaXMpOwogfQogCiB1bnNpZ25lZCBQYWdlOjpwYWdlQ291bnQoKSBjb25zdApAQCAtMTY2MSw3
ICsxNjYxLDcgQEAgdm9pZCBQYWdlOjpzZXRWaXNpdGVkTGlua1N0b3JlKFJlZjxWaXNpdGVkTGlu
a1N0b3JlPiYmIHZpc2l0ZWRMaW5rU3RvcmUpCiAgICAgbV92aXNpdGVkTGlua1N0b3JlLT5hZGRQ
YWdlKCp0aGlzKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKKyAg
ICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhp
cyk7CiB9CiAKIFNlc3Npb25JRCBQYWdlOjpzZXNzaW9uSUQoKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCmluZGV4IGRhYzI2ZjI3OGQ3YTE3NTIxZjI5ZDdmYTJjZDExYzU0NjJlMjk0
YjcuLmEwOGE5MjliZWZiZDNiOTNkMDY1NzQyMTAxMzQ3NjFhY2U1MGMyMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VHcm91cC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIFBhZ2VHcm91cDo6Y2Fw
dGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpCiB7CiAgICAgZm9yIChhdXRvIGl0ID0gbV9wYWdlcy5i
ZWdpbigpLCBlbmQgPSBtX3BhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICgq
aXQpLT5jYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5tYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CisgICAgUGFnZUNhY2hl
OjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JDYXB0aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCk7CiB9
CiAKIENhcHRpb25Vc2VyUHJlZmVyZW5jZXMqIFBhZ2VHcm91cDo6Y2FwdGlvblByZWZlcmVuY2Vz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZjdiZGM0YzYwMDA0NWQ5NzJlMmRkNmRm
NjEwMjY5NDc1ZDdiY2ZjNC4uNTNkMmY5NTU1ZjMwMTZmMjJhZWU3ZjZiNDZjYzJkMmM5YjRmMjE0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTUxMiw3ICs1MTIsNyBAQCB2b2lkIFNl
dHRpbmdzOjpzZXRVc2VzUGFnZUNhY2hlKGJvb2wgdXNlc1BhZ2VDYWNoZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCFtX3VzZXNQYWdlQ2FjaGUpCi0gICAgICAgIFBhZ2VDYWNoZTo6c2hh
cmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9uZSk7CisgICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6Tm9u
ZSk7CiB9CiAKIHZvaWQgU2V0dGluZ3M6OnNldEZvbnRSZW5kZXJpbmdNb2RlKEZvbnRSZW5kZXJp
bmdNb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVGhyZWFkLmNwcAppbmRleCA5YzhlMmQxOTkzZjI0MmQ3ZWNjOTU5ZmEyZWUzYTVmNzIzNDE1
NTc1Li5mMjYzZDBhZDk0NDlmZjM3OTNiNGQ2MjY3YzRjMzk4ZjljNDFiYmNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKQEAgLTQw
LDIyICs0MCwyMiBAQCBTY3JvbGxpbmdUaHJlYWQ6OlNjcm9sbGluZ1RocmVhZCgpCiAKIGJvb2wg
U2Nyb2xsaW5nVGhyZWFkOjppc0N1cnJlbnRUaHJlYWQoKQogewotICAgIGlmICghc2hhcmVkKCku
bV90aHJlYWRJZGVudGlmaWVyKQorICAgIGlmICghc2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlm
aWVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgp
ID09IHNoYXJlZCgpLm1fdGhyZWFkSWRlbnRpZmllcjsKKyAgICByZXR1cm4gY3VycmVudFRocmVh
ZCgpID09IHNpbmdsZXRvbigpLm1fdGhyZWFkSWRlbnRpZmllcjsKIH0KIAogdm9pZCBTY3JvbGxp
bmdUaHJlYWQ6OmRpc3BhdGNoKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiB7Ci0g
ICAgc2hhcmVkKCkuY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKKyAgICBzaW5nbGV0b24oKS5jcmVh
dGVUaHJlYWRJZk5lZWRlZCgpOwogCiAgICAgewotICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayhzaGFyZWQoKS5tX2Z1bmN0aW9uc011dGV4KTsKLSAgICAgICAgc2hhcmVk
KCkubV9mdW5jdGlvbnMuYXBwZW5kKGZ1bmN0aW9uKTsKKyAgICAgICAgc3RkOjpsb2NrX2d1YXJk
PHN0ZDo6bXV0ZXg+IGxvY2soc2luZ2xldG9uKCkubV9mdW5jdGlvbnNNdXRleCk7CisgICAgICAg
IHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlvbik7CiAgICAgfQogCi0gICAg
c2hhcmVkKCkud2FrZVVwUnVuTG9vcCgpOworICAgIHNpbmdsZXRvbigpLndha2VVcFJ1bkxvb3Ao
KTsKIH0KIAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihzdGQ6OmZ1bmN0
aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQpAQCAtNjUsNyArNjUsNyBAQCB2b2lkIFNjcm9sbGluZ1Ro
cmVhZDo6ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiAg
ICAgfSk7CiB9CiAKLVNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaGFyZWQoKQor
U2Nyb2xsaW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpCiB7CiAgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFNjcm9sbGluZ1RocmVhZD4gc2Nyb2xsaW5nVGhyZWFkOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4
IDdmMTM2OGU2M2I0YjMzNTQ4ZDliZTI5OWZkODEzOGY0MjJlY2ZhOTcuLjI2MmNkZjE4YTk2NDgy
NDdkOTk3YjVjMmQ4YjMxNTVkNDQ3YWZhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAK
ICAgICBTY3JvbGxpbmdUaHJlYWQoKTsKIAotICAgIHN0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNo
YXJlZCgpOworICAgIHN0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNpbmdsZXRvbigpOwogCiAgICAg
dm9pZCBjcmVhdGVUaHJlYWRJZk5lZWRlZCgpOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZENhbGxi
YWNrKHZvaWQqIHNjcm9sbGluZ1RocmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2Ft
ZXBhZFByb3ZpZGVyLmNwcAppbmRleCAwNTA0YTY4YjhlNTc5ZTJjOGUzMWY2NzRiNTUzYTY3MDZi
ZjkwZjNmLi5iMGY0OTI3ZjEyM2IxMDk5ZjRjMDhiNjVlNTVmYzFhMTBlNDM4MGJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5jcHAKQEAgLTMzLDcgKzMzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyKiBzaGFyZWRQ
cm92aWRlciA9IG51bGxwdHI7CiAKLUdhbWVwYWRQcm92aWRlciYgR2FtZXBhZFByb3ZpZGVyOjpz
aGFyZWQoKQorR2FtZXBhZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCiB7
CiAgICAgaWYgKCFzaGFyZWRQcm92aWRlcikgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8R2FtZXBhZFByb3ZpZGVyPiBkZWZhdWx0UHJvdmlkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dhbWVwYWRQcm92aWRlci5oCmluZGV4IDI0YTljN2U0MjQ0OWI5MDgwZmYyZDEwM2VlNzlj
MDVjMGQ0NGUyMDIuLjhkMWM1MzE0YWQ0YWI0NjA2ZTg5YTQyZTBiZTc4MDJlNWFkMThmNWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEdhbWVwYWRQcm92aWRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2FtZXBh
ZFByb3ZpZGVyKCkgeyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3Zp
ZGVyJiBzaGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3ZpZGVy
JiBzaW5nbGV0b24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaGFyZWRQ
cm92aWRlcihHYW1lcGFkUHJvdmlkZXImKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0
b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCmluZGV4IGI1MDJkZWIzMGVl
M2VjNGY1OWU2NDRkODk4YmM2MDc1YzFkM2U3ZDcuLmU1MjQ2OTYxZjNmYTE0NTc5ZDE2N2Y4MWNh
ZGM1Mjg1ZjNlNzQ4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9y
eVByZXNzdXJlSGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpyZWxlYXNlQ3JpdGljYWxNZW1vcnkoKQogICAgICAgICBSZWxpZWZMb2dnZXIg
bG9nKCJFbXB0eSB0aGUgUGFnZUNhY2hlIik7CiAgICAgICAgIC8vIFJpZ2h0IG5vdywgdGhlIG9u
bHkgcmVhc29uIHdlIGNhbGwgcmVsZWFzZSBjcml0aWNhbCBtZW1vcnkgd2hpbGUgbm90IHVuZGVy
IG1lbW9yeSBwcmVzc3VyZSBpcyBpZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB0byBiZSBzdXNwZW5k
ZWQuCiAgICAgICAgIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbiA9IG1lbW9yeVByZXNzdXJl
SGFuZGxlcigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpID8gUHJ1bmluZ1JlYXNvbjo6TWVtb3J5
UHJlc3N1cmUgOiBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOwotICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24pOworICAgICAg
ICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24p
OwogICAgIH0KIAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKaW5kZXggNGZiZDk5OWQ2Zjc5NDkwNDk2NjBmOWFkN2U4Zjc5NDY4Y2Jh
YzgyMC4uM2FlNTcyMTY0ODlhYmY5YzczYzk5NDRlZDA0MzQ0NjMwNDZiNDVjMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTEyNyw3
ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3Qoc2Ny
YXRjaEJ1ZmZlclB1cmdlSW50ZXJ2YWwpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgU2NyYXRj
aEJ1ZmZlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFNjcmF0Y2hCdWZmZXImIHNpbmdsZXRvbigp
OwogCiBwcml2YXRlOgogICAgIHZvaWQgdGltZXJGaXJlZCgpCkBAIC0xNTksNyArMTU5LDcgQEAg
cHJpdmF0ZToKICNlbmRpZgogfTsKIAotU2NyYXRjaEJ1ZmZlciYgU2NyYXRjaEJ1ZmZlcjo6c2hh
cmVkKCkKK1NjcmF0Y2hCdWZmZXImIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpCiB7CiAgICAg
REVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hCdWZm
ZXIsICgpKTsKICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZlcjsKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgRmxvYXRSZQogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93
V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxv
YXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiB7
Ci0gICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1
ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVy
OjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGlm
ICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NSw3ICs1NzUsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgYwogICAgIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0Lm1v
dmUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAKICAgICAvLyBPbmx5IHJlZHJhdyBpbiB0
aGUgc2NyYXRjaCBidWZmZXIgaWYgaXRzIGNhY2hlZCBjb250ZW50cyBkb24ndCBtYXRjaCBvdXIg
bmVlZHMKLSAgICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNl
dENhY2hlZFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHNoYWRvd2VkUmVjdC5yYWRp
aSgpLCBtX2xheWVyU2l6ZSk7CisgICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVmZmVy
OjpzaW5nbGV0b24oKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBDb2xvcjo6
YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IsIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0LCBz
aGFkb3dlZFJlY3QucmFkaWkoKSwgbV9sYXllclNpemUpOwogICAgIGlmIChyZWRyYXdOZWVkZWQp
IHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdl
LT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
cigqc2hhZG93Q29udGV4dCk7CkBAIC01OTcsMTIgKzU5NywxMiBAQCB2b2lkIFNoYWRvd0JsdXI6
OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgYwogICAgIAogICAgIGRyYXdTaGFkb3dCdWZmZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAg
ICBtX2xheWVySW1hZ2UgPSAwOwotICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxl
U2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2No
ZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5z
ZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBj
b25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiB7Ci0gICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1
ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBt
X2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVy
KGxheWVyUmVjdC5zaXplKCkpOwogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1
cm47CiAKQEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgYnVm
ZmVyUmVsYXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAg
ICAgLy8gT25seSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0cyBjYWNoZWQgY29u
dGVudHMgZG9uJ3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3Jh
dGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRDYWNoZWRJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRp
dXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVSZWN0
LCBidWZmZXJSZWxhdGl2ZUhvbGVSZWN0LCBob2xlUmVjdC5yYWRpaSgpKTsKKyAgICBib29sIHJl
ZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZEluc2V0U2hh
ZG93VmFsdWVzKG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBidWZmZXJSZWxhdGl2ZVJlY3QsIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSZWN0LnJh
ZGlpKCkpOwogICAgIGlmIChyZWRyYXdOZWVkZWQpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CkBAIC02Mzgs
NyArNjM4LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5n
KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIAogICAgIGRyYXdTaGFkb3dC
dWZmZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICBtX2xheWVySW1hZ2UgPSAwOwotICAgIFNjcmF0
Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgU2Ny
YXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0K
IAogLyoKQEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRv
d1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAKIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiBob2xlUmVjdCwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXpl
JiBlZGdlU2l6ZSkKIHsKLSAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQo
KS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CisgICAgbV9sYXllckltYWdlID0gU2Ny
YXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwog
ICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NCw3ICs2ODQs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3ND
b250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbgogICAgIEZsb2F0UmVjdCB0ZW1wbGF0ZUhvbGUg
PSBGbG9hdFJlY3QoZWRnZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRl
U2l6ZS53aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQo
KSAtIDIgKiBlZGdlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBPbmx5IHJlZHJhdyBpbiB0aGUg
c2NyYXRjaCBidWZmZXIgaWYgaXRzIGNhY2hlZCBjb250ZW50cyBkb24ndCBtYXRjaCBvdXIgbmVl
ZHMKLSAgICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENh
Y2hlZEluc2V0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNl
LCB0ZW1wbGF0ZUJvdW5kcywgdGVtcGxhdGVIb2xlLCBob2xlUmVjdC5yYWRpaSgpKTsKKyAgICBi
b29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZElu
c2V0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1w
bGF0ZUJvdW5kcywgdGVtcGxhdGVIb2xlLCBob2xlUmVjdC5yYWRpaSgpKTsKICAgICBpZiAocmVk
cmF3TmVlZGVkKSB7CiAgICAgICAgIC8vIERyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZm
ZXIuCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFn
ZS0+Y29udGV4dCgpOwpAQCAtNzM1LDE5ICs3MzUsMTkgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b24KICAgICBkcmF3TGF5ZXJQaWVjZXMoZ3JhcGhpY3NDb250ZXh0LCBkZXN0SG9sZUJvdW5kcywg
aG9sZVJlY3QucmFkaWkoKSwgZWRnZVNpemUsIHRlbXBsYXRlU2l6ZSwgSW5uZXJTaGFkb3cpOwog
CiAgICAgbV9sYXllckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hl
ZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigp
LnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d1JlY3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7Ci0gICAgbV9sYXllckltYWdlID0g
U2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwor
ICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICAgICBpZiAoIW1fbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgRmxvYXRSZWN0IHRlbXBsYXRlU2hhZG93ID0gRmxvYXRSZWN0KGVkZ2VTaXpl
LndpZHRoKCksIGVkZ2VTaXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIDIgKiBl
ZGdlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAyICogZWRnZVNpemUuaGVp
Z2h0KCkpOwogCiAgICAgLy8gT25seSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0
cyBjYWNoZWQgY29udGVudHMgZG9uJ3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdO
ZWVkZWQgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9i
bHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93LCBzaGFkb3dl
ZFJlY3QucmFkaWkoKSwgbV9sYXllclNpemUpOworICAgIGJvb2wgcmVkcmF3TmVlZGVkID0gU2Ny
YXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2V0Q2FjaGVkU2hhZG93VmFsdWVzKG1fYmx1clJhZGl1
cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1wbGF0ZVNoYWRvdywgc2hhZG93ZWRSZWN0LnJh
ZGlpKCksIG1fbGF5ZXJTaXplKTsKICAgICBpZiAocmVkcmF3TmVlZGVkKSB7CiAgICAgICAgIC8v
IERyYXcgc2hhZG93IGludG8gdGhlIEltYWdlQnVmZmVyLgogICAgICAgICBHcmFwaGljc0NvbnRl
eHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKQEAgLTc4MCw3ICs3
ODAsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGlj
c0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29ucwogICAgIGRyYXdMYXllclBpZWNlcyhncmFw
aGljc0NvbnRleHQsIHNoYWRvd0JvdW5kcywgc2hhZG93ZWRSZWN0LnJhZGlpKCksIGVkZ2VTaXpl
LCB0ZW1wbGF0ZVNpemUsIE91dGVyU2hhZG93KTsKIAogICAgIG1fbGF5ZXJJbWFnZSA9IDA7Ci0g
ICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsK
KyAgICBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJn
ZSgpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdMYXllclBpZWNlcyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBzaGFkb3dCb3VuZHMsIGNvbnN0
IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpJiByYWRpaSwgY29uc3QgSW50U2l6ZSYgYnVmZmVyUGFk
ZGluZywgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBTaGFkb3dEaXJlY3Rpb24gZGlyZWN0
aW9uKQpAQCAtODk1LDggKzg5NSw4IEBAIEdyYXBoaWNzQ29udGV4dCogU2hhZG93Qmx1cjo6YmVn
aW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEZsCiAKICAgICAv
LyBXZSByZXNldCB0aGUgc2NyYXRjaCBidWZmZXIgdmFsdWVzIGhlcmUsIGJlY2F1c2UgdGhlIGJ1
ZmZlciB3aWxsIG5vIGxvbmdlciBjb250YWluCiAgICAgLy8gZGF0YSBmcm9tIGFueSBwcmV2aW91
cyByZWN0YW5nbGUgb3IgaW5zZXQgc2hhZG93cyBkcmF3biB2aWEgdGhlIHRpbGluZyBwYXRoLgot
ICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENhY2hlZFNoYWRvd1ZhbHVlcyhGbG9hdFNp
emUoKSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRSZWN0KCksIEZsb2F0
Um91bmRlZFJlY3Q6OlJhZGlpKCksIG1fbGF5ZXJTaXplKTsKLSAgICBtX2xheWVySW1hZ2UgPSBT
Y3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkp
OworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZFNoYWRvd1ZhbHVlcyhG
bG9hdFNpemUoKSwgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBJbnRSZWN0KCks
IEZsb2F0Um91bmRlZFJlY3Q6OlJhZGlpKCksIG1fbGF5ZXJTaXplKTsKKyAgICBtX2xheWVySW1h
Z2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVj
dC5zaXplKCkpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXll
ckltYWdlLT5jb250ZXh0KCk7CiAgICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOwpAQCAtOTE5LDcg
KzkxOSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0KQogICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobV9sYXllck9yaWdp
biksIG1fbGF5ZXJTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbV9sYXllclNpemUpLCBj
b250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKSk7CiAKICAgICBtX2xheWVySW1hZ2UgPSAwOwot
ICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7
CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVy
Z2UoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5j
cHAKaW5kZXggYjc1NTliMDBiZjliZTVlMzI4NzM5Yzc1ODNjMzJjYjMyNWIyNWM0ZC4uYzdlODMx
ZDhjYzZkMWYwYTljNzk5ZTI3YTQzNTI0ODU1YzY2M2NhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwCkBAIC0yMjAsMTQgKzIyMCwxNCBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpsYXll
clRyZWVEaWRDaGFuZ2UoKQogICAgIC8vIFRoZSBsYXllciB0cmVlIGlzIGNoYW5naW5nIGFzIGEg
cmVzdWx0IG9mIHNvbWVvbmUgbW9kaWZ5aW5nIGEgUGxhdGZvcm1DQUxheWVyIHRoYXQgZG9lc24n
dAogICAgIC8vIGhhdmUgYSBjb3JyZXNwb25kaW5nIEdyYXBoaWNzTGF5ZXIuIFNjaGVkdWxlIGEg
Zmx1c2ggc2luY2Ugd2Ugd29uJ3Qgc2NoZWR1bGUgb25lIHRocm91Z2ggdGhlCiAgICAgLy8gbm9y
bWFsIEdyYXBoaWNzTGF5ZXIgbWVjaGFuaXNtcy4KLSAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpz
aGFyZWQoKS5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNTb29uKHRoaXMpOworICAgIExheWVyQ2hh
bmdlc0ZsdXNoZXI6OnNpbmdsZXRvbigpLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhp
cyk7CiB9CiAKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmRlc3Ryb3lSZW5kZXJlcigpCiB7CiAg
ICAgbV9yb290TGF5ZXIgPSAwOwogICAgIG1fcm9vdENoaWxkTGF5ZXIgPSAwOwotICAgIExheWVy
Q2hhbmdlc0ZsdXNoZXI6OnNoYXJlZCgpLmNhbmNlbFBlbmRpbmdGbHVzaCh0aGlzKTsKKyAgICBM
YXllckNoYW5nZXNGbHVzaGVyOjpzaW5nbGV0b24oKS5jYW5jZWxQZW5kaW5nRmx1c2godGhpcyk7
CiB9CiAKIHN0YXRpYyB2b2lkIGdldERpcnR5UmVjdHMoSFdORCB3aW5kb3csIFZlY3RvcjxDR1Jl
Y3Q+JiBvdXRSZWN0cykKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIENBQ0ZMYXllclRyZWVIb3N0
OjpwYWludCgpCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpmbHVzaFBlbmRpbmdHcmFwaGljc0xh
eWVyQ2hhbmdlc1Nvb24oKQogewogICAgIG1fc2hvdWxkRmx1c2hQZW5kaW5nR3JhcGhpY3NMYXll
ckNoYW5nZXMgPSB0cnVlOwotICAgIExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNoYXJlZCgpLmZsdXNo
UGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhpcyk7CisgICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6
c2luZ2xldG9uKCkuZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbih0aGlzKTsKIH0KIAogdm9p
ZCBDQUNGTGF5ZXJUcmVlSG9zdDo6c2V0U2hvdWxkSW52ZXJ0Q29sb3JzKGJvb2wpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2Vz
Rmx1c2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5
ZXJDaGFuZ2VzRmx1c2hlci5jcHAKaW5kZXggNGIwMzZjYTQwY2Y4YmRhMDY1NjhkZTBmYTUxYjRm
MDMxYzg1YjI2Ny4uMzkxODc1NWVlN2FmNThkNmM5ZWQyMmMwY2RmZThjOTJiMjk2ZDc5NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hh
bmdlc0ZsdXNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUxheWVyQ2hhbmdlc0ZsdXNoZXImIExheWVyQ2hhbmdlc0ZsdXNoZXI6
OnNoYXJlZCgpCitMYXllckNoYW5nZXNGbHVzaGVyJiBMYXllckNoYW5nZXNGbHVzaGVyOjpzaW5n
bGV0b24oKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChMYXllckNoYW5n
ZXNGbHVzaGVyLCBmbHVzaGVyLCAoKSk7CiAgICAgcmV0dXJuIGZsdXNoZXI7CkBAIC03NCw3ICs3
NCw3IEBAIExSRVNVTFQgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6aG9va0NhbGxiYWNrKGludCBjb2Rl
LCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtCiAgICAgLy8gY3Jhc2ggZm9yIGRlYnVnZ2lu
ZyBwdXJwb3NlcyBpZiBhbiBleGNlcHRpb24gaXMgaGl0LiAKICAgICBFeGNlcHRpb25SZWdpc3Ry
YXRpb24gcmVnaXN0cmF0aW9uU3RydWN0OyAvLyBOb3RlOiBtdXN0IGJlIHN0YWNrIGFsbG9jYXRl
ZC4KICAgICBTdHJ1Y3R1cmVkRXhjZXB0aW9uSGFuZGxlclN1cHByZXNzb3Igc3VwcmVzc29yKHJl
Z2lzdHJhdGlvblN0cnVjdCk7Ci0gICAgcmV0dXJuIHNoYXJlZCgpLmhvb2tGaXJlZChjb2RlLCB3
UGFyYW0sIGxQYXJhbSk7CisgICAgcmV0dXJuIHNpbmdsZXRvbigpLmhvb2tGaXJlZChjb2RlLCB3
UGFyYW0sIGxQYXJhbSk7CiB9CiAKIExSRVNVTFQgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6aG9va0Zp
cmVkKGludCBjb2RlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdlc0ZsdXNo
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5n
ZXNGbHVzaGVyLmgKaW5kZXggZmNiMzFlN2I5ZGUyMjRmNzI3NThkNTY2ZGQ4MmMxMjYyMjEwMjlj
Ny4uMjhlNjZiOTg1MzlmMDNkNzExNGU2YTgyMDcyMDE0ZmUxNmJmMGQyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdlc0ZsdXNo
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJD
aGFuZ2VzRmx1c2hlci5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIEFic3RyYWN0Q0FDRkxheWVy
VHJlZUhvc3Q7CiBjbGFzcyBMYXllckNoYW5nZXNGbHVzaGVyIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShMYXllckNoYW5nZXNGbHVzaGVyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTGF5ZXJD
aGFuZ2VzRmx1c2hlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIExheWVyQ2hhbmdlc0ZsdXNoZXIm
IHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBmbHVzaFBlbmRpbmdMYXllckNoYW5nZXNTb29uKEFi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QqKTsKICAgICB2b2lkIGNhbmNlbFBlbmRpbmdGbHVzaChB
YnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5jcHAKaW5kZXgg
ZTcwMzZjMTdiNGY5MmRhZWUxZTI1MGIwOWE2MDBjZGZkZDg5N2RjYi4uZDE2Yjk1Mzg0ZWI3MDVh
MTRhZmE1ZDkyMmEyZjE0ZTNhYzBmMDUzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmNwcApAQCAt
MzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZsb2F0aW5nUG9pbnRFbnZp
cm9ubWVudCYgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFyZWQoKQorRmxvYXRpbmdQb2lu
dEVudmlyb25tZW50JiBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudD4gZmxvYXRp
bmdQb2ludEVudmlyb25tZW50OwogICAgIHJldHVybiBmbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9p
bnRFbnZpcm9ubWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGlu
Z1BvaW50RW52aXJvbm1lbnQuaAppbmRleCAwM2Y0ZDNmMGZiY2QyNDU2ZjVhOGRiZTczZGE2OGZh
OTMwMTk2OGE5Li42NTExYmYwZTA3NTliMTUyN2NhYWE0ZTMzZWE3YWUzYTFhZDdkMjg0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZp
cm9ubWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQ
b2ludEVudmlyb25tZW50LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2F2ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogICAgIHZvaWQgcHJvcGFn
YXRlTWFpblRocmVhZEVudmlyb25tZW50KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
RmxvYXRpbmdQb2ludEVudmlyb25tZW50JiBzaGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgRmxvYXRpbmdQb2ludEVudmlyb25tZW50JiBzaW5nbGV0b24oKTsKIAogcHJpdmF0ZToK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhy
ZWFkLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1t
CmluZGV4IDRiMDlkMWYwNmRhODIzOGY3MzYwNDM1YzE3ZjNhMTlhOTVjM2IzYzkuLmQ5ZDEzOTY1
MjlmZDhlMzdkYWEwNzcwMTJiNzE4ZTYwMjdkNjQ2MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KQEAgLTY0Miw3ICs2NDIsNyBAQCBO
T19SRVRVUk4KICNlbmRpZgogdm9pZCAqUnVuV2ViVGhyZWFkKHZvaWQgKmFyZykKIHsKLSAgICBG
bG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgpLnByb3BhZ2F0ZU1haW5UaHJlYWRFbnZp
cm9ubWVudCgpOworICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2luZ2xldG9uKCkucHJv
cGFnYXRlTWFpblRocmVhZEVudmlyb25tZW50KCk7CiAKICAgICBVTlVTRURfUEFSQU0oYXJnKTsK
ICAgICAvLyBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCkgbmVlZHMgdG8gYmUgY2FsbGVkIGJl
Zm9yZSBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKSBzaW5jZSB0aGUKQEAgLTc1Nyw3ICs3NTcs
NyBAQCBzdGF0aWMgdm9pZCBTdGFydFdlYlRocmVhZCgpCiAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShyZXN1bHQgPT0gMCwgInN0YXJ0dXAgbG9jayBmYWlsZWQgd2l0aCBjb2RlOiVkIiwgcmVzdWx0
KTsKIAogICAgIC8vIFByb3BhZ2F0ZSB0aGUgbWFpblRocmVhZCdzIGZlbnYgdG8gd29ya2VycyAm
IHRoZSB3ZWIgdGhyZWFkLgotICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2hhcmVkKCku
c2F2ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOworICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dDo6c2luZ2xldG9uKCkuc2F2ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogCiAgICAgcHRocmVh
ZF9jcmVhdGUoJndlYlRocmVhZCwgJnRhdHRyLCBSdW5XZWJUaHJlYWQsIE5VTEwpOwogICAgIHB0
aHJlYWRfYXR0cl9kZXN0cm95KCZ0YXR0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwCmluZGV4IDI0ZjFiMDg0NzVjNzVjNDkxMzQ2
Mzk0MWZhMGU1ZmEyYjAxYzVkYmIuLjY5N2E0OWM2MTgwYWFiMThmYzIzN2IwYjhlNmQ5ZjQ1N2M2
NDQ4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFk
UHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFk
UHJvdmlkZXIuY3BwCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyB2b2lkIGRldmljZVZhbHVlc0No
YW5nZWRDYWxsYmFjayh2b2lkKiBjb250ZXh0LCBJT1JldHVybiByZXN1bHQsIHZvaWQqLCBJCiAg
ICAgbGlzdGVuZXItPnZhbHVlc0NoYW5nZWQodmFsdWUpOwogfQogCi1ISURHYW1lcGFkUHJvdmlk
ZXImIEhJREdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkKK0hJREdhbWVwYWRQcm92aWRlciYgSElE
R2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxISURHYW1lcGFkUHJvdmlkZXI+IHNoYXJlZExpc3RlbmVyOwogICAgIHJldHVybiBzaGFyZWRM
aXN0ZW5lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1l
cGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJv
dmlkZXIuaAppbmRleCA4MGUzMGVlY2IwNTMxNjU5NTYwMjEwZjNiZWNjN2Q4NmVjMjUyOWNkLi41
YTA2OGRmNmJiMTlkNTQ1ODBiZDU3MTdlZjFhZDZjMzdlODkwOTNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5oCkBAIC00Niw3ICs0Niw3
IEBAIGNsYXNzIEhJREdhbWVwYWRQcm92aWRlciA6IHB1YmxpYyBHYW1lcGFkUHJvdmlkZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhJREdhbWVwYWRQcm92aWRlcik7CiAgICAgZnJpZW5k
IGNsYXNzIE5ldmVyRGVzdHJveWVkPEhJREdhbWVwYWRQcm92aWRlcj47CiBwdWJsaWM6Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIEhJREdhbWVwYWRQcm92aWRlciYgc2hhcmVkKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIEhJREdhbWVwYWRQcm92aWRlciYgc2luZ2xldG9uKCk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVy
Q2xpZW50Kik7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBh
ZFByb3ZpZGVyQ2xpZW50Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKaW5kZXggMzg5MTM4YzliNDBlZjUx
NzllOGM0ZmJiNTk5ZTQ3ZDliMDhjODY0Yi4uY2M1YTVjYmUxZjJhODkyODExOWM4MjgyZWIwN2Rh
MDUzM2QzNTExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcApAQCAtNDUsNyArNDUsNyBAQCBzdGF0aWMg
TWVkaWFTdHJlYW1DZW50ZXIqJiBtZWRpYVN0cmVhbUNlbnRlck92ZXJyaWRlKCkKICAgICByZXR1
cm4gb3ZlcnJpZGU7CiB9CiAKLU1lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6
c2hhcmVkKCkKK01lZGlhU3RyZWFtQ2VudGVyJiBNZWRpYVN0cmVhbUNlbnRlcjo6c2luZ2xldG9u
KCkKIHsKICAgICBNZWRpYVN0cmVhbUNlbnRlciogb3ZlcnJpZGUgPSBtZWRpYVN0cmVhbUNlbnRl
ck92ZXJyaWRlKCk7CiAgICAgaWYgKG92ZXJyaWRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKaW5kZXggN2Q1NDBi
OTRkZTk1ODYwNGM3YTQ0MDRiNzNiMDVkMGRlNDMzMTMzMi4uZTY5N2YwMmUwZDU0YjY3NjU0YzM4
YTE3Y2YzYTQwMjg2YTNkYzJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCkBAIC00OSw3ICs0OSw3IEBAIGNs
YXNzIE1lZGlhU3RyZWFtQ2VudGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5NZWRpYVN0cmVh
bUNlbnRlcigpOwogCi0gICAgc3RhdGljIE1lZGlhU3RyZWFtQ2VudGVyJiBzaGFyZWQoKTsKKyAg
ICBzdGF0aWMgTWVkaWFTdHJlYW1DZW50ZXImIHNpbmdsZXRvbigpOwogICAgIHN0YXRpYyB2b2lk
IHNldFNoYXJlZFN0cmVhbUNlbnRlcihNZWRpYVN0cmVhbUNlbnRlciopOwogCiAgICAgdmlydHVh
bCB2b2lkIHZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1D
cmVhdGlvbkNsaWVudD4sIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gYXVkaW9Db25zdHJh
aW50cywgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiB2aWRlb0NvbnN0cmFpbnRzKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZD
YXB0dXJlRGV2aWNlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAppbmRleCA4ZWZlNDE1OTk0YTdlMDY2MzI0
NjZlYTU1ZDYwYTIyNmZhYzUzYzVjLi5hMzg5M2MwZTQzMTU1OWJjOGM4ZDYyMDc0OTI4NjQ2OGJh
NTYzYTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9t
YWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKQEAgLTQ1LDcgKzQ1LDcg
QEAgY2xhc3MgQ2FwdHVyZURldmljZTsKIAogY2xhc3MgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIEFWQ2FwdHVyZURldmljZU1hbmFnZXImIHNoYXJlZCgpOwor
ICAgIHN0YXRpYyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaW5nbGV0b24oKTsKICAgICBzdGF0
aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUlu
Zm8+PiBnZXRTb3VyY2VzSW5mbyhjb25zdCBTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmlj
ZU1hbmFnZXIubW0KaW5kZXggOWFmZDllZGFhZmFjMjFkY2MwMWUyZDNmOGQ4YWM3MzE5ZGFlNGNm
NS4uYjBiMjZmNmMzNTU2MGRiNDU2MjhkMDhhN2ViMTJiZTU5ZTNlZWFhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1h
bmFnZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FW
Q2FwdHVyZURldmljZU1hbmFnZXIubW0KQEAgLTExNyw3ICsxMTcsNyBAQCBzdGF0aWMgVmVjdG9y
PENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlTGlzdCgpCiAgICAgaWYgKGZpcnN0VGltZSAm
JiAhY2FwdHVyZURldmljZUxpc3Quc2l6ZSgpKSB7CiAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNl
OwogICAgICAgICByZWZyZXNoQ2FwdHVyZURldmljZUxpc3QoKTsKLSAgICAgICAgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkucmVnaXN0ZXJGb3JEZXZpY2VOb3RpZmljYXRpb25zKCk7
CisgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnJlZ2lzdGVyRm9y
RGV2aWNlTm90aWZpY2F0aW9ucygpOwogICAgIH0KIAogICAgIHJldHVybiBjYXB0dXJlRGV2aWNl
TGlzdDsKQEAgLTE3NCw3ICsxNzQsNyBAQCBib29sIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6Omlz
QXZhaWxhYmxlKCkKICAgICByZXR1cm4gQVZGb3VuZGF0aW9uTGlicmFyeSgpOwogfQogCi1BVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyJiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKQorQVZD
YXB0dXJlRGV2aWNlTWFuYWdlciYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkK
IHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoQVZDYXB0dXJlRGV2aWNlTWFu
YWdlciwgbWFuYWdlciwgKCkpOwogICAgIHJldHVybiBtYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVh
bUNlbnRlck1hYy5jcHAKaW5kZXggOGQ4ZDkwZGYxNGMyY2ZjYWIyZDBiNTdlOGE5ZjVhODc2ZTRj
NTRmZi4uNTM0ZTQ3ZTEyNTc1M2E5ZjU2YjNjMWQ3Zjc3ZjIxMWZmYzY3YmMwNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2Vu
dGVyTWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
TWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgTWVkaWFTdHJl
YW1DZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFT
dHJlYW1DcmVhCiAKICAgICBpZiAoYXVkaW9Db25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcg
aW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJl
ZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpBdWRp
bywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOworICAgICAgICBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJpZnlDb25zdHJhaW50c0Zvck1l
ZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCks
IGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+Y29uc3RyYWludHNJbnZhbGlkKGludmFsaWRD
b25zdHJhaW50KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBN
ZWRpYVN0cmVhbUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbUNyZWEKIAogICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7CiAgICAgICAg
IFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdl
cjo6c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3Vy
Y2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7Cisg
ICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFp
bnRzRm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50
cy5nZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICBpZiAoIWludmFsaWRDb25zdHJh
aW50LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY2xpZW50LT5jb25zdHJhaW50c0ludmFsaWQo
aW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtOTUsMTMgKzk1LDEz
IEBAIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQ
dHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVuCiAgICAgCiAgICAgaWYgKGF1ZGlvQ29uc3RyYWlu
dHMpIHsKICAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShN
ZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRD
b25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCku
dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBh
dWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICgh
aW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmZhaWxl
ZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoaW52YWxpZENvbnN0cmFpbnQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
TWVkaWFTdHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6
c2hhcmVkKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJj
ZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+IGF1ZGlvU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xl
dG9uKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6
QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCkpOwogICAgICAgICBBU1NFUlQoYXVkaW9Tb3Vy
Y2UpOwogICAgICAgICAKICAgICAgICAgYXVkaW9Tb3VyY2VzLmFwcGVuZChhdWRpb1NvdXJjZS5y
ZWxlYXNlKCkpOwpAQCAtMTA5LDEzICsxMDksMTMgQEAgdm9pZCBNZWRpYVN0cmVhbUNlbnRlck1h
Yzo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW4K
ICAgICAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcgaW52YWxp
ZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZl
cmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlk
ZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOworICAgICAgICBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlw
ZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFs
aWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVkVG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWlu
dHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gdmlkZW9Tb3Vy
Y2UgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5iZXN0U291cmNlRm9yVHlwZUFu
ZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5n
ZXQoKSk7CisgICAgICAgIFJlZlB0cjxNZWRpYVN0cmVhbVNvdXJjZT4gdmlkZW9Tb3VyY2UgPSBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5iZXN0U291cmNlRm9yVHlwZUFuZENv
bnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQo
KSk7CiAgICAgICAgIEFTU0VSVCh2aWRlb1NvdXJjZSk7CiAgICAgICAgIAogICAgICAgICB2aWRl
b1NvdXJjZXMuYXBwZW5kKHZpZGVvU291cmNlLnJlbGVhc2UoKSk7CkBAIC0xMjgsNyArMTI4LDcg
QEAgYm9vbCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Z2V0TWVkaWFTdHJlYW1UcmFja1NvdXJjZXMo
UGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWMKIHsKICAgICBSZWZQdHI8TWVkaWFTdHJlYW1UcmFj
a1NvdXJjZXNSZXF1ZXN0Q2xpZW50PiByZXF1ZXN0Q2xpZW50ID0gcHJwQ2xpZW50OwogCi0gICAg
VmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBzb3VyY2VzID0gQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2hhcmVkKCkuZ2V0U291cmNlc0luZm8ocmVxdWVzdENsaWVudC0+cmVxdWVzdE9y
aWdpbigpKTsKKyAgICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IHNvdXJjZXMgPSBB
VkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRTb3VyY2VzSW5mbyhyZXF1ZXN0
Q2xpZW50LT5yZXF1ZXN0T3JpZ2luKCkpOwogCiAgICAgcmVxdWVzdENsaWVudC0+ZGlkQ29tcGxl
dGVSZXF1ZXN0KHNvdXJjZXMpOwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuY3BwCmluZGV4IDg1ZWE2Njcx
YzAyMDc5NzQxOWE1ZDRhYzM0NmU1Yzg1MzNiODViYzIuLjM3MDZiNWMzODBiNDEzY2ZjMWI4ZTE2
NDUyY2E5MWI4OGUyMjExOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGNvbnN0
IGludCBnTWF4UmVxdWVzdHNUb1F1ZXVlID0gNjQ7CiAvLyBJZiB0aGVyZSB3ZXJlIHF1ZXVlZCBu
YW1lcyB0aGF0IGNvdWxkbid0IGJlIHNlbnQgc2ltdWx0YW5lb3VzbHksIGNoZWNrIHRoZSBzdGF0
ZSBvZiByZXNvbHZlcnMgYWZ0ZXIgdGhpcyBkZWxheS4KIHN0YXRpYyBjb25zdCBkb3VibGUgZ1Jl
dHJ5UmVzb2x2aW5nSW5TZWNvbmRzID0gMC4xOwogCi1ETlNSZXNvbHZlUXVldWUmIEROU1Jlc29s
dmVRdWV1ZTo6c2hhcmVkKCkKK0ROU1Jlc29sdmVRdWV1ZSYgRE5TUmVzb2x2ZVF1ZXVlOjpzaW5n
bGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxETlNSZXNvbHZlUXVldWU+IHF1
ZXVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jl
c29sdmVRdWV1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZl
UXVldWUuaAppbmRleCBjZDliYTBmYzBlMmE1NmVmNGRhYTRmYjk2NmQ3YzllNDMyOTQwY2JmLi4y
N2YwMGQ4YmQwMTkzNzYwNjAyOWU3N2E4ZTM3NTM3OThlNzk1ZTE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmgKQEAgLTM5LDcgKzM5
LDcgQEAgY2xhc3MgRE5TUmVzb2x2ZVF1ZXVlIHsKICAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8
RE5TUmVzb2x2ZVF1ZXVlPjsKIAogcHVibGljOgotICAgIHN0YXRpYyBETlNSZXNvbHZlUXVldWUm
IHNoYXJlZCgpOworICAgIHN0YXRpYyBETlNSZXNvbHZlUXVldWUmIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCBhZGQoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7CiAgICAgdm9pZCBkZWNyZW1lbnRS
ZXF1ZXN0Q291bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jZi9ETlNDRk5ldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0RO
U0NGTmV0LmNwcAppbmRleCBiZDQwNTcyZDlmMWIwYjg0ZjUwYjNhMGNhOWU0MGRjMjMxYTYwNTAz
Li5lNmZlYTZkMGRkNjczZDZkNzU0ZTFlOWNkOGYxNGJkMWExNzFiNTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0ROU0NGTmV0LmNwcApAQCAtNzcsNyArNzcs
NyBAQCBib29sIEROU1Jlc29sdmVRdWV1ZTo6cGxhdGZvcm1Qcm94eUlzRW5hYmxlZEluU3lzdGVt
UHJlZmVyZW5jZXMoKQogCiBzdGF0aWMgdm9pZCBjbGllbnRDYWxsYmFjayhDRkhvc3RSZWYgdGhl
SG9zdCwgQ0ZIb3N0SW5mb1R5cGUsIGNvbnN0IENGU3RyZWFtRXJyb3IqLCB2b2lkKikKIHsKLSAg
ICBETlNSZXNvbHZlUXVldWU6OnNoYXJlZCgpLmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOyAvLyBJ
dCdzIG9rIHRvIGNhbGwgc2hhcmVkKCkgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQsIHRoZSBzdGF0
aWMgdmFyaWFibGUgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBieSBub3cuCisgICAgRE5T
UmVzb2x2ZVF1ZXVlOjpzaW5nbGV0b24oKS5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsgLy8gSXQn
cyBvayB0byBjYWxsIHNpbmdsZXRvbigpIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCB0aGUgc3Rh
dGljIHZhcmlhYmxlIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYnkgbm93LgogICAgIENG
UmVsZWFzZSh0aGVIb3N0KTsKIH0KIApAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgcHJlZmV0Y2hE
TlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
ICAgIGlmIChob3N0bmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBETlNSZXNv
bHZlUXVldWU6OnNoYXJlZCgpLmFkZChob3N0bmFtZSk7CisgICAgRE5TUmVzb2x2ZVF1ZXVlOjpz
aW5nbGV0b24oKS5hZGQoaG9zdG5hbWUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKaW5kZXggY2E0MTQ4NDdmNWY5ZGUxMGE3
N2JhYjYxMGI5YzVmNGM4OWVkZTc1OS4uYTRmYjI0YmQ2NjdiODUwMjAwNzQwMDFiZjllMDQ4OTk5
ZmNhYTQ0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L0ROU1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9E
TlNTb3VwLmNwcApAQCAtNDcsNyArNDcsNyBAQCBib29sIEROU1Jlc29sdmVRdWV1ZTo6cGxhdGZv
cm1Qcm94eUlzRW5hYmxlZEluU3lzdGVtUHJlZmVyZW5jZXMoKQogCiBzdGF0aWMgdm9pZCByZXNv
bHZlZENhbGxiYWNrKFNvdXBBZGRyZXNzKiwgZ3VpbnQsIHZvaWQqKQogewotICAgIEROU1Jlc29s
dmVRdWV1ZTo6c2hhcmVkKCkuZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CisgICAgRE5TUmVzb2x2
ZVF1ZXVlOjpzaW5nbGV0b24oKS5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKIH0KIAogdm9pZCBE
TlNSZXNvbHZlUXVldWU6OnBsYXRmb3JtUmVzb2x2ZShjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQpA
QCAtNjMsNyArNjMsNyBAQCB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
CiAgICAgaWYgKGhvc3RuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRE5T
UmVzb2x2ZVF1ZXVlOjpzaGFyZWQoKS5hZGQoaG9zdG5hbWUpOworICAgIEROU1Jlc29sdmVRdWV1
ZTo6c2luZ2xldG9uKCkuYWRkKGhvc3RuYW1lKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCmluZGV4IGIzZDFhYTg0OWYwMmVhZGNhN2RhZTgyMGZiNjAxZjZiNjVhMDI4
NjYuLjg3ZGU3NTY5NjcyNTQxZDcyMDRhMzEyOWViZGE0NzliMDEyYzllYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTMwNCw3ICszMDQsNyBAQCB2b2lkIEludGVybmFs
czo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZShQYWdlKiBwYWdlKQogICAgIEFYT2JqZWN0Q2FjaGU6
OmRpc2FibGVBY2Nlc3NpYmlsaXR5KCk7CiAjZW5kaWYKIAotICAgIE1vY2tQYWdlT3ZlcmxheUNs
aWVudDo6c2hhcmVkKCkudW5pbnN0YWxsQWxsT3ZlcmxheXMoKTsKKyAgICBNb2NrUGFnZU92ZXJs
YXlDbGllbnQ6OnNpbmdsZXRvbigpLnVuaW5zdGFsbEFsbE92ZXJsYXlzKCk7CiB9CiAKIEludGVy
bmFsczo6SW50ZXJuYWxzKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTI0MzEsNyArMjQzMSw3IEBA
IHZvaWQgSW50ZXJuYWxzOjppbnN0YWxsTW9ja1BhZ2VPdmVybGF5KGNvbnN0IFN0cmluZyYgb3Zl
cmxheVR5cGUsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBN
b2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNoYXJlZCgpLmluc3RhbGxPdmVybGF5KGRvY3VtZW50LT5m
cmFtZSgpLT5tYWluRnJhbWUoKSwgb3ZlcmxheVR5cGUgPT0gInZpZXciID8gUGFnZU92ZXJsYXk6
Ok92ZXJsYXlUeXBlOjpWaWV3IDogUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpEb2N1bWVudCk7
CisgICAgTW9ja1BhZ2VPdmVybGF5Q2xpZW50OjpzaW5nbGV0b24oKS5pbnN0YWxsT3ZlcmxheShk
b2N1bWVudC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCksIG92ZXJsYXlUeXBlID09ICJ2aWV3IiA/IFBh
Z2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyA6IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6
RG9jdW1lbnQpOwogfQogCiBTdHJpbmcgSW50ZXJuYWxzOjpwYWdlT3ZlcmxheUxheWVyVHJlZUFz
VGV4dChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKQEAgLTI0NDQsNyArMjQ0NCw3IEBAIFN0cmlu
ZyBJbnRlcm5hbHM6OnBhZ2VPdmVybGF5TGF5ZXJUcmVlQXNUZXh0KEV4Y2VwdGlvbkNvZGUmIGVj
KSBjb25zdAogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogCi0gICAgcmV0dXJuIE1v
Y2tQYWdlT3ZlcmxheUNsaWVudDo6c2hhcmVkKCkubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LT5m
cmFtZSgpLT5tYWluRnJhbWUoKSk7CisgICAgcmV0dXJuIE1vY2tQYWdlT3ZlcmxheUNsaWVudDo6
c2luZ2xldG9uKCkubGF5ZXJUcmVlQXNUZXh0KGRvY3VtZW50LT5mcmFtZSgpLT5tYWluRnJhbWUo
KSk7CiB9CiAKIHZvaWQgSW50ZXJuYWxzOjpzZXRQYWdlTXV0ZWQoYm9vbCBtdXRlZCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAppbmRleCBi
ZTA5YzNkNjA2YzFkMWFjZTdkMjkxYjY2OWQxMDA1ZmY2MDFlM2M1Li42MWYxOWJmMTY1MDFhOWRm
ZjE2ZDdiOWU4OTgyMDQ4NGUyMTExNWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotTW9ja1BhZ2VPdmVybGF5Q2xpZW50JiBNb2NrUGFnZU92ZXJsYXlDbGll
bnQ6OnNoYXJlZCgpCitNb2NrUGFnZU92ZXJsYXlDbGllbnQmIE1vY2tQYWdlT3ZlcmxheUNsaWVu
dDo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TW9ja1BhZ2VPdmVy
bGF5Q2xpZW50PiBzaGFyZWRDbGllbnQ7CiAgICAgcmV0dXJuIHNoYXJlZENsaWVudC5nZXQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5oCmluZGV4
IDdkNDYzZjIzNjgyODI4M2JkN2FhNGFiYTg2YmFlYTBmMzhjYWU4OTQuLjFkZDI5N2IzOWEwZDcz
OGI3YzE0MjJkYWI0N2I5MTI0YWFkYjFmYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuaApAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBNYWluRnJh
bWU7CiBjbGFzcyBNb2NrUGFnZU92ZXJsYXlDbGllbnQgZmluYWwgOiBwdWJsaWMgUGFnZU92ZXJs
YXk6OkNsaWVudCB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPE1vY2tQYWdlT3Zl
cmxheUNsaWVudD47CiBwdWJsaWM6Ci0gICAgc3RhdGljIE1vY2tQYWdlT3ZlcmxheUNsaWVudCYg
c2hhcmVkKCk7CisgICAgc3RhdGljIE1vY2tQYWdlT3ZlcmxheUNsaWVudCYgc2luZ2xldG9uKCk7
CiAKICAgICBleHBsaWNpdCBNb2NrUGFnZU92ZXJsYXlDbGllbnQoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
d29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCmluZGV4IDBmYmViMWQ3MTRjODQxNWMyNjAzNmVkMGUz
MmMwOWVlMGY1YTZiM2EuLjNjMmRjYTU1MWNhNDZmMmRjNjBkMWVmMjYwNGJmYTc4YjMxZWQxYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKQEAgLTE0MSw3ICsxNDEs
NyBAQCB2b2lkIFdvcmtlclRocmVhZDo6d29ya2VyVGhyZWFkKCkKIHsKICAgICAvLyBQcm9wYWdh
dGUgdGhlIG1haW5UaHJlYWQncyBmZW52IHRvIHdvcmtlcnMuCiAjaWYgUExBVEZPUk0oSU9TKQot
ICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2hhcmVkKCkucHJvcGFnYXRlTWFpblRocmVh
ZEVudmlyb25tZW50KCk7CisgICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5nbGV0b24o
KS5wcm9wYWdhdGVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKICNlbmRpZgogCiAgICAgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwIGIv
U291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCmluZGV4IDZiZTgy
OWFiNDQzM2I3OTU4YmI5YzI4NmIyOGZkNjM4NGU0ZWQwNWIuLmQxNTBlY2E0NGM5MTA1NjFmMDEx
YjAxY2Y0MmY3Mjg1M2RiNjFhY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9X
ZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0
YWJhc2VQcm92aWRlci5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+CiAKLVdlYkRhdGFiYXNlUHJvdmlkZXImIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNoYXJlZCgp
CitXZWJEYXRhYmFzZVByb3ZpZGVyJiBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKQog
ewogICAgIHN0YXRpYyBXZWJEYXRhYmFzZVByb3ZpZGVyJiBkYXRhYmFzZVByb3ZpZGVyID0gYWRv
cHRSZWYoKm5ldyBXZWJEYXRhYmFzZVByb3ZpZGVyKS5sZWFrUmVmKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCmluZGV4IDMyZGMyN2ExMjZkOTlkM2E4
MjQzMWJiY2UxMDMwYzZhODkxNTY0M2QuLmNhMjExODBkNzQ3MzgzZTkyODM3MWJmZjQxOGFkYjBk
NjY2NGEwMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVBy
b3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIu
aApAQCAtMzIsNyArMzIsNyBAQAogY2xhc3MgV2ViRGF0YWJhc2VQcm92aWRlciBmaW5hbCA6IHB1
YmxpYyBXZWJDb3JlOjpEYXRhYmFzZVByb3ZpZGVyIHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJE
ZXN0cm95ZWQ8V2ViRGF0YWJhc2VQcm92aWRlcj47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYkRh
dGFiYXNlUHJvdmlkZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJEYXRhYmFzZVByb3ZpZGVy
JiBzaW5nbGV0b24oKTsKICAgICB2aXJ0dWFsIH5XZWJEYXRhYmFzZVByb3ZpZGVyKCk7CiAKIHBy
aXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3
YXJkTGlzdC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0
Lm1tCmluZGV4IDZiNDUwMDIxYzQyNzg2MjYzNjMyOTEzNjMxMDI3NzJjMjVjMTJlMWYuLmViZmJk
NGQwMDQxMDIzYzI1YzJjNjllODQ3OTA4MmM4YzQyNjM1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0hpc3RvcnkvV2ViQmFja0ZvcndhcmRMaXN0Lm1tCkBAIC0zNTUsNyArMzU1LDcgQEAg
c3RhdGljIGJvb2wgYnVtcGVyQ2FyQmFja0ZvcndhcmRIYWNrTmVlZGVkKCkKIAogLSAoTlNVSW50
ZWdlcilwYWdlQ2FjaGVTaXplCiB7Ci0gICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgp
KSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNoZTo6c2hhcmVkKCkubWF4U2l6ZSgpIDogMDsKKyAg
ICByZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkpIHVzZXNQYWdlQ2FjaGVdID8gUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5tYXhTaXplKCkgOiAwOwogfQogCiAtIChpbnQpYmFja0xpc3RDb3Vu
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggYmFlZTNkMDc1NzBiYjNkM2RjMWVk
Yjc4ZTMyMmM4MDhlODAyNTcxMS4uNDQzMWE5MDAxYTk5NGE5Y2M3M2I1YmVlNjg0MzliNTlkNzli
YjAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBAIC0xMjIsNyArMTIyLDcgQEAK
ICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2UoKS5lbXB0eSgpOwogCiAgICAgLy8gRW1wdHkgdGhl
IENyb3NzLU9yaWdpbiBQcmVmbGlnaHQgY2FjaGUKLSAgICBXZWJDb3JlOjpDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5lbXB0eSgpOworICAgIFdlYkNvcmU6OkNyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmVtcHR5KCk7CiB9CiAKICNp
ZiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNv
cmVTdGF0aXN0aWNzLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGlj
cy5tbQppbmRleCA1NjNlYzhlOTkwNmQ4YWQ4MTU2NzkxNjYxYmY0MDk3ZTVkYjkxY2I2Li5lOGRj
YjI0NDIyZGVkYmI4NGFjYjllODE0ZWMzYWE2ZWQ3YTRkZGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KQEAgLTIyNCwxMiArMjI0LDEyIEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiArIChpbnQpY2FjaGVkUGFnZUNvdW50CiB7Ci0gICAgcmV0
dXJuIFBhZ2VDYWNoZTo6c2hhcmVkKCkucGFnZUNvdW50KCk7CisgICAgcmV0dXJuIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkucGFnZUNvdW50KCk7CiB9CiAKICsgKGludCljYWNoZWRGcmFtZUNvdW50
CiB7Ci0gICAgcmV0dXJuIFBhZ2VDYWNoZTo6c2hhcmVkKCkuZnJhbWVDb3VudCgpOworICAgIHJl
dHVybiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLmZyYW1lQ291bnQoKTsKIH0KIAogLy8gRGVwcmVj
YXRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2Nh
cGVQbHVnaW5Ib3N0TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oCmluZGV4IDE0ODZkOTJkNzQ2ZTE4NGM0YTI3Mjhl
ZWQyYjVjOTY2OTRlZjRkYWUuLmZjYjIyMGFhYzY5MDc5NTZlZGYzZjE3MTM0NGUwNDZlNjk1ZTYy
ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgTmV0
c2NhcGVQbHVnaW5Ib3N0UHJveHk7CiAKIGNsYXNzIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIg
ewogcHVibGljOgotICAgIHN0YXRpYyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyJiBzaGFyZWQo
KTsKKyAgICBzdGF0aWMgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgc2luZ2xldG9uKCk7CiAg
ICAgCiAgICAgUGFzc1JlZlB0cjxOZXRzY2FwZVBsdWdpbkluc3RhbmNlUHJveHk+IGluc3RhbnRp
YXRlUGx1Z2luKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY3B1X3R5cGVfdCBwbHVnaW5BcmNo
aXRlY3R1cmUsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRlbnRpZmllciwgV2ViSG9zdGVkTmV0c2Nh
cGVQbHVnaW5WaWV3ICosIE5TU3RyaW5nICptaW1lVHlwZSwgTlNBcnJheSAqYXR0cmlidXRlS2V5
cywgTlNBcnJheSAqYXR0cmlidXRlVmFsdWVzLCBOU1N0cmluZyAqdXNlckFnZW50LCBOU1VSTCAq
c291cmNlVVJMLCBib29sIGZ1bGxGcmFtZSwgYm9vbCBpc1ByaXZhdGVCcm93c2luZ0VuYWJsZWQs
IGJvb2wgaXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgYm9vbCBob3N0TGF5ZXJzSW5X
aW5kb3dTZXJ2ZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1
Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQppbmRleCAxZjlmYWNiYmRm
MjA1NDg5N2FlNjE3MWFjNTE4MGJlOTdmMGVlNzhkLi40MGVjYjIwNjIzNWFkZmY2ZTc1ZmMzNDhj
MTlmMDA0NWMwMWU0ZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hv
c3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KQEAgLTQ5LDcgKzQ5
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1O
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyJiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaGFy
ZWQoKQorTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdl
cjo6c2luZ2xldG9uKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciwgcGx1Z2luSG9zdE1hbmFnZXIsICgpKTsKICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkubW0KaW5kZXggNTcwNWNmYjNiMTdlZThhMjVjODQ3NDU3MmQzMmViMzI2
ZjQ0YjkxZi4uOWNkNjU1YzlmNzEwNTM1YTlkZjJhZjQ1N2Q3MDQ0NmE2ZDliNmU2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0
UHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0UHJveHkubW0KQEAgLTE0Niw3ICsxNDYsNyBAQCB2b2lkIE5ldHNjYXBlUGx1Z2lu
SG9zdFByb3h5OjpwbHVnaW5Ib3N0RGllZCgpCiAgICAgZm9yIChQbHVnaW5JbnN0YW5jZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBpbnN0YW5jZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQog
ICAgICAgICBpdC0+dmFsdWUtPnBsdWdpbkhvc3REaWVkKCk7CiAgICAgCi0gICAgTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luSG9zdERpZWQodGhpcyk7CisgICAgTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2luZ2xldG9uKCkucGx1Z2luSG9zdERpZWQodGhpcyk7
CiAgICAgCiAgICAgLy8gVGhlIHBsdWctaW4gY3Jhc2hlZCB3aGlsZSBpdHMgbWVudSBiYXIgd2Fz
IGhpZGRlbi4gTWFrZSBzdXJlIHRvIHNob3cgaXQuCiAgICAgaWYgKCFtX21lbnVCYXJJc1Zpc2li
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0
ZWROZXRzY2FwZVBsdWdpblZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3Rl
ZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0KaW5kZXggZTQyOTdmYWViMmZhYjc5ZTE1
M2M2Y2I3YzUwNjc1N2ExMWIyMTFkOS4uNzYwMDU4MzY5MGQ3OTYwYzVkOGE1OWE3M2U3MmQwMjVk
YjJjZmYzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2Vi
SG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQpAQCAtMTMwLDcgKzEzMCw3
IEBAIGV4dGVybiAiQyIgewogICAgIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkID0gW1tb
c2VsZiB3ZWJWaWV3XSBwcmVmZXJlbmNlc10gYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWRd
OwogICAgIF9ob3N0c0xheWVyc0luV2luZG93U2VydmVyID0gW3NlbGYgd2luZG93SG9zdHNMYXll
cnNJbldpbmRvd1NlcnZlcl07CiAKLSAgICBfcHJveHkgPSBOZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpzaGFyZWQoKS5pbnN0YW50aWF0ZVBsdWdpbihbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGF0
aF0sIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlXSwgW19wbHVn
aW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdLCBzZWxmLCBfTUlNRVR5cGUuZ2V0KCks
IF9hdHRyaWJ1dGVLZXlzLmdldCgpLCBfYXR0cmlidXRlVmFsdWVzLmdldCgpLCB1c2VyQWdlbnQs
IF9zb3VyY2VVUkwuZ2V0KCksCisgICAgX3Byb3h5ID0gTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdl
cjo6c2luZ2xldG9uKCkuaW5zdGFudGlhdGVQbHVnaW4oW19wbHVnaW5QYWNrYWdlLmdldCgpIHBh
dGhdLCBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZV0sIFtfcGx1
Z2luUGFja2FnZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXSwgc2VsZiwgX01JTUVUeXBlLmdldCgp
LCBfYXR0cmlidXRlS2V5cy5nZXQoKSwgX2F0dHJpYnV0ZVZhbHVlcy5nZXQoKSwgdXNlckFnZW50
LCBfc291cmNlVVJMLmdldCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tb2RlID09IE5QX0ZVTEwsIF9pc1ByaXZh
dGVCcm93c2luZ0VuYWJsZWQsIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBfaG9zdHNM
YXllcnNJbldpbmRvd1NlcnZlcik7CiAgICAgaWYgKCFfcHJveHkpIAogICAgICAgICByZXR1cm4g
Tk87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1
Z2luUGFja2FnZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5QYWNrYWdlLm1tCmluZGV4IDllMzQ1ODJhNDZhNzIxNDI4YjliYWZhZTg2MWQxY2NiMDExY2Uz
OTkuLjE5MDZlZjM2N2RiNTRhNmNhMmE4YmQxNDUzMzgyMmE5MTJlNjZiOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlLm1t
CkBAIC0yMjEsNyArMjIxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQp
Y3JlYXRlUHJvcGVydHlMaXN0RmlsZQogewotICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNoYXJlZCgpLmNyZWF0ZVByb3BlcnR5TGlzdEZpbGUocGF0aCwgcGx1Z2luSG9zdEFyY2hpdGVj
dHVyZSwgW3NlbGYgYnVuZGxlSWRlbnRpZmllcl0pOworICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXI6OnNpbmdsZXRvbigpLmNyZWF0ZVByb3BlcnR5TGlzdEZpbGUocGF0aCwgcGx1Z2luSG9z
dEFyY2hpdGVjdHVyZSwgW3NlbGYgYnVuZGxlSWRlbnRpZmllcl0pOwogfQogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5t
bQppbmRleCBjNTBiYzJhNGM3Nzg2YjcxYTEwNzRkYmM3ZmRjNDE1NjY5YmNmNDQ4Li44M2Q0ODY1
OTQxYWZjNzYxMDVlNzM5YThlOWRiYTllNTM0YTJkYzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCkBAIC0yOTcsNyArMjk3
LDcgQEAgUGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbWUqIGZyYW1lLCBj
b25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QKIAogI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9D
RVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAobmV3V2ViVmlldykK
LSAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaGFyZWQoKS5kaWRD
cmVhdGVXaW5kb3coKTsKKyAgICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5kaWRDcmVhdGVXaW5kb3coKTsKICNlbmRpZgogICAgIAogICAgIHJldHVy
biBjb3JlKG5ld1dlYlZpZXcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQppbmRleCA4NDQ3MTY0MzE0ZDU1NGY0
NTY5MWU5YzIyOThjNmU0ZGMzZmJiMDU0Li5lMWYzN2RiYjA1ZmEzMjVmMzcwNWU3OTQ3MmJkYjU4
MDIzYzZlNDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUxvYWRlckNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbQpAQCAtODQyLDcgKzg0Miw3IEBAIEZyYW1lKiBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKGNvbnN0IE5hdmlnYXRpb25B
Y3Rpb24mKQogICAgIAogI2lmIFVTRShQTFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVU
U0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAobmV3V2ViVmlldykKLSAgICAgICAgV2ViS2l0OjpO
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaGFyZWQoKS5kaWRDcmVhdGVXaW5kb3coKTsKKyAg
ICAgICAgV2ViS2l0OjpOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5kaWRD
cmVhdGVXaW5kb3coKTsKICNlbmRpZgogICAgICAgICAKICAgICByZXR1cm4gY29yZShbbmV3V2Vi
VmlldyBtYWluRnJhbWVdKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tCmluZGV4IDRmMmUyMjE3MDI1ZWU1N2ExZmEz
NDgxMmJlNmRmZmNkZTI5Y2JkNTQuLjMzMmY2ZWIwMDE5MTk2NGNiMjY5ZWUxMmUwY2Q0ZjYxZTZm
YWJmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZp
c2l0ZWRMaW5rU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaXRlZExpbmtTdG9yZS5tbQpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIFdlYlZpc2l0ZWRM
aW5rU3RvcmU6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCiB7CiAgICAgZm9yIChhdXRvJiB2aXNp
dGVkTGlua1N0b3JlIDogdmlzaXRlZExpbmtTdG9yZXMoKSkKICAgICAgICAgdmlzaXRlZExpbmtT
dG9yZS0+cmVtb3ZlVmlzaXRlZExpbmtIYXNoZXMoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
Lm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNp
bmdsZXRvbigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9p
ZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayhOU1N0cmluZyAqdXJsU3RyaW5n
KQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlz
aXRlZExpbmsoTlNTdHJpbmcgKnVybFN0cmluZykKICAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLnJl
bW92ZShsaW5rSGFzaCk7CiAKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7
Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVj
YWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlu
a1N0eWxlUmVjYWxjKCk7CiB9CiAKIGJvb2wgV2ViVmlzaXRlZExpbmtTdG9yZTo6aXNMaW5rVmlz
aXRlZChQYWdlJiBwYWdlLCBMaW5rSGFzaCBsaW5rSGFzaCwgY29uc3QgVVJMJiBiYXNlVVJMLCBj
b25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lk
IFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rSGFzaChMaW5rSGFzaCBsaW5rSGFz
aCkKICAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZChsaW5rSGFzaCk7CiAKICAgICBpbnZhbGlk
YXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJr
UGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0
b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgV2Vi
VmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExpbmtIYXNoZXMoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDBjMDVmMmM1MDg4ODBkYTg5ZGQ0NGVkNDJkODE4NTIz
YzNlNDFmM2UuLjVjNmZkNjQ1OTM2NDlkMDAxNGQxN2RhOWI2Njk2YWVmYTI1MjJjMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAgLTg0OSw3ICs4NDksNyBAQCBzdGF0aWMg
dm9pZCBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3ZpZGVySWZOZWNlc3NhcnkoKQogICAgIGlm
IChpbml0aWFsaXplZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgR2FtZXBhZFByb3ZpZGVyOjpz
aGFyZWQoKS5zZXRTaGFyZWRQcm92aWRlcihISURHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpKTsK
KyAgICBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldFNoYXJlZFByb3ZpZGVyKEhJREdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkpOwogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKIH0K
ICNlbmRpZgpAQCAtOTU3LDcgKzk1Nyw3IEBAIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVH
YW1lcGFkUHJvdmlkZXJJZk5lY2Vzc2FyeSgpCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uYWx0ZXJu
YXRpdmVUZXh0Q2xpZW50ID0gbmV3IFdlYkFsdGVybmF0aXZlVGV4dENsaWVudChzZWxmKTsKICAg
ICBwYWdlQ29uZmlndXJhdGlvbi5sb2FkZXJDbGllbnRGb3JNYWluRnJhbWUgPSBuZXcgV2ViRnJh
bWVMb2FkZXJDbGllbnQ7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xp
ZW50ID0gbmV3IFdlYlByb2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKLSAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNoYXJlZCgp
OworICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQ
cm92aWRlcjo6c2luZ2xldG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVz
cGFjZVByb3ZpZGVyID0gJl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVy
KCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2
YXRlLT5ncm91cC0+dXNlckNvbnRlbnRDb250cm9sbGVyKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRp
b24udmlzaXRlZExpbmtTdG9yZSA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUo
KTsKQEAgLTExOTAsNyArMTE5MCw3IEBAIHN0YXRpYyB2b2lkIFdlYktpdEluaXRpYWxpemVHYW1l
cGFkUHJvdmlkZXJJZk5lY2Vzc2FyeSgpCiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uaW5zcGVjdG9y
Q2xpZW50ID0gbmV3IFdlYkluc3BlY3RvckNsaWVudChzZWxmKTsKICAgICBwYWdlQ29uZmlndXJh
dGlvbi5sb2FkZXJDbGllbnRGb3JNYWluRnJhbWUgPSBuZXcgV2ViRnJhbWVMb2FkZXJDbGllbnQ7
CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xpZW50ID0gbmV3IFdlYlBy
b2dyZXNzVHJhY2tlckNsaWVudChzZWxmKTsKLSAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFz
ZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNoYXJlZCgpOworICAgIHBhZ2VDb25m
aWd1cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xl
dG9uKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0g
Jl9wcml2YXRlLT5ncm91cC0+c3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCk7CiAgICAgcGFnZUNv
bmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gJl9wcml2YXRlLT5ncm91cC0+dXNl
ckNvbnRlbnRDb250cm9sbGVyKCk7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtT
dG9yZSA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnZpc2l0ZWRMaW5rU3RvcmUoKTsKQEAgLTE4NjgsMTIg
KzE4NjgsMTIgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKICNp
ZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICsgKHZvaWQpX2VuYWJsZVJlbW90ZUluc3BlY3Rv
cgogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc3RhcnQoKTsKKyAgICBSZW1vdGVJ
bnNwZWN0b3I6OnNpbmdsZXRvbigpLnN0YXJ0KCk7CiB9CiAKICsgKHZvaWQpX2Rpc2FibGVSZW1v
dGVJbnNwZWN0b3IKIHsKLSAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnN0b3AoKTsKKyAg
ICBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnN0b3AoKTsKIH0KIAogKyAodm9pZClfZGlz
YWJsZUF1dG9TdGFydFJlbW90ZUluc3BlY3RvcgpAQCAtMTg4MywxMiArMTg4MywxMiBAQCBzdGF0
aWMgYm9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogCiArIChCT09MKV9pc1JlbW90
ZUluc3BlY3RvckVuYWJsZWQKIHsKLSAgICByZXR1cm4gUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQo
KS5lbmFibGVkKCk7CisgICAgcmV0dXJuIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuZW5h
YmxlZCgpOwogfQogCiArIChCT09MKV9oYXNSZW1vdGVJbnNwZWN0b3JTZXNzaW9uCiB7Ci0gICAg
cmV0dXJuIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuaGFzQWN0aXZlRGVidWdTZXNzaW9uKCk7
CisgICAgcmV0dXJuIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuaGFzQWN0aXZlRGVidWdT
ZXNzaW9uKCk7CiB9CiAKIC0gKEJPT0wpYWxsb3dzUmVtb3RlSW5zcGVjdGlvbgpAQCAtMTkyNiw3
ICsxOTI2LDcgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKIC0g
KHZvaWQpX3NldEhvc3RBcHBsaWNhdGlvblByb2Nlc3NJZGVudGlmaWVyOihwaWRfdClwaWQgYXVk
aXRUb2tlbjooYXVkaXRfdG9rZW5fdClhdWRpdFRva2VuCiB7CiAgICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gYXVkaXREYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwgKGNvbnN0IFVJ
bnQ4KikmYXVkaXRUb2tlbiwgc2l6ZW9mKGF1ZGl0VG9rZW4pKSk7Ci0gICAgUmVtb3RlSW5zcGVj
dG9yOjpzaGFyZWQoKS5zZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24ocGlkLCBhdWRpdERhdGEp
OworICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9y
bWF0aW9uKHBpZCwgYXVkaXREYXRhKTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAjZW5k
aWYgLy8gRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCkBAIC03OTE1LDkgKzc5MTUsOSBAQCBzdGF0
aWMgaW5saW5lIHVpbnQ2NF90IHJvdW5kVXBUb1Bvd2VyT2YyKHVpbnQ2NF90IG51bSkKIAogICAg
IG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVN
YXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7CiAgICAgbWVtb3J5Q2FjaGUoKS5z
ZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9u
SW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVT
aXplKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNldE1heFNpemUocGFnZUNhY2hlU2l6
ZSk7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0U2hvdWxk
Q2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0
U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogICAgIG5zdXJsQ2FjaGVNZW1vcnlDYXBh
Y2l0eSA9IHN0ZDo6bWF4KG5zdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgW25zdXJsQ2FjaGUgbWVt
b3J5Q2FwYWNpdHldKTsKICAgICBDRlVSTENhY2hlUmVmIGNmQ2FjaGU7CiAgICAgaWYgKFtuc3Vy
bENhY2hlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX0NGVVJMQ2FjaGUpXSAmJiAoY2ZD
YWNoZSA9IFtuc3VybENhY2hlIF9DRlVSTENhY2hlXSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDYWNoZS5jcHAKaW5k
ZXggN2MyYzBjZjkxNTM5MTcxYTYxNTEyYTk1NTZjZDFmMmI0NjVmYTlhYi4uZGEyNzI2YjcxMTk3
NGIxMjExYTZkM2RhYWIxN2VhMTkzNjRhZWQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93
aW4vV2ViQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNhY2hlLmNwcApAQCAt
MjE1LDcgKzIxNSw3IEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViQ2FjaGU6OmVtcHR5
KCB2b2lkKQogICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLmVtcHR5KCk7CiAKICAgICAvLyBF
bXB0eSB0aGUgQ3Jvc3MtT3JpZ2luIFByZWZsaWdodCBjYWNoZQotICAgIFdlYkNvcmU6OkNyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmVtcHR5KCk7CisgICAgV2ViQ29y
ZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuZW1wdHkoKTsK
IAogICAgIHJldHVybiBTX09LOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2Vi
Q29yZVN0YXRpc3RpY3MuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3Mu
Y3BwCmluZGV4IGI0MzA3MWMyNTI4ZGE2ZTc4ZThiZDEyNzE1MTBmYzE1N2I0YTczN2IuLjE2ODAy
NjVhZDgyZjhmYmIyNjQyNDNmNjEyYWNlMDZhYjYyNmVmNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9X
ZWJDb3JlU3RhdGlzdGljcy5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBIUkVTVUxUIFdlYkNvcmVT
dGF0aXN0aWNzOjpjYWNoZWRQYWdlQ291bnQoSU5UKiBjb3VudCkKICAgICBpZiAoIWNvdW50KQog
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwogCi0gICAgKmNvdW50ID0gUGFnZUNhY2hlOjpzaGFy
ZWQoKS5wYWdlQ291bnQoKTsKKyAgICAqY291bnQgPSBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBh
Z2VDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQogCkBAIC0zMzYsNiArMzM2LDYgQEAgSFJF
U1VMVCBXZWJDb3JlU3RhdGlzdGljczo6Y2FjaGVkRnJhbWVDb3VudChJTlQqIGNvdW50KQogICAg
IGlmICghY291bnQpCiAgICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqY291bnQgPSBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLmZyYW1lQ291bnQoKTsKKyAgICAqY291bnQgPSBQYWdlQ2FjaGU6
OnNpbmdsZXRvbigpLmZyYW1lQ291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9y
ZS5jcHAKaW5kZXggNDljMDM3NjJlOTdjOWExZTdiYWRiMzc0ZmFmMWM2YjMxNzJmN2I1Yy4uZmYz
MThhMWNhM2ZjOTg2MjM2ZWMwNmM4Y2MzYTUzNmQ1MGNlYjEyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5jcHAK
QEAgLTM0LDcgKzM0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIHN0YXRpYyBib29s
IHNfc2hvdWxkVHJhY2tWaXNpdGVkTGlua3M7CiAKLVdlYlZpc2l0ZWRMaW5rU3RvcmUmIFdlYlZp
c2l0ZWRMaW5rU3RvcmU6OnNoYXJlZCgpCitXZWJWaXNpdGVkTGlua1N0b3JlJiBXZWJWaXNpdGVk
TGlua1N0b3JlOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBXZWJWaXNpdGVkTGlua1N0b3Jl
JiB2aXNpdGVkTGlua1N0b3JlID0gKmFkb3B0UmVmKG5ldyBXZWJWaXNpdGVkTGlua1N0b3JlKS5s
ZWFrUmVmKCk7CiAgICAgCkBAIC02Miw4ICs2Miw4IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9y
ZTo6c2V0U2hvdWxkVHJhY2tWaXNpdGVkTGlua3MoYm9vbCBzaG91bGRUcmFja1Zpc2l0ZWRMaW5r
CiAKIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsK
LSAgICBzaGFyZWQoKS5yZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpOwotICAgIFBhZ2VDYWNoZTo6
c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIHNpbmds
ZXRvbigpLnJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0
b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgV2Vi
VmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmsoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcp
CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVk
TGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gpCiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQo
bGlua0hhc2gpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsobGlua0hhc2gpOwotICAg
IFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygp
OworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHls
ZVJlY2FsYygpOwogfQogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRM
aW5rSGFzaGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0
L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaAppbmRleCA3ZTdhMDc0NzUxMmEwOTY5ZDZmYWJkMDg1Yjg5
MDUyN2E5YjE3NTc4Li42NGE5ODBmMWZhNDVjODA0ZmY2NjU3YTRlZWZhMmJhNmQ2YTY0ZjFjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRl
ZExpbmtTdG9yZS5oCkBAIC0zMiw3ICszMiw3IEBACiAKIGNsYXNzIFdlYlZpc2l0ZWRMaW5rU3Rv
cmUgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VmlzaXRlZExpbmtTdG9yZSB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFdlYlZpc2l0ZWRMaW5rU3RvcmUmIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJW
aXNpdGVkTGlua1N0b3JlJiBzaW5nbGV0b24oKTsKICAgICBXZWJWaXNpdGVkTGlua1N0b3JlKCk7
CiAgICAgdmlydHVhbCB+V2ViVmlzaXRlZExpbmtTdG9yZSgpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3Bw
CmluZGV4IGY0ZDVlN2Y4YTdiYzcxM2I3OGQ4NzQ3ZDA2ZDBjY2IxOWM3MGRkYzcuLjk5ZDM1M2Mw
MDk3ZjI4MDM1OGViZGMzNWYwZTAwZTMwZTI2NGFiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCkBA
IC02NzUsNyArNjc1LDcgQEAgdm9pZCBXZWJWaWV3OjpzZXRDYWNoZU1vZGVsKFdlYkNhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1p
bkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7
CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
c2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNl
dE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICNpZiBVU0UoQ0ZORVRXT1JLKQogICAgIC8vIERv
bid0IHNocmluayBhIGJpZyBkaXNrIGNhY2hlLCBzaW5jZSB0aGF0IHdvdWxkIGNhdXNlIGNodXJu
LgpAQCAtMjgwNSwxMCArMjgwNSwxMCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYlZp
ZXc6OmluaXRXaXRoRnJhbWUoCiAgICAgY29uZmlndXJhdGlvbi5kcmFnQ2xpZW50ID0gbmV3IFdl
YkRyYWdDbGllbnQodGhpcyk7CiAgICAgY29uZmlndXJhdGlvbi5pbnNwZWN0b3JDbGllbnQgPSBt
X2luc3BlY3RvckNsaWVudDsKICAgICBjb25maWd1cmF0aW9uLmxvYWRlckNsaWVudEZvck1haW5G
cmFtZSA9IG5ldyBXZWJGcmFtZUxvYWRlckNsaWVudDsKLSAgICBjb25maWd1cmF0aW9uLmRhdGFi
YXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKCk7CisgICAgY29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRv
bigpOwogICAgIGNvbmZpZ3VyYXRpb24uc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyID0gV2ViU3Rv
cmFnZU5hbWVzcGFjZVByb3ZpZGVyOjpjcmVhdGUobG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKG1f
cHJlZmVyZW5jZXMuZ2V0KCkpKTsKICAgICBjb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNs
aWVudCA9IHN0YXRpY19jYXN0PFdlYkZyYW1lTG9hZGVyQ2xpZW50Kj4oY29uZmlndXJhdGlvbi5s
b2FkZXJDbGllbnRGb3JNYWluRnJhbWUpOwotICAgIGNvbmZpZ3VyYXRpb24udmlzaXRlZExpbmtT
dG9yZSA9ICZXZWJWaXNpdGVkTGlua1N0b3JlOjpzaGFyZWQoKTsKKyAgICBjb25maWd1cmF0aW9u
LnZpc2l0ZWRMaW5rU3RvcmUgPSAmV2ViVmlzaXRlZExpbmtTdG9yZTo6c2luZ2xldG9uKCk7CiAK
ICAgICBtX3BhZ2UgPSBuZXcgUGFnZShjb25maWd1cmF0aW9uKTsKICAgICBwcm92aWRlR2VvbG9j
YXRpb25UbyhtX3BhZ2UsIG5ldyBXZWJHZW9sb2NhdGlvbkNsaWVudCh0aGlzKSk7CkBAIC02NDY0
LDcgKzY0NjQsNyBAQCBIUkVTVUxUIFdlYlZpZXc6Omhpc3RvcnlEZWxlZ2F0ZShJV2ViSGlzdG9y
eURlbGVnYXRlKiogaGlzdG9yeURlbGVnYXRlKQogCiBIUkVTVUxUIFdlYlZpZXc6OmFkZFZpc2l0
ZWRMaW5rcyhCU1RSKiB2aXNpdGVkVVJMcywgdW5zaWduZWQgdmlzaXRlZFVSTENvdW50KQogewot
ICAgIGF1dG8mIHZpc2l0ZWRMaW5rU3RvcmUgPSBXZWJWaXNpdGVkTGlua1N0b3JlOjpzaGFyZWQo
KTsKKyAgICBhdXRvJiB2aXNpdGVkTGlua1N0b3JlID0gV2ViVmlzaXRlZExpbmtTdG9yZTo6c2lu
Z2xldG9uKCk7CiAgICAgUGFnZUdyb3VwJiBncm91cCA9IGNvcmUodGhpcyktPmdyb3VwKCk7CiAg
ICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZpc2l0ZWRVUkxDb3VudDsgKytpKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
Y3BwCmluZGV4IDg1YTkwMDA4NzlkNDI4ZjRiNzVlMmYwNzMyYmZmYTcyY2RiNTE0ZmQuLjllNTll
YmUzYTFmNWYzZTliMGYzMjBhN2IwMzkxNjAzZmJlZTE1ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC00Nyw3ICs0Nyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotRGF0
YWJhc2VQcm9jZXNzJiBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpCitEYXRhYmFzZVByb2Nlc3Mm
IERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RGF0YWJhc2VQcm9jZXNzPiBkYXRhYmFzZVByb2Nlc3M7CiAgICAgcmV0dXJuIGRhdGFiYXNl
UHJvY2VzczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRh
YmFzZVByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVBy
b2Nlc3MuaAppbmRleCBiMmIyNGVlYTEzZmZiODFmM2NmNzkwNDdkZmM3MDE4NDQzZjVhYTE2Li42
ZWFlZWRmYWI1ZDY3YmJiYjkyNDU4ZDAxZDFiN2I4NzAzY2IxZjMwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKKysrIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCkBAIC00OCw3ICs0OCw3
IEBAIGNsYXNzIERhdGFiYXNlUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MsIHB1YmxpYyBX
ZWJPcmlnaW5EYXRhTWFuYWdlclN1cHBsZW1lCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0
YWJhc2VQcm9jZXNzKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RGF0YWJhc2VQ
cm9jZXNzPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRGF0YWJhc2VQcm9jZXNzJiBzaGFyZWQoKTsK
KyAgICBzdGF0aWMgRGF0YWJhc2VQcm9jZXNzJiBzaW5nbGV0b24oKTsKICAgICB+RGF0YWJhc2VQ
cm9jZXNzKCk7CiAKICAgICBjb25zdCBTdHJpbmcmIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vz
c0lEQkNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAppbmRleCA4YmQwNmIzYzkxZThj
Y2JjMDIwYmQ5YTA1OWJlODhiYmVlYWZhZmJkLi42MDM1ODgwNjc2OTc5ZWZkODIxZmU5MWFmODgx
Yjg1NmRjMmY0OTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbi5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uOjpkaXNjb25uZWN0ZWRGcm9tV2ViUHJvY2VzcygpCiAKIHZvaWQgRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbjo6ZXN0YWJsaXNoQ29ubmVjdGlvbihjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBvcGVuaW5nT3JpZ2luLCBjb25zdCBTZWN1
cml0eU9yaWdpbkRhdGEmIG1haW5GcmFtZU9yaWdpbikKIHsKLSAgICBtX3VuaXF1ZUlEQkRhdGFi
YXNlID0gRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5nZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFi
YXNlKFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZU5hbWUsIG9wZW5pbmdPcmln
aW4sIG1haW5GcmFtZU9yaWdpbikpOworICAgIG1fdW5pcXVlSURCRGF0YWJhc2UgPSBEYXRhYmFz
ZVByb2Nlc3M6OnNpbmdsZXRvbigpLmdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlTmFtZSwgb3BlbmluZ09yaWdpbiwgbWFpbkZy
YW1lT3JpZ2luKSk7CiAgICAgbV91bmlxdWVJREJEYXRhYmFzZS0+cmVnaXN0ZXJDb25uZWN0aW9u
KCp0aGlzKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCBiMzAxMjI1YTBh
MGJiYmM1NGMyYmZiYjNlMTJhODhmMTUwMTY0ZjE2Li4xNWM3ZjExZGMwNzI3Yzc4ZmE5YTM2ZDcw
YjI1ZmQ5N2VhNjUyN2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nl
c3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtNjksNyAr
NjksNyBAQCBVbmlxdWVJREJEYXRhYmFzZTo6VW5pcXVlSURCRGF0YWJhc2UoY29uc3QgVW5pcXVl
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaQogICAgIC8vIEVhY2ggdW5pcXVlIEluZGV4
ZWQgRGF0YWJhc2UgZXhpc3RzIGluIGEgZGlyZWN0b3J5IG5hbWVkIGZvciB0aGUgZGF0YWJhc2Us
IHdoaWNoIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSByZXByZXNlbnRpbmcgaXRzIG9wZW5pbmcgb3Jp
Z2luLgogICAgIG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChkYXRhYmFzZUZpbGVuYW1lSWRlbnRpZmllcihpZGVudGlmaWVyLm9wZW5pbmdPcmln
aW4oKSksIGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkpOwogCi0gICAgRGF0YWJhc2VQcm9jZXNz
OjpzaGFyZWQoKS5lbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMobV9kYXRh
YmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKKyAgICBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZlUGF0aEV4aXN0cyhtX2RhdGFiYXNlUmVsYXRp
dmVEaXJlY3RvcnkpOwogfQogCiBVbmlxdWVJREJEYXRhYmFzZTo6flVuaXF1ZUlEQkRhdGFiYXNl
KCkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjp1bnJlZ2lzdGVy
Q29ubmVjdGlvbihEYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uJiBjb25uZQogCiAgICAgaWYg
KG1fY29ubmVjdGlvbnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tz
LmlzRW1wdHkoKSkgewogICAgICAgICBzaHV0ZG93bihVbmlxdWVJREJEYXRhYmFzZVNodXRkb3du
VHlwZTo6Tm9ybWFsU2h1dGRvd24pOwotICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgp
LnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKKyAgICAgICAgRGF0YWJhc2VQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CiAgICAgfQogfQog
CkBAIC0xMTI1LDcgKzExMjUsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJv
bGxiYWNrKGNvbnN0IFdlYktpdDo6SURCSWRlbnRpZmllciYgdHJhbnNhY3RpbwogICAgICAgICBy
ZXNldFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSWQsIFt0aGlzLCB0cmFuc2FjdGlvbklkXShib29s
KSB7CiAgICAgICAgICAgICBpZiAobV9hY2NlcHRpbmdOZXdSZXF1ZXN0cyAmJiBtX2Nvbm5lY3Rp
b25zLmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICBzaHV0ZG93bihVbmlxdWVJREJEYXRhYmFzZVNodXRkb3duVHlw
ZTo6Tm9ybWFsU2h1dGRvd24pOwotICAgICAgICAgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hh
cmVkKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICAgICAgICAgIERh
dGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMp
OwogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTExMzQsNyArMTEzNCw3
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmFsaXplUm9sbGJhY2soY29uc3QgV2ViS2l0
OjpJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvCiBTdHJpbmcgVW5pcXVlSURCRGF0YWJhc2U6OmFi
c29sdXRlRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdAogewogICAgIEFTU0VSVChSdW5Mb29wOjpp
c01haW4oKSk7Ci0gICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuYWJzb2x1dGVJ
bmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKG1fZGF0YWJhc2VSZWxh
dGl2ZURpcmVjdG9yeSk7CisgICAgcmV0dXJuIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCku
YWJzb2x1dGVJbmRleGVkRGF0YWJhc2VQYXRoRnJvbURhdGFiYXNlUmVsYXRpdmVQYXRoKG1fZGF0
YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7CiB9CiAKIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBv
c3RNYWluVGhyZWFkVGFzayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiB0YXNrLCBEYXRhYmFz
ZVRhc2tUeXBlIHRhc2tUeXBlKQpAQCAtMTE4OSw3ICsxMTg5LDcgQEAgdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6cG9zdERhdGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8QXN5bmNUYXNrPiB0YXNr
LCBEYXRhYmEKICAgICBtX2RhdGFiYXNlVGFza3MuYXBwZW5kKFdURjo6bW92ZSh0YXNrKSk7CiAK
ICAgICBSZWZQdHI8VW5pcXVlSURCRGF0YWJhc2U+IGRhdGFiYXNlKHRoaXMpOwotICAgIERhdGFi
YXNlUHJvY2Vzczo6c2hhcmVkKCkucXVldWUoKS5kaXNwYXRjaChbZGF0YWJhc2VdIHsKKyAgICBE
YXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLnF1ZXVlKCkuZGlzcGF0Y2goW2RhdGFiYXNlXSB7
CiAgICAgICAgIGRhdGFiYXNlLT5wZXJmb3JtTmV4dERhdGFiYXNlVGFzaygpOwogICAgIH0pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3
b3JrQmxvYlJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVB
UEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKaW5kZXggYzYwMTg4Yzg0YzI5YzZiZjY4NzcyMWQ3
NDI0MmM0YWMyNmQ4YzNjNy4uZWE1MjBhOWFmNmI0YmQ1NTc5MzViYTQ0MTlmNTIyNDM3NzVhYTZm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3
b3JrQmxvYlJlZ2lzdHJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9G
aWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCkBAIC0zOSw3ICszOSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0d29ya0Jsb2JSZWdp
c3RyeSYgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkKK05ldHdvcmtCbG9iUmVnaXN0cnkm
IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpCiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6
OmlzTWFpbigpKTsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0Jsb2JSZWdpc3Ry
eT4gcmVnaXN0cnk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9G
aWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oCmluZGV4IGU1ZGI2M2UzOGRjZmJmYmVh
ZGY3MTI2MmM5NmRiYzllYmU2NTJjMTcuLjAwMzBlMGMwZWU1ODI1Mzk2NzdjZWI0ZThiYTlhYTlm
MmM4NTk1YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVB
UEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oCkBAIC00Niw3ICs0Niw3IEBAIGNsYXNz
IE5ldHdvcmtCbG9iUmVnaXN0cnkgewogV1RGX01BS0VfTk9OQ09QWUFCTEUoTmV0d29ya0Jsb2JS
ZWdpc3RyeSk7CiBwdWJsaWM6CiAgICAgTmV0d29ya0Jsb2JSZWdpc3RyeSgpOwotICAgIHN0YXRp
YyBOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgTmV0d29ya0Jsb2JS
ZWdpc3RyeSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHJlZ2lzdGVyRmlsZUJsb2JVUkwoTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBjb25zdCBT
dHJpbmcmIHBhdGgsIFBhc3NSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4sIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpOwogICAgIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgVmVjdG9yPFdlYkNvcmU6OkJsb2JQ
YXJ0PiwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKaW5kZXggNDZkZWFiZWFmYmIzODdlNDZhNWRmMzFkYzBhY2M4OTE2MzVjZGQ0Yi4uOTEy
YzA1NzU3YzZiY2ZmODNiNThkOTcxZjgyYWMzZDJiNjk0NDMzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcApAQCAtMTA2LDggKzEwNiw4IEBAIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiAgICAgICAgIGxvYWRlci0+
YWJvcnQoKTsKICAgICBBU1NFUlQobV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmlzRW1wdHkoKSk7
CiAKLSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5jb25uZWN0aW9uVG9XZWJQcm9j
ZXNzRGlkQ2xvc2UodGhpcyk7Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKHRoaXMpOworICAgIE5ldHdvcmtCbG9iUmVnaXN0
cnk6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NEaWRDbG9zZSh0aGlzKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3ModGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCkBAIC0xMTgsMTQgKzExOCwxNCBAQCB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzY2hlZHVsZVJlc291cmNlTG9hZChjb25z
dCBOZXR3b3JrUmVzb3VyY2VMbwogewogICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGxvYWRQYXJhbWV0ZXJzLCB0
aGlzKTsKICAgICBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuYWRkKGxvYWRQYXJhbWV0ZXJzLmlk
ZW50aWZpZXIsIGxvYWRlcik7Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZUxvYWRlcihsb2FkZXIuZ2V0KCkpOworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVy
KCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6cGVyZm9ybVN5bmNocm9ub3VzTG9hZChjb25zdCBOZXR3b3JrUmVz
b3VyY2VMb2FkUGFyYW1ldGVycyYgbG9hZFBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8TWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpE
ZWxheWVkUmVwbHk+IHJlcGx5KQogewogICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y3JlYXRlKGxvYWRQYXJhbWV0ZXJzLCB0
aGlzLCByZXBseSk7CiAgICAgbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmFkZChsb2FkUGFyYW1l
dGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOwotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgp
KTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcigpLnNjaGVkdWxlTG9hZGVyKGxvYWRlci5nZXQoKSk7CiB9CiAKIHZvaWQgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbW92ZUxvYWRJZGVudGlmaWVyKFJlc291cmNlTG9h
ZElkZW50aWZpZXIgaWRlbnRpZmllcikKQEAgLTE3NiwxOCArMTc2LDE4IEBAIHN0YXRpYyBOZXR3
b3JrU3RvcmFnZVNlc3Npb24mIHN0b3JhZ2VTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzdGFydERvd25sb2FkKFNlc3Npb25J
RCwgdWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQog
ewogICAgIC8vIEZJWE1FOiBEbyBzb21ldGhpbmcgd2l0aCB0aGUgc2Vzc2lvbiBJRC4KLSAgICBO
ZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChk
b3dubG9hZElELCByZXF1ZXN0KTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93
bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0KTsKIH0KIAog
dm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y29udmVydE1haW5SZXNvdXJjZUxv
YWRUb0Rvd25sb2FkKHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCB1aW50NjRf
dCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIGlmICghbWFpblJlc291cmNlTG9hZElkZW50
aWZpZXIpIHsKLSAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdl
cigpLnN0YXJ0RG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCk7CisgICAgICAgIE5ldHdvcmtQ
cm9jZXNzOjpzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKGRvd25s
b2FkSUQsIHJlcXVlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgTmV0d29ya1Jl
c291cmNlTG9hZGVyKiBsb2FkZXIgPSBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuZ2V0KG1haW5S
ZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuZG93
bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVy
LT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChkb3dubG9h
ZElELCBsb2FkZXItPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CiAKICAgICAvLyBVbmJs
b2NrIHRoZSBVUkwgY29ubmVjdGlvbiBvcGVyYXRpb24gcXVldWUuCiAgICAgbG9hZGVyLT5oYW5k
bGUoKS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKQEAgLTIyOSwzMiArMjI5LDMyIEBA
IHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyRmlsZUJsb2JVUkwo
Y29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0CiB7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+
IGV4dGVuc2lvbiA9IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZShleHRlbnNpb25IYW5kbGUpOwog
Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJGaWxlQmxvYlVSTCh0
aGlzLCB1cmwsIHBhdGgsIGV4dGVuc2lvbi5yZWxlYXNlKCksIGNvbnRlbnRUeXBlKTsKKyAgICBO
ZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckZpbGVCbG9iVVJMKHRoaXMs
IHVybCwgcGF0aCwgZXh0ZW5zaW9uLnJlbGVhc2UoKSwgY29udGVudFR5cGUpOwogfQogCiB2b2lk
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJM
JiB1cmwsIFZlY3RvcjxCbG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRU
eXBlKQogewotICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVS
TCh0aGlzLCB1cmwsIFdURjo6bW92ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSk7CisgICAgTmV0
d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVybCwg
V1RGOjptb3ZlKGJsb2JQYXJ0cyksIGNvbnRlbnRUeXBlKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJCbG9iVVJMRnJvbVVSTChjb25zdCBVUkwmIHVy
bCwgY29uc3QgVVJMJiBzcmNVUkwpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVk
KCkucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVybCwgc3JjVVJMKTsKKyAgICBOZXR3b3JrQmxvYlJl
Z2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBzcmNVUkwpOwog
fQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxG
b3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGludDY0X3Qgc3RhcnQs
IGludDY0X3QgZW5kKQogewotICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lz
dGVyQmxvYlVSTEZvclNsaWNlKHRoaXMsIHVybCwgc3JjVVJMLCBzdGFydCwgZW5kKTsKKyAgICBO
ZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JVUkxGb3JTbGljZSh0
aGlzLCB1cmwsIHNyY1VSTCwgc3RhcnQsIGVuZCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAg
IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVy
bCk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkudW5yZWdpc3RlckJsb2JV
UkwodGhpcywgdXJsKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
YmxvYlNpemUoY29uc3QgVVJMJiB1cmwsIHVpbnQ2NF90JiByZXN1bHRTaXplKQogewotICAgIHJl
c3VsdFNpemUgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5ibG9iU2l6ZSh0aGlzLCB1
cmwpOworICAgIHJlc3VsdFNpemUgPSBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5i
bG9iU2l6ZSh0aGlzLCB1cmwpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA5MDlh
ZjBlNjA3NmNhMjVkZWRjYTk0YmQ5YWU4NDU0YjU1Y2U5NDlmLi5hZjVlZjg0MzFlMTllY2VjMWM0
ZWVhMzY1NWQ5NDVlMzIzNGI1MzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0d29ya1Byb2Nlc3MmIE5ldHdv
cmtQcm9jZXNzOjpzaGFyZWQoKQorTmV0d29ya1Byb2Nlc3MmIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrUHJvY2Vzcz4gbmV0
d29ya1Byb2Nlc3M7CiAgICAgcmV0dXJuIG5ldHdvcmtQcm9jZXNzOwpAQCAtMTkxLDcgKzE5MSw3
IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbiogY29ubmVjdGlvbikKICAgICBDaGlsZFByb2Nlc3M6OmluaXRpYWxpemVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwogCiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2VjSXRlbVNo
aW06OnNoYXJlZCgpLmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworICAgIFNlY0l0
ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICNl
bmRpZgogCiAgICAgTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fc3VwcGxlbWVudHMuYmVnaW4oKTsKQEAgLTI4OCwxNCArMjg4LDE0IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnNldENhbkhhbmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wg
dmFsdWUpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmdldE5ldHdvcmtQcm9jZXNzU3RhdGlzdGlj
cyh1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXImIHNjaGVkdWxlciA9IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCk7CisgICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1
bGVyID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKTsKIAogICAgIFN0YXRpc3RpY3NEYXRhIGRhdGE7CiAKICAgICBkYXRhLnN0YXRpc3Rp
Y3NOdW1iZXJzLnNldCgiTG9hZHNQZW5kaW5nQ291bnQiLCBzY2hlZHVsZXIubG9hZHNQZW5kaW5n
Q291bnQoKSk7CiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkxvYWRzQWN0aXZlQ291
bnQiLCBzY2hlZHVsZXIubG9hZHNBY3RpdmVDb3VudCgpKTsKLSAgICBkYXRhLnN0YXRpc3RpY3NO
dW1iZXJzLnNldCgiRG93bmxvYWRzQWN0aXZlQ291bnQiLCBzaGFyZWQoKS5kb3dubG9hZE1hbmFn
ZXIoKS5hY3RpdmVEb3dubG9hZENvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMu
c2V0KCJPdXRzdGFuZGluZ0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NvdW50Iiwgc2hhcmVkKCku
YXV0aGVudGljYXRpb25NYW5hZ2VyKCkub3V0c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZUNvdW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJEb3dubG9hZHNBY3Rp
dmVDb3VudCIsIHNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmFjdGl2ZURvd25sb2FkQ291
bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIk91dHN0YW5kaW5nQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2VzQ291bnQiLCBzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFn
ZXIoKS5vdXRzdGFuZGluZ0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlQ291bnQoKSk7CiAKICAgICBw
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6
RGlkR2V0U3RhdGlzdGljcyhkYXRhLCBjYWxsYmFja0lEKSwgMCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCBkNTdmNzUxYWViNjE4
NGM5ZjFmYTExMGIyOGYzN2YyMTY1MDMxMWY2Li5hZDFlMjkxZDQ2MzYwYTkyYWJiYmU2ZGE3NTdj
NjcwOTFlZDkyNzJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgTmV0d29ya1Byb2Nlc3MgOiBwdWJs
aWMgQ2hpbGRQcm9jZXNzLCBwcml2YXRlIERvd25sb2FkTWFuYWdlcjo6Q2xpZW50IHsKICAgICBm
cmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya1Byb2Nlc3M+OwogICAgIGZyaWVuZCBj
bGFzcyBOZXZlckRlc3Ryb3llZDxEb3dubG9hZE1hbmFnZXI+OwogcHVibGljOgotICAgIHN0YXRp
YyBOZXR3b3JrUHJvY2VzcyYgc2hhcmVkKCk7CisgICAgc3RhdGljIE5ldHdvcmtQcm9jZXNzJiBz
aW5nbGV0b24oKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIFQqIHN1cHBsZW1l
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtS
ZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggZGFjNzVhZjcyMTY1MjU3MTJjZmE1ZTUwM2NhZWYyZjIz
MGQ0ZGVjOS4uY2Y3YTQ3MDg2NTQ1NTU0NTVhZTQ4OWE5MThmOTU5MjNhMThhNjc0OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcihjb25zdCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycwog
ICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS5odHRwQm9keSgpKSB7CiAgICAgICAgIGZvciAoY29u
c3QgRm9ybURhdGFFbGVtZW50JiBlbGVtZW50IDogb3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHko
KS0+ZWxlbWVudHMoKSkgewogICAgICAgICAgICAgaWYgKGVsZW1lbnQubV90eXBlID09IEZvcm1E
YXRhRWxlbWVudDo6VHlwZTo6RW5jb2RlZEJsb2IpCi0gICAgICAgICAgICAgICAgbV9maWxlUmVm
ZXJlbmNlcy5hcHBlbmRWZWN0b3IoTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkuZmlsZXNJ
bkJsb2IoY29ubmVjdGlvbiwgZWxlbWVudC5tX3VybCkpOworICAgICAgICAgICAgICAgIG1fZmls
ZVJlZmVyZW5jZXMuYXBwZW5kVmVjdG9yKE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigp
LmZpbGVzSW5CbG9iKGNvbm5lY3Rpb24sIGVsZW1lbnQubV91cmwpKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIGlmIChvcmlnaW5hbFJlcXVlc3QoKS51cmwoKS5wcm90b2NvbElzKCJibG9iIikp
IHsKICAgICAgICAgQVNTRVJUKCFtX3BhcmFtZXRlcnMucmVzb3VyY2VTYW5kYm94RXh0ZW5zaW9u
KTsKLSAgICAgICAgbV9maWxlUmVmZXJlbmNlcy5hcHBlbmRWZWN0b3IoTmV0d29ya0Jsb2JSZWdp
c3RyeTo6c2hhcmVkKCkuZmlsZXNJbkJsb2IoY29ubmVjdGlvbiwgb3JpZ2luYWxSZXF1ZXN0KCku
dXJsKCkpKTsKKyAgICAgICAgbV9maWxlUmVmZXJlbmNlcy5hcHBlbmRWZWN0b3IoTmV0d29ya0Js
b2JSZWdpc3RyeTo6c2luZ2xldG9uKCkuZmlsZXNJbkJsb2IoY29ubmVjdGlvbiwgb3JpZ2luYWxS
ZXF1ZXN0KCkudXJsKCkpKTsKICAgICB9CiAKICAgICBpZiAoc3luY2hyb25vdXNSZXBseSkKQEAg
LTEzNSwxMyArMTM1LDEzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAg
ICAgbV9jdXJyZW50UmVxdWVzdCA9IG9yaWdpbmFsUmVxdWVzdCgpOwogCiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCi0gICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmlzRW5hYmxlZCgp
IHx8IHNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpIHsKKyAgICBpZiAoIU5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkuaXNFbmFibGVkKCkgfHwgc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkgewog
ICAgICAgICBzdGFydE5ldHdvcmtMb2FkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIodGhpcyk7Ci0gICAgTmV0d29y
a0NhY2hlOjpzaGFyZWQoKS5yZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QoKSwgW2xvYWRlcl0oc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KSB7CisgICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS5yZXRyaWV2ZShvcmlnaW5hbFJlcXVlc3QoKSwgW2xvYWRlcl0oc3Rk
Ojp1bmlxdWVfcHRyPE5ldHdvcmtDYWNoZTo6RW50cnk+IGVudHJ5KSB7CiAgICAgICAgIGlmIChs
b2FkZXItPmhhc09uZVJlZigpKSB7CiAgICAgICAgICAgICAvLyBUaGUgbG9hZGVyIGhhcyBiZWVu
IGFib3J0ZWQgYW5kIGlzIG9ubHkgaGVsZCBhbGl2ZSBieSB0aGlzIGxhbWJkYS4KICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c3RhcnROZXR3b3JrTG9hZCgpCiAgICAgICAgIG1fYnVmZmVyZWREYXRhID0gV2ViQ29yZTo6
U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAg
IGlmIChOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmlzRW5hYmxlZCgpKQorICAgIGlmIChOZXR3b3Jr
Q2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKQogICAgICAgICBtX2J1ZmZlcmVkRGF0YUZv
ckNhY2hlID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKICNlbmRpZgogCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXAoKQogCiAg
ICAgaW52YWxpZGF0ZVNhbmRib3hFeHRlbnNpb25zKCk7CiAKLSAgICBOZXR3b3JrUHJvY2Vzczo6
c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnJlbW92ZUxvYWRlcih0aGlz
KTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya1Jlc291cmNlTG9hZFNj
aGVkdWxlcigpLnJlbW92ZUxvYWRlcih0aGlzKTsKIAogICAgIG1faGFuZGxlID0gbnVsbHB0cjsK
IApAQCAtMjU3LDcgKzI1Nyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zCiAgICAgaWYgKG1f
Y2FjaGVFbnRyeUZvclZhbGlkYXRpb24pIHsKICAgICAgICAgYm9vbCB2YWxpZGF0aW9uU3VjY2Vl
ZGVkID0gbV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsgLy8gMzA0IE5vdCBNb2Rp
ZmllZAogICAgICAgICBpZiAodmFsaWRhdGlvblN1Y2NlZWRlZCkKLSAgICAgICAgICAgIE5ldHdv
cmtDYWNoZTo6c2hhcmVkKCkudXBkYXRlKG9yaWdpbmFsUmVxdWVzdCgpLCAqbV9jYWNoZUVudHJ5
Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7CisgICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNp
bmdsZXRvbigpLnVwZGF0ZShvcmlnaW5hbFJlcXVlc3QoKSwgKm1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24sIG1fcmVzcG9uc2UpOwogICAgICAgICBpZiAoIXZhbGlkYXRpb25TdWNjZWVkZWQgfHwg
aXNDb25kaXRpb25hbFJlcXVlc3Qob3JpZ2luYWxSZXF1ZXN0KCkpKQogICAgICAgICAgICAgbV9j
YWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiA9IG51bGxwdHI7CiAgICAgfQpAQCAtMzE4LDcgKzMxOCw3
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pCiAgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhh
bmRsZSA9PSBtX2hhbmRsZSk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAo
TmV0d29ya0NhY2hlOjpzaGFyZWQoKS5pc0VuYWJsZWQoKSkgeworICAgIGlmIChOZXR3b3JrQ2Fj
aGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpKSB7CiAgICAgICAgIGlmIChtX2NhY2hlRW50cnlG
b3JWYWxpZGF0aW9uKSB7CiAgICAgICAgICAgICAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAg
ICAgICBBU1NFUlQobV9yZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCk7CkBAIC0zMzcs
NyArMzM3LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmco
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmkKIAogICAgICAgICBib29sIGlzUHJp
dmF0ZSA9IHNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCk7CiAgICAgICAgIGlmIChoYXNDYWNoZWFi
bGVSZWRpcmVjdCAmJiAhaXNQcml2YXRlKQotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaGFy
ZWQoKS5zdG9yZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFG
b3JDYWNoZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24o
KS5zdG9yZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgbV9idWZmZXJlZERhdGFGb3JD
YWNoZS5yZWxlYXNlKCkpOwogICAgIH0KICNlbmRpZgogCkBAIC00NzQsNyArNDc0LDcgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShSZXNvdXJjZUhhbmRsZSogaGEKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE5ldHdv
cmtQcm9jZXNzOjpzaGFyZWQoKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0ZXJz
LndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
LmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxl
bmdlKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENhbmNlbEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJikKQEAgLTYzMSw3ICs2MzEsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6Y2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZUFzeW5jKFJlc291cmNl
SAogCiAgICAgLy8gSGFuZGxlIHNlcnZlciB0cnVzdCBldmFsdWF0aW9uIGF0IHBsYXRmb3JtLWxl
dmVsIGlmIHJlcXVlc3RlZCwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAgICAgaWYgKHByb3Rl
Y3Rpb25TcGFjZS5hdXRoZW50aWNhdGlvblNjaGVtZSgpID09IFByb3RlY3Rpb25TcGFjZUF1dGhl
bnRpY2F0aW9uU2NoZW1lU2VydmVyVHJ1c3RFdmFsdWF0aW9uUmVxdWVzdGVkCi0gICAgICAgICYm
ICFOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1
YXRpb24oKSkgeworICAgICAgICAmJiAhTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmNhbkhh
bmRsZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKCkpIHsKICAgICAgICAgY29udGludWVDYW5B
dXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlKGZhbHNlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9O
ZXR3b3JrQ2FjaGUuY3BwCmluZGV4IDI3MjAyMGNjYzllZDU4Y2ZmZmRjYzcxMGMyYTgyYjZmOGIx
ZWJkNjMuLmMxZGFjYzEyZjMxNGI1NzcwNjEzYjI3ZDE0ODRjOGVjOWM2NGVhNzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNw
cApAQCAtNDMsNyArNDMsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0d29ya0NhY2hl
JiBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpCitOZXR3b3JrQ2FjaGUmIE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TmV0d29ya0NhY2hlPiBpbnN0
YW5jZTsKICAgICByZXR1cm4gaW5zdGFuY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4IDU3ZGE1NTI5OWYzNzFlNDU0YTQz
NGJlZjUxMzE4YTlkODJhOTc1ZjAuLjU4M2NhMDE5ODZiY2RmNTE2MTdmOGQ1MjkzZWRhYjViNzJl
YmFiYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5oCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3Mg
TmV0d29ya0NhY2hlIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXR3b3JrQ2FjaGUpOwog
cHVibGljOgotICAgIHN0YXRpYyBOZXR3b3JrQ2FjaGUmIHNoYXJlZCgpOworICAgIHN0YXRpYyBO
ZXR3b3JrQ2FjaGUmIHNpbmdsZXRvbigpOwogCiAgICAgTmV0d29ya0NhY2hlKCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNz
Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJv
Y2Vzc0NvY29hLm1tCmluZGV4IDIzZjFkNzg3ZjIzMTIxYWJhMGYyZDZmOGNmOGUyYzZlZGYzZjBk
ZTEuLjYyN2I4YmQ0ZDhkZDFjNzhiMmI4OWZjMmEzZTMwNTllYzIzMzM1NjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2Eu
bW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nl
c3NDb2NvYS5tbQpAQCAtNjQsNyArNjQsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9y
bUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQwogICAg
IGlmICghbV9kaXNrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKICAgICAgICAgU2FuZGJveEV4
dGVuc2lvbjo6Y29uc3VtZVBlcm1hbmVudGx5KHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5
RXh0ZW5zaW9uSGFuZGxlKTsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICAgICAgaWYg
KHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlICYmIE5ldHdvcmtDYWNoZTo6c2hh
cmVkKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSkpIHsKKyAgICAgICAgaWYgKHBh
cmFtZXRlcnMuc2hvdWxkRW5hYmxlTmV0d29ya0NhY2hlICYmIE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuaW5pdGlhbGl6ZShtX2Rpc2tDYWNoZURpcmVjdG9yeSkpIHsKICAgICAgICAgICAgIFJl
dGFpblB0cjxOU1VSTENhY2hlPiB1cmxDYWNoZShhZG9wdE5TKFtbTlNVUkxDYWNoZSBhbGxvY10g
aW5pdFdpdGhNZW1vcnlDYXBhY2l0eTowIGRpc2tDYXBhY2l0eTowIGRpc2tQYXRoOm5pbF0pKTsK
ICAgICAgICAgICAgIFtOU1VSTENhY2hlIHNldFNoYXJlZFVSTENhY2hlOnVybENhY2hlLmdldCgp
XTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEzNCw4ICsxMzQsOCBAQCB2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogICAg
ICAgICBwYWdlQ2FjaGVDYXBhY2l0eSwgdXJsQ2FjaGVNZW1vcnlDYXBhY2l0eSwgdXJsQ2FjaGVE
aXNrQ2FwYWNpdHkpOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgaWYgKE5ldHdv
cmtDYWNoZTo6c2hhcmVkKCkuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgTmV0d29ya0NhY2hlOjpz
aGFyZWQoKS5zZXRNYXhpbXVtU2l6ZSh1cmxDYWNoZURpc2tDYXBhY2l0eSk7CisgICAgaWYgKE5l
dHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgTmV0d29ya0Nh
Y2hlOjpzaW5nbGV0b24oKS5zZXRNYXhpbXVtU2l6ZSh1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVs
KQogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJEaXNrQ2FjaGUoc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+
IGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCkuY2xlYXIoKTsKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLmNsZWFyKCk7CiAjZW5kaWYKIAogICAgIGlmICghbV9jbGVhckNhY2hlRGlzcGF0Y2hHcm91
cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3Jr
UHJvY2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3Jr
UHJvY2Vzc0lPUy5tbQppbmRleCBiMjk5YTM2YzM1YTE4ODI5ZDA4YTdiYzVhM2I0M2JmNzkwYzFi
N2MxLi4xZDdlMDUyN2NmNDE1NjgxZDYzOTBjNDAxN2EzMDBhNmQyMjg2NzVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0K
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNzSU9T
Lm1tCkBAIC04MiwxNCArODIsMTQgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y2xlYXJDYWNoZUZv
ckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcikKICAgICBpZiAocmVzb3VyY2VDYWNo
ZXNUb0NsZWFyID09IEluTWVtb3J5UmVzb3VyY2VDYWNoZXNPbmx5KQogICAgICAgICByZXR1cm47
CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgTmV0d29ya0NhY2hlOjpzaGFyZWQoKS5j
bGVhcigpOworICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xlYXIoKTsKICNlbmRpZgog
fQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
cyhjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIHsK
ICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hpbTo6c2hhcmVkKCkuaW5p
dGlhbGl6ZSh0aGlzKTsKKyAgICBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSh0
aGlzKTsKICNlbmRpZgogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2Eo
cGFyYW1ldGVycyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KaW5kZXggNzFkMDYzYjFkN2FhMjIxYmE0YmE3OWYw
Yjc0MGExZWQ5MTc3MzI3Mi4uZmFjMTFhNGY5ZTI1YjcyZWZiNzMxODBmMmMxZjNjZDUyM2MwNGM5
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQ
cm9jZXNzTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9OZXR3
b3JrUHJvY2Vzc01hYy5tbQpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6
OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpCiAgICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShwYXJhbWV0ZXJz
KTsKIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQo
KS5pbml0aWFsaXplKHRoaXMpOworICAgIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0aWFs
aXplKHRoaXMpOwogI2VuZGlmCiAKICAgICBpZiAoIXBhcmFtZXRlcnMuaHR0cFByb3h5LmlzTnVs
bCgpIHx8ICFwYXJhbWV0ZXJzLmh0dHBzUHJveHkuaXNOdWxsKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRl
eHQubW0KaW5kZXggYWY1NGI4MWEwMmMwNDUzZGRiOWI3Yzc3YjFmOWRkMTRiM2VlMDNiOC4uYjRk
NDFhNTZjOTAwN2E3MDU0MjljODhmZjgxOGVlOGNhOTg2YmJmYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29u
dGV4dC5tbQpAQCAtNjcsNyArNjcsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBSZW1vdGVOZXR3
b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb25zdAogewogI2lm
IFBMQVRGT1JNKElPUykKICAgICBhdWRpdF90b2tlbl90IGF1ZGl0VG9rZW47Ci0gICAgaWYgKCFO
ZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVk
aXRUb2tlbihhdWRpdFRva2VuKSkKKyAgICBpZiAoIU5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKGF1ZGl0VG9rZW4pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUo
MCwgKGNvbnN0IFVJbnQ4KikmYXVkaXRUb2tlbiwgc2l6ZW9mKGF1ZGl0VG9rZW4pKSk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuY3BwCmluZGV4IDlkYjgxYzFmMWFkOTY5MzI3NWYxZDNhMTRjODk0MTc3NjBhODIx
MDYuLmQ5YThmNjBmMTNmZmE0MTA0MzZiZDk3ZTIxYWUzYTZjMjRhMmFmODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5j
cHAKQEAgLTEwOSw3ICsxMDksNyBAQCBib29sIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6aW5pdGlh
bGl6ZShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUAogICAgIEFTU0VS
VCghbV9pc0luaXRpYWxpemluZyk7CiAgICAgbV9pc0luaXRpYWxpemluZyA9IHRydWU7IC8vIENh
bm5vdCB1c2UgVGVtcG9yYXJ5Q2hhbmdlIGhlcmUsIGJlY2F1c2UgdGhpcyBvYmplY3QgY2FuIGJl
IGRlbGV0ZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zLgogCi0gICAgbV9wbHVnaW4gPSBO
ZXRzY2FwZVBsdWdpbjo6Y3JlYXRlKFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLm5ldHNjYXBlUGx1
Z2luTW9kdWxlKCkpOworICAgIG1fcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmNyZWF0ZShQbHVn
aW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5uZXRzY2FwZVBsdWdpbk1vZHVsZSgpKTsKICAgICBpZiAo
IW1fcGx1Z2luKSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBkZWxldGUgdGhlIHBsdWctaW4gY29u
dHJvbGxlciBwcm94eSBvYmplY3QuCiAgICAgICAgIG1fY29ubmVjdGlvbi0+cmVtb3ZlUGx1Z2lu
Q29udHJvbGxlclByb3h5KHRoaXMsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1
Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvUGx1Z2luUHJvY2Vzcy5jcHAKaW5kZXggNTdhNjZhMDc1YjI3ZDk2MTM0OWRkZWFlZmJiNGM3
MjIyY2FlMzYyZS4uZWNiOWNmOTE3ZDEzOTMwYWFjZDFiMDNkYzM5ZjRlNTU1Mjk0YzVjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwCkBAIC00
OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotUGx1Z2luUHJvY2VzcyYgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkKK1BsdWdpblByb2Nl
c3MmIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFBsdWdpblByb2Nlc3M+IHBsdWdpblByb2Nlc3M7CiAgICAgcmV0dXJuIHBsdWdpblByb2Nl
c3M7CkBAIC03MCw4ICs3MCw4IEBAIFBsdWdpblByb2Nlc3M6On5QbHVnaW5Qcm9jZXNzKCkKIHZv
aWQgUGx1Z2luUHJvY2Vzczo6bG93TWVtb3J5SGFuZGxlcihib29sIGNyaXRpY2FsKQogewogICAg
IFVOVVNFRF9QQVJBTShjcml0aWNhbCk7Ci0gICAgaWYgKHNoYXJlZCgpLnNob3VsZFRlcm1pbmF0
ZSgpKQotICAgICAgICBzaGFyZWQoKS50ZXJtaW5hdGUoKTsKKyAgICBpZiAoc2luZ2xldG9uKCku
c2hvdWxkVGVybWluYXRlKCkpCisgICAgICAgIHNpbmdsZXRvbigpLnRlcm1pbmF0ZSgpOwogfQog
CiB2b2lkIFBsdWdpblByb2Nlc3M6OmluaXRpYWxpemVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vz
c0luaXRpYWxpemF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIv
UGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmgKaW5kZXggMzU2OGQwOWFlZjhmOTExNGMxZjFi
N2ZiMmY2NzI3OTQ3YzE4ZjZmNC4uMDA5ZGQ3NTllM2M5MTRkOGVkNTliNmEwZTkwYWJiMzI1MDNh
Y2ZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9j
ZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmgK
QEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgUGx1Z2luUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nl
c3MsIHByaXZhdGUgV2ViQ29yZTo6QXVkaW9IYXJkd2FyZUxpc3RlbmUKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQbHVnaW5Qcm9jZXNzKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95
ZWQ8UGx1Z2luUHJvY2Vzcz47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdpblByb2Nlc3MmIHNo
YXJlZCgpOworICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNzJiBzaW5nbGV0b24oKTsKIAogICAgIHZv
aWQgcmVtb3ZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb24oV2ViUHJvY2Vzc0Nvbm5lY3Rpb24qKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0
aW9uLmNwcAppbmRleCAzYTc0Yzc4NDI1YTM3YjVlMmZiN2Q3NzMyNzNlMmFmOGYwY2EyYzQ1Li4w
ZmUzNWQwMTBlYmUyM2FiMmM4YjE4ZDAzMTQ5MTI0OTE1YTI1NzUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAt
MTA2LDEyICsxMDYsMTIgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6cmVtb3ZlUGx1Z2lu
Q29udHJvbGxlclByb3h5KFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGwKICAgICBtX2Nvbm5lY3Rp
b24gPSBudWxscHRyOwogCiAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHVzIHRvIGJlIGRlbGV0ZWQu
ICAgIAotICAgIFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVdlYlByb2Nlc3NDb25uZWN0
aW9uKHRoaXMpOworICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZVdlYlByb2Nl
c3NDb25uZWN0aW9uKHRoaXMpOwogfQogCiB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpzZXRH
bG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRpb25TdHJpbmcpCiB7Ci0gICAgSVBD
OjpDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gQ29ubmVjdGlvblN0YWNrOjpzaGFyZWQoKS5jdXJy
ZW50KCk7CisgICAgSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gQ29ubmVjdGlvblN0YWNr
OjpzaW5nbGV0b24oKS5jdXJyZW50KCk7CiAgICAgaWYgKCFjb25uZWN0aW9uKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpz
ZXRHbG9iYWxFeGNlcHRpb24oY29uc3QgU3RyaW5nJiBleGNlcHRpb25TdHJpbmcpCiAKIHZvaWQg
V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKIHsKLSAgICBDb25uZWN0
aW9uU3RhY2s6OkN1cnJlbnRDb25uZWN0aW9uUHVzaGVyIGN1cnJlbnRDb25uZWN0aW9uKENvbm5l
Y3Rpb25TdGFjazo6c2hhcmVkKCksICZjb25uZWN0aW9uKTsKKyAgICBDb25uZWN0aW9uU3RhY2s6
OkN1cnJlbnRDb25uZWN0aW9uUHVzaGVyIGN1cnJlbnRDb25uZWN0aW9uKENvbm5lY3Rpb25TdGFj
azo6c2luZ2xldG9uKCksICZjb25uZWN0aW9uKTsKIAogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICBkaWRSZWNlaXZlV2ViUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwpAQCAtMTQyLDcgKzE0Miw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpNCiAKIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29k
ZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6Ok1lc3NhZ2VFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQogewotICAgIENvbm5lY3Rpb25TdGFjazo6Q3VycmVudENvbm5lY3Rpb25QdXNoZXIg
Y3VycmVudENvbm5lY3Rpb24oQ29ubmVjdGlvblN0YWNrOjpzaGFyZWQoKSwgJmNvbm5lY3Rpb24p
OworICAgIENvbm5lY3Rpb25TdGFjazo6Q3VycmVudENvbm5lY3Rpb25QdXNoZXIgY3VycmVudENv
bm5lY3Rpb24oQ29ubmVjdGlvblN0YWNrOjpzaW5nbGV0b24oKSwgJmNvbm5lY3Rpb24pOwogCiAg
ICAgdWludDY0X3QgZGVzdGluYXRpb25JRCA9IGRlY29kZXIuZGVzdGluYXRpb25JRCgpOwogCkBA
IC0xODMsNyArMTgzLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdp
bih1aW50NjRfdCBwbHVnaW5JbnN0YW5jZUlELCBib29sIGFzeW5jaHIKICAgICByZXBseS0+c2Vu
ZCgpOwogCiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0aW1lcnMgZHVyaW5nIGRl
c3RydWN0aW9uCi0gICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZpdHlBc3NlcnRpb24oUGx1Z2lu
UHJvY2Vzczo6c2hhcmVkKCkuY29ubmVjdGlvbkFjdGl2aXR5KCkpOworICAgIEFjdGl2aXR5QXNz
ZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbm5l
Y3Rpb25BY3Rpdml0eSgpKTsKIAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29u
dHJvbGxlclByb3h5ID0gbV9wbHVnaW5Db250cm9sbGVycy5nZXQocGx1Z2luSW5zdGFuY2VJRCk7
CiAgICAgCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlUGx1Z2luSW50ZXJuYWwoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJzJgogdm9pZCBX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2luKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IHJlcGx5KQogewogICAg
IC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkgdGltZXJzIGR1cmluZyBpbml0aWFsaXphdGlv
bgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6
OnNoYXJlZCgpLmNvbm5lY3Rpb25BY3Rpdml0eSgpKTsKKyAgICBBY3Rpdml0eUFzc2VydGlvbiBh
Y3Rpdml0eUFzc2VydGlvbihQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb25uZWN0aW9uQWN0
aXZpdHkoKSk7CiAKICAgICBQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQ
cm94eSA9IG1fcGx1Z2luQ29udHJvbGxlcnMuZ2V0KGNyZWF0aW9uUGFyYW1ldGVycy5wbHVnaW5J
bnN0YW5jZUlEKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9t
YWMvUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9tYWMvUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tCmluZGV4IGZjNTg3NzY0YTJhNTNh
NGYyNDM2OWVkY2QyOThkMWRhODRjOWY0NDkuLmIwMTU5Mjk0ZTg5ZjA1MWZlMWNjMjY5MjE0NTg4
NDM1MTgyNGE4ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFj
L1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Q
cm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0KQEAgLTUyLDEyICs1MiwxMiBA
QCB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBs
dWdpbkNvbXBsZXhUZXh0SW5wdXRTdGF0ZQogCiBjb25zdCBNYWNoU2VuZFJpZ2h0JiBQbHVnaW5D
b250cm9sbGVyUHJveHk6OmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpCiB7Ci0gICAgcmV0
dXJuIFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgp
OworICAgIHJldHVybiBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRl
clNlcnZlclBvcnQoKTsKIH0KIAogdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6Om9wZW5QbHVn
aW5QcmVmZXJlbmNlUGFuZSgpCiB7Ci0gICAgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJvY2Vzc1Byb3h5OjpP
cGVuUGx1Z2luUHJlZmVyZW5jZVBhbmUoKSwgMCk7CisgICAgUGx1Z2luUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6UGx1Z2luUHJv
Y2Vzc1Byb3h5OjpPcGVuUGx1Z2luUHJlZmVyZW5jZVBhbmUoKSwgMCk7CiB9CiAKIHZvaWQgUGx1
Z2luQ29udHJvbGxlclByb3h5OjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgUGx1Z2luQ3JlYXRp
b25QYXJhbWV0ZXJzJiBjcmVhdGlvblBhcmFtZXRlcnMpCkBAIC0xMzAsNyArMTMwLDcgQEAgdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnVwZGF0ZUxheWVySG9zdGluZ0NvbnRleHQoTGF5ZXJI
b3N0aW5nTW9kZSBsYXllckhvc3QKIAogICAgIHN3aXRjaCAobGF5ZXJIb3N0aW5nTW9kZSkgewog
ICAgICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczoKLSAgICAgICAgICAgIG1f
bGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQo
UGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkpOwor
ICAgICAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6
Y3JlYXRlRm9yUG9ydChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRl
clNlcnZlclBvcnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICNpZiBIQVZFKE9VVF9PRl9QUk9D
RVNTX0xBWUVSX0hPU1RJTkcpCiAgICAgICAgIGNhc2UgTGF5ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQ
cm9jZXNzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1
Z2luUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdp
blByb2Nlc3NNYWMubW0KaW5kZXggZThmNGViMDE4ZWZkMTQwNTJiMDgwYzhlZWQxMzIwZjU5ZDU0
M2IzZS4uMDQyZDQxNzhiOGVmMjVmYzY0MGFkODFkN2Q2MjA2ZWMzOTkwMjViZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1t
CkBAIC0xMTQsNyArMTE0LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBGdWxsc2NyZWVu
V2luZG93VHJhY2tlcjo6d2luZG93U2hvd24oVCB3aW5kb3cpCiAgICAgCiAgICAgLy8gSWYgdGhp
cyBpcyB0aGUgZmlyc3QgZnVsbCBzY3JlZW4gd2luZG93IHRvIGJlIHNob3duLCBub3RpZnkgdGhl
IFVJIHByb2Nlc3MuCiAgICAgaWYgKHdpbmRvd1NldFdhc0VtcHR5KQotICAgICAgICBQbHVnaW5Q
cm9jZXNzOjpzaGFyZWQoKS5zZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKHRydWUpOworICAg
ICAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRGdWxsc2NyZWVuV2luZG93SXNTaG93
aW5nKHRydWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEZ1bGxzY3JlZW5XaW5k
b3dUcmFja2VyOjp3aW5kb3dIaWRkZW4oVCB3aW5kb3cpCkBAIC0xMjgsNyArMTI4LDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBGdWxsc2NyZWVuV2luZG93VHJhY2tlcjo6d2luZG93SGlk
ZGVuKFQgd2luZG93KQogCiAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3QgZnVsbCBzY3JlZW4g
d2luZG93IHRoYXQgd2FzIHZpc2libGUsIG5vdGlmeSB0aGUgVUkgcHJvY2Vzcy4KICAgICBpZiAo
bV93aW5kb3dzLmlzRW1wdHkoKSkKLSAgICAgICAgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkuc2V0
RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhmYWxzZSk7CisgICAgICAgIFBsdWdpblByb2Nlc3M6
OnNpbmdsZXRvbigpLnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoZmFsc2UpOwogfQogCiBz
dGF0aWMgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXImIGZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyKCkK
QEAgLTE5NSw3ICsxOTUsNyBAQCBzdGF0aWMgdm9pZCBjYXJib25XaW5kb3dIaWRkZW4oV2luZG93
UmVmIHdpbmRvdykKIHN0YXRpYyBib29sIG9wZW5DRlVSTFJlZihDRlVSTFJlZiB1cmwsIGludDMy
X3QmIHN0YXR1cywgQ0ZVUkxSZWYqIGxhdW5jaGVkVVJMKQogewogICAgIFN0cmluZyBsYXVuY2hl
ZFVSTFN0cmluZzsKLSAgICBpZiAoIVBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLm9wZW5VUkwoVVJM
KHVybCkuc3RyaW5nKCksIHN0YXR1cywgbGF1bmNoZWRVUkxTdHJpbmcpKQorICAgIGlmICghUGx1
Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkub3BlblVSTChVUkwodXJsKS5zdHJpbmcoKSwgc3RhdHVz
LCBsYXVuY2hlZFVSTFN0cmluZykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICgh
bGF1bmNoZWRVUkxTdHJpbmcuaXNOdWxsKCkgJiYgbGF1bmNoZWRVUkwpCkBAIC0yMDcsNyArMjA3
LDcgQEAgc3RhdGljIGJvb2wgb3BlbkNGVVJMUmVmKENGVVJMUmVmIHVybCwgaW50MzJfdCYgc3Rh
dHVzLCBDRlVSTFJlZiogbGF1bmNoZWRVUkwpCiAKIHN0YXRpYyB2b2lkIHNldE1vZGFsKGJvb2wg
bW9kYWxXaW5kb3dJc1Nob3dpbmcpCiB7Ci0gICAgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkuc2V0
TW9kYWxXaW5kb3dJc1Nob3dpbmcobW9kYWxXaW5kb3dJc1Nob3dpbmcpOworICAgIFBsdWdpblBy
b2Nlc3M6OnNpbmdsZXRvbigpLnNldE1vZGFsV2luZG93SXNTaG93aW5nKG1vZGFsV2luZG93SXNT
aG93aW5nKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIG1vZGFsQ291bnQgPSAwOwpAQCAtMjc1LDcg
KzI3NSw3IEBAIHN0YXRpYyB2b2lkIHJlcGxhY2VkTlNDb25jcmV0ZVRhc2tfbGF1bmNoKE5TVGFz
ayAqc2VsZiwgU0VMIF9jbWQpCiAgICAgZm9yIChOU1N0cmluZyAqYXJndW1lbnQgaW4gc2VsZi5h
cmd1bWVudHMpCiAgICAgICAgIGFyZ3VtZW50cy51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnQpOwog
Ci0gICAgaWYgKFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLmxhdW5jaFByb2Nlc3MobGF1bmNoUGF0
aCwgYXJndW1lbnRzKSkKKyAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubGF1bmNo
UHJvY2VzcyhsYXVuY2hQYXRoLCBhcmd1bWVudHMpKQogICAgICAgICByZXR1cm47CiAKICAgICBO
U0NvbmNyZXRlVGFza19sYXVuY2goc2VsZiwgX2NtZCk7CkBAIC0yOTUsNyArMjk1LDcgQEAgc3Rh
dGljIE5TUnVubmluZ0FwcGxpY2F0aW9uICpyZXBsYWNlZE5TV29ya3NwYWNlX2xhdW5jaEFwcGxp
Y2F0aW9uQXRVUkxfb3B0aW9uc18KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChQbHVnaW5Q
cm9jZXNzOjpzaGFyZWQoKS5sYXVuY2hBcHBsaWNhdGlvbkF0VVJMKFVSTCh1cmwpLnN0cmluZygp
LCBhcmd1bWVudHMpKSB7CisgICAgaWYgKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmxhdW5j
aEFwcGxpY2F0aW9uQXRVUkwoVVJMKHVybCkuc3RyaW5nKCksIGFyZ3VtZW50cykpIHsKICAgICAg
ICAgaWYgKGVycm9yKQogICAgICAgICAgICAgKmVycm9yID0gbmlsOwogICAgICAgICByZXR1cm4g
bmlsOwpAQCAtMzA4LDcgKzMwOCw3IEBAIHN0YXRpYyBCT09MICgqTlNXb3Jrc3BhY2Vfb3BlbkZp
bGUpKE5TV29ya3NwYWNlICosIFNFTCwgTlNTdHJpbmcgKik7CiAKIHN0YXRpYyBCT09MIHJlcGxh
Y2VkTlNXb3Jrc3BhY2Vfb3BlbkZpbGUoTlNXb3Jrc3BhY2UgKnNlbGYsIFNFTCBfY21kLCBOU1N0
cmluZyAqZnVsbFBhdGgpCiB7Ci0gICAgaWYgKFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLm9wZW5G
aWxlKGZ1bGxQYXRoKSkKKyAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkub3BlbkZp
bGUoZnVsbFBhdGgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBOU1dvcmtz
cGFjZV9vcGVuRmlsZShzZWxmLCBfY21kLCBmdWxsUGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9Db25uZWN0aW9uU3RhY2suY3BwCmluZGV4IDU2NWFkZjU5OWJmMzY3MzA2MjE5ZTZlNThlYTg5
ODE5OWQ1MTI2Y2IuLmZiNTM5N2QxMWFkMjQyZjdjMzY1OTIzMjgyOGNiYWYzMWUyNjJlYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suY3BwCkBAIC0zMCw3ICszMCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1Db25uZWN0aW9uU3RhY2smIENvbm5lY3Rpb25T
dGFjazo6c2hhcmVkKCkKK0Nvbm5lY3Rpb25TdGFjayYgQ29ubmVjdGlvblN0YWNrOjpzaW5nbGV0
b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb25uZWN0aW9uU3RhY2s+IGNvbm5l
Y3Rpb25TdGFjazsKICAgICByZXR1cm4gY29ubmVjdGlvblN0YWNrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0Nvbm5lY3Rpb25TdGFjay5oCmluZGV4IGJkNzUzYTBlODViOTMwZjU2MzM2Nzg0NzEyNjhl
ZGJkOGZhMWViY2QuLmM1MzI2Mzg5NDQ4ZTNlYzU2ZDUyNTk2YzVlZDdmMGE5NGQxNWQ3ZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmgKQEAgLTM2LDcgKzM2LDcgQEAg
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIENvbm5lY3Rpb25TdGFjayB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIENvbm5lY3Rpb25TdGFjayYgc2hhcmVkKCk7CisgICAgc3RhdGljIENvbm5lY3Rp
b25TdGFjayYgc2luZ2xldG9uKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24qIGN1cnJlbnQoKQog
ICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0
aWVzL21hYy9MZWdhY3lQcm9jZXNzL0NoaWxkUHJvY2Vzc0VudHJ5UG9pbnQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9MZWdhY3lQcm9jZXNzL0NoaWxk
UHJvY2Vzc0VudHJ5UG9pbnQuaAppbmRleCBkYmYwYTFmMTA2ODI2OTU1ODllYTlmZmFmM2FkNWJi
NTU3MzZhYjU0Li4xZDRjZTNmNjIwMTM3ZDY1ZjFjMWYxZGM5ZTMwMDc2YWY1YTZjNzYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvTGVn
YWN5UHJvY2Vzcy9DaGlsZFByb2Nlc3NFbnRyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL0xlZ2FjeVByb2Nlc3MvQ2hpbGRQcm9jZXNz
RW50cnlQb2ludC5oCkBAIC04Nyw3ICs4Nyw3IEBAIGludCBDaGlsZFByb2Nlc3NNYWluKGludCBh
cmdjLCBjaGFyKiogYXJndikKICAgICAgICAgaWYgKCFkZWxlZ2F0ZS5nZXRFeHRyYUluaXRpYWxp
emF0aW9uRGF0YShwYXJhbWV0ZXJzLmV4dHJhSW5pdGlhbGl6YXRpb25EYXRhKSkKICAgICAgICAg
ICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAKLSAgICAgICAgQ2hpbGRQcm9jZXNzVHlwZTo6c2hh
cmVkKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKKyAgICAgICAgQ2hpbGRQcm9jZXNzVHlwZTo6
c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKICAgICB9CiAKICAgICBkZWxlZ2F0
ZS5zdGFydFJ1bkxvb3AoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRy
eVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmggYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9Y
UENTZXJ2aWNlRW50cnlQb2ludC5oCmluZGV4IDA5OTg2YmQ3NTk4OTU0ZjYxNjMwZDdhOTg1ZjJh
NGNmNjA3NDFiMTMuLmZiYjMyYTM5NTBhYmRjYjc3YWVkY2M4ZDJiOGFjYTc0NmI1MTU5M2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9Y
UENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9p
bnQuaApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIFhQQ1NlcnZpY2VJbml0aWFsaXplcihPU09iamVj
dFB0cjx4cGNfY29ubmVjdGlvbl90PiBjb25uZWN0aW9uLCB4cGNfb2JqZWN0XwogICAgIHZvdWNo
ZXJfcmVwbGFjZV9kZWZhdWx0X3ZvdWNoZXIoKTsKICNlbmRpZgogCi0gICAgWFBDU2VydmljZVR5
cGU6OnNoYXJlZCgpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CisgICAgWFBDU2VydmljZVR5cGU6
OnNpbmdsZXRvbigpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBs
ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCmluZGV4
IDgyNDg4Nzc3OGQ5MWZlMTU2Mjc0NjNiMTNiYzE2OTdlYjdmNDIyMjkuLjJmYTQzZmQyMWIwMThj
MGMyZjEwOGQ0NWJjMzhlZDBkZDJlMzM2OTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9XZWJNZW1vcnlTYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2Vi
TWVtb3J5U2FtcGxlci5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IHN0YXRpYyBjb25zdCBjaGFyIHNlcGFyYXRvciA9ICdcdCc7CiAKLVdlYk1lbW9yeVNhbXBsZXIq
IFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpCitXZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlT
YW1wbGVyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBXZWJNZW1vcnlTYW1wbGVyKiBzaGFy
ZWRNZW1vcnlTYW1wbGVyOwogICAgIGlmICghc2hhcmVkTWVtb3J5U2FtcGxlcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCmluZGV4IGVjMjQ0MTA1YzhmZDU0M2EwMGQw
ZGE5NmVjMmFiNjQ5MTk1NjY5ZTQuLjY2ZjYyYTJlYzhmNGZiM2NjZDI5MWRiNWIyMzlmYzZkNWZi
ZDAzYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaApAQCAtNzEs
NyArNzEsNyBAQCBzdHJ1Y3QgV2ViTWVtb3J5U3RhdGlzdGljcyB7CiBjbGFzcyBXZWJNZW1vcnlT
YW1wbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJNZW1vcnlTYW1wbGVyKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgV2ViTWVtb3J5U2FtcGxlciogc2hhcmVkKCk7CisgICAgc3RhdGlj
IFdlYk1lbW9yeVNhbXBsZXIqIHNpbmdsZXRvbigpOwogICAgIHZvaWQgc3RhcnQoY29uc3QgZG91
YmxlIGludGVydmFsID0gMCk7CiAgICAgdm9pZCBzdGFydChjb25zdCBTYW5kYm94RXh0ZW5zaW9u
OjpIYW5kbGUmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwgPSAwKTsKICAg
ICB2b2lkIHN0b3AoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvQ2hp
bGRQcm9jZXNzSU9TLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9DaGlsZFByb2Nlc3NJ
T1MubW0KaW5kZXggYWVjYzA0MWVlYzJlZGE4ZTM0NzM2NGFjMmVkYzgzZDYzZGQ3Y2RjYi4uZWZj
N2IzYjhmZTAwMmI2YTY0YjFkMmJkMmQ4N2ZjMmE0MWE3N2JhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2lvcy9DaGlsZFByb2Nlc3NJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2lvcy9DaGlsZFByb2Nlc3NJT1MubW0KQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBD
aGlsZFByb2Nlc3M6OnNldEFwcGxpY2F0aW9uSXNEYWVtb24oKQogCiB2b2lkIENoaWxkUHJvY2Vz
czo6cGxhdGZvcm1Jbml0aWFsaXplKCkKIHsKLSAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQm
IGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCA9IEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2hh
cmVkKCk7IAorICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgZmxvYXRpbmdQb2ludEVudmly
b25tZW50ID0gRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5nbGV0b24oKTsgCiAgICAgZmxv
YXRpbmdQb2ludEVudmlyb25tZW50LmVuYWJsZURlbm9ybWFsU3VwcG9ydCgpOyAKICAgICBmbG9h
dGluZ1BvaW50RW52aXJvbm1lbnQuc2F2ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOyAKICAgICBb
W05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIGNoYW5nZUN1cnJlbnREaXJlY3RvcnlQYXRo
OltbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gYnVuZGxlUGF0aF1dOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIu
Y3BwCmluZGV4IDU4ZTczZjkxZjdjYmI0NTFmMjRiNDkxZjVlZDdmOWJmZWRmYTlkMGYuLjExNThh
ZWU2YTkwOTRhNDcyNDQ3Mjg3NGUyMGRmOTg4YTdiYjlmNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tl
ci5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCBTSUdTWVNIYW5kbGVyKGludCBz
aWduYWwsIHNpZ2luZm9fdCogaW5mbywgdm9pZCogZGF0YSkKICAgICBpZiAoIXVjb250ZXh0KQog
ICAgICAgICBDUkFTSCgpOwogCi0gICAgU2VjY29tcEJyb2tlckNsaWVudCogY2xpZW50ID0gJlNl
Y2NvbXBCcm9rZXJDbGllbnQ6OnNoYXJlZCgpOworICAgIFNlY2NvbXBCcm9rZXJDbGllbnQqIGNs
aWVudCA9ICZTZWNjb21wQnJva2VyQ2xpZW50OjpzaW5nbGV0b24oKTsKIAogICAgIGlmIChjbGll
bnQtPmhhbmRsZUlmT3BlbmluZ09ubGluZUNQVUNvdW50KCZ1Y29udGV4dC0+dWNfbWNvbnRleHQp
KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L0Nvb2tpZVN0b3JhZ2VTaGltLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0
b3JhZ2VTaGltLmgKaW5kZXggYTE1MTk1NDk1MzNiODgyYzQxNzk4NGY0NWQxYmI4MmM5MDUyNWM5
Zi4uYWIzNDIyNDYzMzhmZmU5MjdjZGI5YWRhYTNiMWQ4ZTM5MjAxODUxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0uaApAQCAtMzcsNyArMzcsNyBA
QCBjbGFzcyBDb29raWVTdG9yYWdlU2hpbSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29v
a2llU3RvcmFnZVNoaW0pOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDb29raWVT
dG9yYWdlU2hpbT47CiBwdWJsaWM6Ci0gICAgc3RhdGljIENvb2tpZVN0b3JhZ2VTaGltJiBzaGFy
ZWQoKTsKKyAgICBzdGF0aWMgQ29va2llU3RvcmFnZVNoaW0mIHNpbmdsZXRvbigpOwogCiAgICAg
dm9pZCBpbml0aWFsaXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvQ29va2llU3RvcmFnZVNoaW0ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tp
ZVN0b3JhZ2VTaGltLm1tCmluZGV4IDE3YjhjNzJmMWI4YTFkMDM3ZDQ3YWMwNjhjNDRhNjFiZDI4
ZDU4MGIuLjA3MGE4NDE0NDJlN2ZhYTVlOGNlYjg4YzI3NjExMGVlYzg3MjE0OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0KKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5tbQpAQCAtNjEsNyAr
NjEsNyBAQCBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIHdlYktpdENvb2tpZVN0b3JhZ2VDb3B5UmVx
dWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkhUVFBDbwogewogICAgIFN0cmluZyBjb29raWVzOwog
ICAgIFVSTCBmaXJzdFBhcnR5Rm9yQ29va2llc1VSTDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNo
YXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZmlyc3RQYXJ0eUZvckNvb2tp
ZXNVUkwsIGluUmVxdWVzdFVSTCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Q29va2llc0ZvckRPTTo6UmVwbHkoY29va2llcyksIDApKQorICAgIGlmICghV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBmaXJzdFBh
cnR5Rm9yQ29va2llc1VSTCwgaW5SZXF1ZXN0VVJMKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShjb29raWVzKSwgMCkpCiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgaWYgKGNvb2tpZXMuaXNOdWxsKCkpCkBAIC03Myw3ICs3Myw3
IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1ZXN0
SGVhZGVyRmllbGRzRm9yVVJMKENGSFRUUENvCiAgICAgcmV0dXJuIENGRGljdGlvbmFyeUNyZWF0
ZSgwLCBjb29raWVLZXlzLCBjb29raWVWYWx1ZXMsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpOwogfQogCi1Db29raWVT
dG9yYWdlU2hpbSYgQ29va2llU3RvcmFnZVNoaW06OnNoYXJlZCgpCitDb29raWVTdG9yYWdlU2hp
bSYgQ29va2llU3RvcmFnZVNoaW06OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPENvb2tpZVN0b3JhZ2VTaGltPiBzdG9yYWdlOwogICAgIHJldHVybiBzdG9yYWdlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcAppbmRleCA2YzY2MWIxM2E0
NGMwNWEyZTA1MDY0YjBiODQ2YjNmNzM4MTYyYzk0Li40MDI5ZDIzNTg1NTcyYmU5YzEzNzQ0Y2U0
ZmExZWRlMjE5OTUzNWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1Nl
Y0l0ZW1TaGltLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGlt
LmNwcApAQCAtNzIsNyArNzIsNyBAQCBzdGF0aWMgQmxvY2tpbmdSZXNwb25zZU1hcDxTZWNJdGVt
UmVzcG9uc2VEYXRhPiYgcmVzcG9uc2VNYXAoKQogCiBzdGF0aWMgQ2hpbGRQcm9jZXNzKiBzaGFy
ZWRQcm9jZXNzOwogCi1TZWNJdGVtU2hpbSYgU2VjSXRlbVNoaW06OnNoYXJlZCgpCitTZWNJdGVt
U2hpbSYgU2VjSXRlbVNoaW06OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFNlY0l0ZW1TaGlt
KiBzaGltOwogICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0uaCBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9tYWMvU2VjSXRlbVNoaW0uaAppbmRleCA5N2M0Nzg4YjUyNmQ0YWJhMjg4NjFhZDQxMmM1
YjM1Mzg3M2M3NzlkLi5jYjM2NDI1OTg0NGI0ODUyOWM1YjdmMWU0OTc5OTdkMjg3YzA5ZTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmgKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5oCkBAIC0zOCw3ICszOCw3IEBA
IGNsYXNzIFNlY0l0ZW1SZXNwb25zZURhdGE7CiBjbGFzcyBTZWNJdGVtU2hpbSA6IHB1YmxpYyBJ
UEM6OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBXVEZfTUFLRV9OT05D
T1BZQUJMRShTZWNJdGVtU2hpbSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFNlY0l0ZW1TaGltJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgU2VjSXRlbVNoaW0mIHNpbmdsZXRvbigpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplKENoaWxkUHJvY2VzcyopOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
dW5peC9DaGlsZFByb2Nlc3NNYWluLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvdW5peC9DaGls
ZFByb2Nlc3NNYWluLmgKaW5kZXggY2YyY2IwMWZjODExNWZhNTg1NTk2NWM2ZGUwYjRjMmU3MzUx
ZjU5MC4uN2I5MDI5NDIwZDk4ZmI2Y2Y3OTFhZWZmOTMwN2IyYTg1ZDFhYzEzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uaApAQCAtNTcsNyArNTcs
NyBAQCBpbnQgQ2hpbGRQcm9jZXNzTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgaWYg
KCFjaGlsZE1haW4ucGFyc2VDb21tYW5kTGluZShhcmdjLCBhcmd2KSkKICAgICAgICAgcmV0dXJu
IEVYSVRfRkFJTFVSRTsKIAotICAgIENoaWxkUHJvY2Vzc1R5cGU6OnNoYXJlZCgpLmluaXRpYWxp
emUoY2hpbGRNYWluLmluaXRpYWxpemF0aW9uUGFyYW1ldGVycygpKTsKKyAgICBDaGlsZFByb2Nl
c3NUeXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKGNoaWxkTWFpbi5pbml0aWFsaXphdGlvblBh
cmFtZXRlcnMoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAgICAgY2hpbGRNYWluLnBsYXRmb3Jt
RmluYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLVGV4dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4
dENoZWNrZXIuY3BwCmluZGV4IDJkYTk0ZGZjMjAwMzliZjAxODcxM2JhNWFkYWMwNjMzNTdkZDA3
ZjUuLjMyNzlkZDdhOTY3ZjgxNDllNTE2ZjI5YjI4Zjk0ZDI0YjU0ZDVhNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5jcHAKQEAgLTM2LDI1
ICszNiwyNSBAQCB2b2lkIFdLVGV4dENoZWNrZXJTZXRDbGllbnQoY29uc3QgV0tUZXh0Q2hlY2tl
ckNsaWVudEJhc2UqIHdrQ2xpZW50KQogewogICAgIGlmICh3a0NsaWVudCAmJiB3a0NsaWVudC0+
dmVyc2lvbikKICAgICAgICAgcmV0dXJuOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+
c2V0Q2xpZW50KHdrQ2xpZW50KTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPnNl
dENsaWVudCh3a0NsaWVudCk7CiB9CiAKIHZvaWQgV0tUZXh0Q2hlY2tlckNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNo
YW5nZWQoZW5hYmxlZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7CiB9CiAKIHZvaWQg
V0tUZXh0Q2hlY2tlckdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Z3JhbW1hckNoZWNraW5nRW5h
YmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9u
KCktPmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7CiB9CiAKIHZv
aWQgV0tUZXh0Q2hlY2tlckNoZWNrU3BlbGxpbmcoV0tQYWdlUmVmIHBhZ2UsIGJvb2wgc3RhcnRC
ZWZvcmVTZWxlY3Rpb24pCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jaGVja1Nw
ZWxsaW5nKHRvSW1wbChwYWdlKSwgc3RhcnRCZWZvcmVTZWxlY3Rpb24pOworICAgIFdlYlRleHRD
aGVja2VyOjpzaW5nbGV0b24oKS0+Y2hlY2tTcGVsbGluZyh0b0ltcGwocGFnZSksIHN0YXJ0QmVm
b3JlU2VsZWN0aW9uKTsKIH0KIAogdm9pZCBXS1RleHRDaGVja2VyQ2hhbmdlU3BlbGxpbmdUb1dv
cmQoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHdvcmQpCiB7Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3Ry
aW5nKHdvcmQpKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNoYW5nZVNwZWxs
aW5nVG9Xb3JkKHRvSW1wbChwYWdlKSwgdG9XVEZTdHJpbmcod29yZCkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3BwCmluZGV4IDBhOWYxZjViNTAw
OTk2YzBkY2U5YmExMjA2ZmYyMmIxOWQ2MzIwNzUuLjg5ZGRlM2Y4ZDIyMjUyNWE3ZjBjOTE4OTYx
OTk5ZDUxZTkxZDFiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19tYWluLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfbWFpbi5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgRXdrTWFpbjo6RXdrTWFpbigpCiB7CiB9CiAK
LUV3a01haW4mIEV3a01haW46OnNoYXJlZCgpCitFd2tNYWluJiBFd2tNYWluOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBFd2tNYWluIGluc3RhbmNlOwogICAgIHJldHVybiBpbnN0YW5jZTsK
QEAgLTIwOSwxMCArMjA5LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIGludCBld2tf
aW5pdCgpCiB7Ci0gICAgcmV0dXJuIEV3a01haW46OnNoYXJlZCgpLmluaXRpYWxpemUoKTsKKyAg
ICByZXR1cm4gRXdrTWFpbjo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgpOwogfQogCiBpbnQgZXdr
X3NodXRkb3duKCkKIHsKLSAgICByZXR1cm4gRXdrTWFpbjo6c2hhcmVkKCkuZmluYWxpemUoKTsK
KyAgICByZXR1cm4gRXdrTWFpbjo6c2luZ2xldG9uKCkuZmluYWxpemUoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluX3ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluX3ByaXZhdGUuaAppbmRl
eCAzODAyM2M2MTg4NDM4OGFjYjQyMDBkMDBmNDA1NTI1ZDQ0MDE4Njg0Li4xZDRjZTFmYWVmMDQz
ODA5M2Y5YzM2NWJkZGZhNjY2OWUxNTE0NTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbl9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW5fcHJpdmF0ZS5oCkBAIC0zMiw3ICszMiw3IEBAIGVu
dW0gY2xhc3MgRUZMTW9kdWxlSW5pdEZhaWx1cmU7CiAKIGNsYXNzIEV3a01haW4gewogcHVibGlj
OgotICAgIHN0YXRpYyBFd2tNYWluJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgRXdrTWFpbiYgc2lu
Z2xldG9uKCk7CiAgICAgfkV3a01haW4oKTsKICAgICBpbnQgaW5pdGlhbGl6ZSgpOwogICAgIGlu
dCBmaW5hbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCmluZGV4IGNiZjFjMDQ0OGE2MjllNjEzNTRmNjFmNmQ2MTAwN2RmOTcxZWRlY2YuLmJm
OGZhMTgzOTA4ZGNkMGI5YjdkYWU4NTFhNjZlN2YzOWVjNGFhODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTgwLDcgKzgwLDcgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBp
KQogCiBFdmFzX09iamVjdCogRVdLVmlld0NyZWF0ZShXS0NvbnRleHRSZWYgY29udGV4dCwgV0tQ
YWdlR3JvdXBSZWYgcGFnZUdyb3VwLCBFdmFzKiBjYW52YXMsIEV2YXNfU21hcnQqIHNtYXJ0KQog
ewotICAgIGlmICghRXdrTWFpbjo6c2hhcmVkKCkuaXNJbml0aWFsaXplZCgpKSB7CisgICAgaWYg
KCFFd2tNYWluOjpzaW5nbGV0b24oKS5pc0luaXRpYWxpemVkKCkpIHsKICAgICAgICAgRUlOQV9M
T0dfQ1JJVCgiRVdlYktpdCBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuIFlvdSBtdXN0IGNhbGwg
ZXdrX2luaXQoKSBiZWZvcmUgY3JlYXRpbmcgdmlldy4iKTsKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dl
YlByb2Nlc3NQb29sQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbQppbmRleCBhN2Q4NDgxNDYwNGM1M2IwN2ZjY2U1MTUxNTUwNjFj
Y2ZkMzE1ODEyLi45MTY1M2RjZTdkYjliNjFhYWViOGIzOTQxZmQ1ZmVkMzNhNDM3MWRkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViUHJvY2Vzc1Bvb2xD
b2NvYS5tbQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZVBy
b2Nlc3NTdXBwcmVzc2lvblN0YXRlKCkKICAgICBpZiAoIW1fcHJvY2Vzc1N1cHByZXNzaW9uRGlz
YWJsZWRGb3JQYWdlQ291bnRlci52YWx1ZSgpKQogICAgICAgICBtX3BsdWdpblByb2Nlc3NNYW5h
Z2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiA9IG51bGxwdHI7CiAgICAgZWxzZSBp
ZiAoIW1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2Vu
KQotICAgICAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJs
ZWRUb2tlbiA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5wcm9jZXNzU3VwcHJlc3Np
b25EaXNhYmxlZFRva2VuKCk7CisgICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZFRva2VuID0gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRv
bigpLnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4oKTsKICNlbmRpZgogfQogCkBAIC0x
NDAsNyArMTQwLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6cGxhdGZvcm1Jbml0aWFsaXplKCkK
ICAgICByZWdpc3Rlck5vdGlmaWNhdGlvbk9ic2VydmVycygpOwogCiAjaWYgUExBVEZPUk0oSU9T
KQotICAgIFdlYktpdDo6V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaGFyZWQoKTsKKyAgICBX
ZWJLaXQ6OldlYk1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCk7CiAjZW5kaWYKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9X
ZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3Rv
clNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCmluZGV4IDVkZmY1NDYzMDM2YzM3ZGY1NTk3
YzliZTJhZDk5ZDM4OWQyZTU4ZTEuLjY2Mzg3NzQ4NWViZWIxZjQ5NGVlMjZiZjJiZmNmZTY4OWRj
ODk3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKQEAgLTUxLDcgKzUxLDcgQEAg
c3RhdGljIHVuc2lnbmVkIHBhZ2VJZEZyb21SZXF1ZXN0UGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgcmV0dXJuIG51bWJlcjsKIH0KIAotV2ViSW5zcGVjdG9yU2VydmVyJiBXZWJJbnNwZWN0
b3JTZXJ2ZXI6OnNoYXJlZCgpCitXZWJJbnNwZWN0b3JTZXJ2ZXImIFdlYkluc3BlY3RvclNlcnZl
cjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV2ViSW5zcGVjdG9yU2VydmVyJiBzZXJ2ZXIg
PSAqbmV3IFdlYkluc3BlY3RvclNlcnZlcjsKICAgICByZXR1cm4gc2VydmVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JT
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5z
cGVjdG9yU2VydmVyLmgKaW5kZXggMTk2NzViMmI5ZDQ4YjBjZGIzYzE0NmM5ZDlkOWVmOTc3ZDQz
MmNiNC4uMTMyOTliMTZlMTkzZjY3NGMwYzRmZGNjNzc3OGU2Y2Y2NmQ5MDkxYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
Ykluc3BlY3RvclNlcnZlci5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkluc3BlY3RvclBy
b3h5OwogY2xhc3MgV2ViSW5zcGVjdG9yU2VydmVyIDogcHVibGljIFdlYlNvY2tldFNlcnZlciwg
cHVibGljIFdlYlNvY2tldFNlcnZlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPHVuc2lnbmVkLCBXZWJJbnNwZWN0b3JQcm94eSo+IENsaWVudE1hcDsKLSAgICBzdGF0aWMg
V2ViSW5zcGVjdG9yU2VydmVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV2ViSW5zcGVjdG9yU2Vy
dmVyJiBzaW5nbGV0b24oKTsKIAogICAgIC8vIFBhZ2UgcmVnaXN0cnkgdG8gbWFuYWdlIGtub3du
IHBhZ2VzLgogICAgIGludCByZWdpc3RlclBhZ2UoV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwCmluZGV4IDU0YjNiZTJmYzZkMzI1MzE2MWE0YzIxOGU2Mjc5YTQ2NTM0
ZGU0M2QuLmQ1ZjMzZmNjNzFhZDYyNDJhMDBhNWE5ZDNjMmNiMWYwMWM0MTAxZWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z2V0
TGF1bmNoT3B0aW9ucyhQcm9jZXNzTGF1bmNoZXI6OkxhdW5jaE9wdGlvbnMmIGxhdW5jCiB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24pCiB7CiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2VjSXRlbVNo
aW1Qcm94eTo6c2hhcmVkKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAg
U2VjSXRlbVNoaW1Qcm94eTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVj
dGlvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vz
c01hbmFnZXIuY3BwCmluZGV4IGFiOWI5MmRjZTBkMDJlZTBjODE4Zjc5Y2NjY2M2Y2NmZWY4NGQz
ZGEuLmNiNjFkMzYyOGU3MjllZTI1ZTliYWI5NTNjYjQyOWMxMTg2NjYwNDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFu
YWdlci5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBsdWdp
blByb2Nlc3NNYW5hZ2VyJiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkKK1BsdWdpblBy
b2Nlc3NNYW5hZ2VyJiBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkKIHsKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGx1Z2luUHJvY2Vzc01hbmFnZXI+IHBsdWdpblByb2Nlc3NN
YW5hZ2VyOwogICAgIHJldHVybiBwbHVnaW5Qcm9jZXNzTWFuYWdlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oCmlu
ZGV4IGRmMzI1Mjc5NzU5OTRlYWY5ZTNmNjA3MjM2N2JmN2RmOWU3NGFmODcuLmYyOTExYzM2Y2Iy
NzZiMTc0MWY2MjYwNTM5N2Q1ZGQxZDFjZTg0MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaApAQCAtNTUsNyAr
NTUsNyBAQCBjbGFzcyBQbHVnaW5Qcm9jZXNzTWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGx1Z2luUHJvY2Vzc01hbmFnZXIpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ry
b3llZDxQbHVnaW5Qcm9jZXNzTWFuYWdlcj47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdpblBy
b2Nlc3NNYW5hZ2VyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgUGx1Z2luUHJvY2Vzc01hbmFnZXIm
IHNpbmdsZXRvbigpOwogCiAgICAgdWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuKGNvbnN0IFBs
dWdpbk1vZHVsZUluZm8mLCBQbHVnaW5Qcm9jZXNzVHlwZSwgUGx1Z2luUHJvY2Vzc1NhbmRib3hQ
b2xpY3kpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAppbmRleCAwZjNkOTQxMDgxNmZmMTNmOGFlMmFlMGE0MWE0
YTBkOTA5NTQ4NTVlLi4zYTVmMDAxYzkwNjQ5Njc0ZGRhYmY0MTAyZjgyYzcyOWJhNjMxMjEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNz
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblBy
b2Nlc3NQcm94eS5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFBsdWdpblByb2Nlc3NQcm94
eTo6ZGlkRmluaXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciosIElQQzo6Q29ubmVjdGlvbjo6
SQogICAgIG1fbnVtUGVuZGluZ0Nvbm5lY3Rpb25SZXF1ZXN0cyA9IDA7CiAKICNpZiBQTEFURk9S
TShDT0NPQSkKLSAgICBpZiAoIVBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5wcm9jZXNz
U3VwcHJlc3Npb25EaXNhYmxlZCgpKQorICAgIGlmICghUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNp
bmdsZXRvbigpLnByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkKCkpCiAgICAgICAgIHNldFByb2Nl
c3NTdXBwcmVzc2lvbkVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFn
ZXIuY3BwCmluZGV4IDM0OThlZDU4ODYwZjZmZDlhNjIxNmQ2ZDRhNWFhOTE5Y2M2NTQ5YTcuLmUx
ODA2MDMxZTU3NzhiMTIwMTU1OGEwNTM4ODI0MmE5MzYzYTY2NDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFN
YW5hZ2VyLmNwcApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkuZ2V0
U2l0ZXNXaXRoRGF0YShtX3BsdWdpbnMubGFzdCgpLCBtX3dlYlBsdWdpblNpdGVEYXRhTWFuYWdl
ciwgbV9jYWxsYmFja0lEKTsKKyAgICAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRv
bigpLmdldFNpdGVzV2l0aERhdGEobV9wbHVnaW5zLmxhc3QoKSwgbV93ZWJQbHVnaW5TaXRlRGF0
YU1hbmFnZXIsIG1fY2FsbGJhY2tJRCk7CiAgICAgICAgIG1fcGx1Z2lucy5yZW1vdmVMYXN0KCk7
CiAgICAgfQogCkBAIC05NCw3ICs5NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5jbGVh
clNpdGVEYXRhKG1fcGx1Z2lucy5sYXN0KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLCBt
X3NpdGVzLCBtX2ZsYWdzLCBtX21heEFnZUluU2Vjb25kcywgbV9jYWxsYmFja0lEKTsKKyAgICAg
ICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmNsZWFyU2l0ZURhdGEobV9wbHVn
aW5zLmxhc3QoKSwgbV93ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIsIG1fc2l0ZXMsIG1fZmxhZ3Ms
IG1fbWF4QWdlSW5TZWNvbmRzLCBtX2NhbGxiYWNrSUQpOwogICAgICAgICBtX3BsdWdpbnMucmVt
b3ZlTGFzdCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcAppbmRleCAzMTliZDNlMTVjNGE2MDFm
OTcwNGIyMTY3M2RkYzU2ZTg0NjY1ODNlLi43OTIwMzkzOTMxZTdjYWY4ZmMxMmUyNjQwNDMxZWNk
OTUzMzk4ZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9n
dGsvUGx1Z2luSW5mb0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1
Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcApAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGdTY2hlbWFWZXJzaW9uID0gMjsKIAot
UGx1Z2luSW5mb0NhY2hlJiBQbHVnaW5JbmZvQ2FjaGU6OnNoYXJlZCgpCitQbHVnaW5JbmZvQ2Fj
aGUmIFBsdWdpbkluZm9DYWNoZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8UGx1Z2luSW5mb0NhY2hlPiBwbHVnaW5JbmZvQ2FjaGU7CiAgICAgcmV0dXJuIHBsdWdp
bkluZm9DYWNoZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5z
L2d0ay9QbHVnaW5JbmZvQ2FjaGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5z
L2d0ay9QbHVnaW5JbmZvQ2FjaGUuaAppbmRleCBkMzU1YjkwNzYyOWJlNTY4OTNhODRkMWI5YWU4
ODk2ODA2MTEwNjMxLi5jYWIxZTBmOWI2NDE0N2IyZmY3YWY0ZTViMWM3NjZhNTQ3MDNmYjRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5m
b0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdp
bkluZm9DYWNoZS5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIFBsdWdpbkluZm9DYWNoZSB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luSW5mb0NhY2hlKTsKICAgICBmcmllbmQgY2xh
c3MgTmV2ZXJEZXN0cm95ZWQ8UGx1Z2luSW5mb0NhY2hlPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGx1Z2luSW5mb0NhY2hlJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgUGx1Z2luSW5mb0NhY2hlJiBz
aW5nbGV0b24oKTsKIAogICAgIGJvb2wgZ2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdp
blBhdGgsIFBsdWdpbk1vZHVsZUluZm8mKTsKICAgICB2b2lkIHVwZGF0ZVBsdWdpbkluZm8oY29u
c3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9y
ZVVuaXguY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5J
bmZvU3RvcmVVbml4LmNwcAppbmRleCA1ZjU0MDlmZTRhMTFiNThjYWYwZWYwMGZlY2M4YTRjMjEz
OGJkNDZiLi4zYzY2ODcxOWZkM2NiNTdlYmFlODY3ZWJiNWVmMTJkYTE1NjNiNGU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9y
ZVVuaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1
Z2luSW5mb1N0b3JlVW5peC5jcHAKQEAgLTEwMiwxMSArMTAyLDExIEBAIFZlY3RvcjxTdHJpbmc+
IFBsdWdpbkluZm9TdG9yZTo6aW5kaXZpZHVhbFBsdWdpblBhdGhzKCkKIGJvb2wgUGx1Z2luSW5m
b1N0b3JlOjpnZXRQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgUGx1Z2luTW9k
dWxlSW5mbyYgcGx1Z2luKQogewogI2lmIFBMQVRGT1JNKEdUSykKLSAgICBpZiAoUGx1Z2luSW5m
b0NhY2hlOjpzaGFyZWQoKS5nZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpCisgICAg
aWYgKFBsdWdpbkluZm9DYWNoZTo6c2luZ2xldG9uKCkuZ2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRo
LCBwbHVnaW4pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChOZXRzY2FwZVBsdWdp
bk1vZHVsZTo6Z2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pKSB7Ci0gICAgICAgIFBs
dWdpbkluZm9DYWNoZTo6c2hhcmVkKCkudXBkYXRlUGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVn
aW4pOworICAgICAgICBQbHVnaW5JbmZvQ2FjaGU6OnNpbmdsZXRvbigpLnVwZGF0ZVBsdWdpbklu
Zm8ocGx1Z2luUGF0aCwgcGx1Z2luKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJ
bnNwZWN0b3JQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9y
UHJveHkuY3BwCmluZGV4IDczZWIzNTY5YTViZjI5ZWFjYjIwYzQzZDY2ODZjNGZiNjk0Mzg2NzQu
LmJmZDdhZDU1ZDk5ZGFlMGM2Zjk4ZDRhZTQyMjhkOWQ0YTY3M2YyMjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcApAQCAtNTksNyArNTksNyBA
QCBjb25zdCB1bnNpZ25lZCBXZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbFdpbmRvd0hlaWdodCA9
IDY1MDsKIAogY2xhc3MgV2ViSW5zcGVjdG9yUGFnZUdyb3VwcyB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFdlYkluc3BlY3RvclBhZ2VHcm91cHMmIHNoYXJlZCgpCisgICAgc3RhdGljIFdlYkluc3Bl
Y3RvclBhZ2VHcm91cHMmIHNpbmdsZXRvbigpCiAgICAgewogICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8V2ViSW5zcGVjdG9yUGFnZUdyb3Vwcz4gaW5zdGFuY2U7CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKQEAgLTE0NSw3ICsxNDUsNyBAQCBXZWJJbnNwZWN0b3JQcm94eTo6V2ViSW5z
cGVjdG9yUHJveHkoV2ViUGFnZVByb3h5KiBwYWdlKQogICAgICwgbV9yZW1vdGVJbnNwZWN0aW9u
UGFnZUlkKDApCiAjZW5kaWYKIHsKLSAgICBtX2xldmVsID0gV2ViSW5zcGVjdG9yUGFnZUdyb3Vw
czo6c2hhcmVkKCkuaW5zcGVjdG9yTGV2ZWwobV9wYWdlLT5wYWdlR3JvdXAoKSk7CisgICAgbV9s
ZXZlbCA9IFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNpbmdsZXRvbigpLmluc3BlY3RvckxldmVs
KG1fcGFnZS0+cGFnZUdyb3VwKCkpOwogICAgIG1fcGFnZS0+cHJvY2VzcygpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCkBAIC0xNTUsMTQgKzE1NSwxNCBAQCBX
ZWJJbnNwZWN0b3JQcm94eTo6fldlYkluc3BlY3RvclByb3h5KCkKIAogV2ViUGFnZUdyb3VwKiBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9yUGFnZUdyb3VwKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gV2ViSW5zcGVjdG9yUGFnZUdyb3Vwczo6c2hhcmVkKCkuaW5zcGVjdG9yUGFnZUdyb3VwRm9y
TGV2ZWwobV9sZXZlbCk7CisgICAgcmV0dXJuIFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNpbmds
ZXRvbigpLmluc3BlY3RvclBhZ2VHcm91cEZvckxldmVsKG1fbGV2ZWwpOwogfQogCiB2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjppbnZhbGlkYXRlKCkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX1NF
UlZFUikKICAgICBpZiAobV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKQotICAgICAgICBXZWJJbnNw
ZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLnVucmVnaXN0ZXJQYWdlKG1fcmVtb3RlSW5zcGVjdGlvblBh
Z2VJZCk7CisgICAgICAgIFdlYkluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCkudW5yZWdpc3Rl
clBhZ2UobV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKTsKICNlbmRpZgogCiAgICAgbV9wYWdlLT5w
cm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKQEAgLTM1Nyw3ICsz
NTcsNyBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5Ojp0b2dnbGVQYWdlUHJvZmlsaW5nKCkKIAog
Ym9vbCBXZWJJbnNwZWN0b3JQcm94eTo6aXNJbnNwZWN0b3JQYWdlKFdlYlBhZ2VQcm94eSYgcGFn
ZSkKIHsKLSAgICByZXR1cm4gV2ViSW5zcGVjdG9yUGFnZUdyb3Vwczo6c2hhcmVkKCkuaXNJbnNw
ZWN0b3JQYWdlR3JvdXAocGFnZS5wYWdlR3JvdXAoKSk7CisgICAgcmV0dXJuIFdlYkluc3BlY3Rv
clBhZ2VHcm91cHM6OnNpbmdsZXRvbigpLmlzSW5zcGVjdG9yUGFnZUdyb3VwKHBhZ2UucGFnZUdy
b3VwKCkpOwogfQogCiBXZWJQcm9jZXNzUG9vbCYgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3Rv
clByb2Nlc3NQb29sKCkKQEAgLTQzMCw3ICs0MzAsNyBAQCBzdGF0aWMgdm9pZCBkZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiBmcmFtZVJlZiwgV0tG
cgogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6ZW5hYmxlUmVtb3RlSW5zcGVjdGlvbigpCiB7CiAg
ICAgaWYgKCFtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpCi0gICAgICAgIG1fcmVtb3RlSW5zcGVj
dGlvblBhZ2VJZCA9IFdlYkluc3BlY3RvclNlcnZlcjo6c2hhcmVkKCkucmVnaXN0ZXJQYWdlKHRo
aXMpOworICAgICAgICBtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQgPSBXZWJJbnNwZWN0b3JTZXJ2
ZXI6OnNpbmdsZXRvbigpLnJlZ2lzdGVyUGFnZSh0aGlzKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQoKQpAQCAtNjQwLDcgKzY0MCw3IEBAIGJv
b2wgV2ViSW5zcGVjdG9yUHJveHk6OnNob3VsZE9wZW5BdHRhY2hlZCgpCiB2b2lkIFdlYkluc3Bl
Y3RvclByb3h5OjpzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogewogICAgIEFTU0VSVChtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpOwotICAgIFdlYklu
c3BlY3RvclNlcnZlcjo6c2hhcmVkKCkuc2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbihtX3JlbW90
ZUluc3BlY3Rpb25QYWdlSWQsIG1lc3NhZ2UpOworICAgIFdlYkluc3BlY3RvclNlcnZlcjo6c2lu
Z2xldG9uKCkuc2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbihtX3JlbW90ZUluc3BlY3Rpb25QYWdl
SWQsIG1lc3NhZ2UpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHAKaW5kZXggYzAxMGZkZWYxMjEzZGQzYTE0NjZjMmUxYjc2MjE4Njc1Yzc1MTg4
My4uYTM0MTMxOWIyMmI2NGU5OWFkYzM0ZjY5MzUyM2U2MmM4YTE2NDcyZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIFJlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFi
YXNlUXVvdGE6OkRlbGF5ZWRSZXBseT4gcmVwbHk7CiAgICAgfTsKIAotICAgIHN0YXRpYyBFeGNl
ZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgRXhjZWVkZWRE
YXRhYmFzZVF1b3RhUmVjb3JkcyYgc2luZ2xldG9uKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVjb3JkPiBjcmVhdGVSZWNvcmQodWludDY0X3QgZnJhbWVJRCwgU3RyaW5nIG9yaWdpbklkZW50
aWZpZXIsCiAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5hbWUsIFN0cmluZyBkaXNwbGF5TmFtZSwg
dWludDY0X3QgY3VycmVudFF1b3RhLApAQCAtMTk0LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPFJlY29yZD4gbV9jdXJyZW50UmVjb3JkOwogfTsKIAotRXhjZWVkZWRE
YXRhYmFzZVF1b3RhUmVjb3JkcyYgRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3Jkczo6c2hhcmVk
KCkKK0V4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHMmIEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJl
Y29yZHM6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEV4Y2VlZGVk
RGF0YWJhc2VRdW90YVJlY29yZHM+IHJlY29yZHM7CiAgICAgcmV0dXJuIHJlY29yZHM7CkBAIC05
ODQsNyArOTg0LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY29yZE5hdmlnYXRpb25TbmFwc2hv
dChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogICAgICAgICByZXR1cm47CiAKICNpZiBQ
TEFURk9STShDT0NPQSkKLSAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkucmVjb3JkU25h
cHNob3QoKnRoaXMsIGl0ZW0pOworICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5y
ZWNvcmRTbmFwc2hvdCgqdGhpcywgaXRlbSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShpdGVt
KTsKICNlbmRpZgpAQCAtMTc1Myw3ICsxNzUzLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmZpbmRQ
bHVnaW4oY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgdWludDMyX3QgcHJvY2Vzc1R5cGUsIGNvbnMK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHBsdWdpblByb2Nlc3NUb2tlbiA9IFBsdWdp
blByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luLCBzdGF0
aWNfY2FzdDxQbHVnaW5Qcm9jZXNzVHlwZT4ocHJvY2Vzc1R5cGUpLCBwbHVnaW5Qcm9jZXNzU2Fu
ZGJveFBvbGljeSk7CisgICAgcGx1Z2luUHJvY2Vzc1Rva2VuID0gUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NUb2tlbihwbHVnaW4sIHN0YXRpY19jYXN0PFBs
dWdpblByb2Nlc3NUeXBlPihwcm9jZXNzVHlwZSksIHBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5
KTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpAQCAtNDc2MSw3
ICs0NzYxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZVByb3h5KHVpbnQ2NF90IGZyYW1lSUQsIFBhc3MKIAogdm9pZCBXZWJQYWdlUHJveHk6
OmV4Y2VlZGVkRGF0YWJhc2VRdW90YSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG9y
aWdpbklkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcm
IGRpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGEsIHVpbnQ2NF90IGN1cnJlbnRPcmln
aW5Vc2FnZSwgdWludDY0X3QgY3VycmVudERhdGFiYXNlVXNhZ2UsIHVpbnQ2NF90IGV4cGVjdGVk
VXNhZ2UsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFz
ZVF1b3RhOjpEZWxheWVkUmVwbHk+IHJlcGx5KQogewotICAgIEV4Y2VlZGVkRGF0YWJhc2VRdW90
YVJlY29yZHMmIHJlY29yZHMgPSBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpzaGFyZWQo
KTsKKyAgICBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzJiByZWNvcmRzID0gRXhjZWVkZWRE
YXRhYmFzZVF1b3RhUmVjb3Jkczo6c2luZ2xldG9uKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEV4
Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHM6OlJlY29yZD4gbmV3UmVjb3JkID0gcmVjb3Jkcy5j
cmVhdGVSZWNvcmQoZnJhbWVJRCwKICAgICAgICAgb3JpZ2luSWRlbnRpZmllciwgZGF0YWJhc2VO
YW1lLCBkaXNwbGF5TmFtZSwgY3VycmVudFF1b3RhLCBjdXJyZW50T3JpZ2luVXNhZ2UsCiAgICAg
ICAgIGN1cnJlbnREYXRhYmFzZVVzYWdlLCBleHBlY3RlZFVzYWdlLCByZXBseSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCmluZGV4IDM4YzE5
ZTFmZjE4NDk1ZmVhZjEwOWNlZmNjODg0YzAyYzZiMGQ4YTEuLjkwOTdjYjUyYjIwYmI2NjQ5ZmEw
MTdlMzNhMzlkMGRmZTA3NjA4NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYXN0ZWJvYXJkUHJveHkuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCi1XZWJQYXN0ZWJvYXJkUHJveHkmIFdlYlBhc3RlYm9hcmRQcm94eTo6c2hhcmVkKCkK
K1dlYlBhc3RlYm9hcmRQcm94eSYgV2ViUGFzdGVib2FyZFByb3h5OjpzaW5nbGV0b24oKQogewog
ICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKICAgICBzdGF0aWMgTGF6eU5ldmVy
RGVzdHJveWVkPFdlYlBhc3RlYm9hcmRQcm94eT4gcHJveHk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKaW5kZXggMmU0NjczODgwMDMxZDZlZDZjYTkz
YzNlZjZkNjcwMGRiNTg5MTRkNC4uNDk0YWFjOWY4MDk2ODc0Y2MwNTVmYmE4NDM3ZGU1MjY2N2Zh
MjMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
aApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBXZWJQYXN0ZWJvYXJkUHJveHkgOiBwdWJsaWMgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYlBhc3RlYm9h
cmRQcm94eSk7CiAgICAgZnJpZW5kIGNsYXNzIExhenlOZXZlckRlc3Ryb3llZDxXZWJQYXN0ZWJv
YXJkUHJveHk+OwogcHVibGljOgotICAgIHN0YXRpYyBXZWJQYXN0ZWJvYXJkUHJveHkmIHNoYXJl
ZCgpOworICAgIHN0YXRpYyBXZWJQYXN0ZWJvYXJkUHJveHkmIHNpbmdsZXRvbigpOwogCiAgICAg
dm9pZCBhZGRXZWJQcm9jZXNzUHJveHkoV2ViUHJvY2Vzc1Byb3h5Jik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IDg2YTZlMjA1NGMwYWM4MzAy
MGFlMGUwZWI2YzZjYzdlM2U5MzEwNTcuLmUxOTNhZDNmM2ZkMjdiMWZmYWMyZTIwMDgyNGY0OWY4
YTI4MmFlMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cApAQCAtNjc1LDEwICs2NzUsMTAgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6
Y3JlYXRlTmV3V2ViUHJvY2VzcygpCiAgICAgcGFyYW1ldGVycy5tZW1vcnlDYWNoZURpc2FibGVk
ID0gbV9tZW1vcnlDYWNoZURpc2FibGVkOwogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
Ci0gICAgcGFyYW1ldGVycy5oYXNJbWFnZVNlcnZpY2VzID0gU2VydmljZXNDb250cm9sbGVyOjpz
aGFyZWQoKS5oYXNJbWFnZVNlcnZpY2VzKCk7Ci0gICAgcGFyYW1ldGVycy5oYXNTZWxlY3Rpb25T
ZXJ2aWNlcyA9IFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCkuaGFzU2VsZWN0aW9uU2Vydmlj
ZXMoKTsKLSAgICBwYXJhbWV0ZXJzLmhhc1JpY2hDb250ZW50U2VydmljZXMgPSBTZXJ2aWNlc0Nv
bnRyb2xsZXI6OnNoYXJlZCgpLmhhc1JpY2hDb250ZW50U2VydmljZXMoKTsKLSAgICBTZXJ2aWNl
c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CisgICAgcGFy
YW1ldGVycy5oYXNJbWFnZVNlcnZpY2VzID0gU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5oYXNJbWFnZVNlcnZpY2VzKCk7CisgICAgcGFyYW1ldGVycy5oYXNTZWxlY3Rpb25TZXJ2aWNl
cyA9IFNlcnZpY2VzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzU2VsZWN0aW9uU2VydmljZXMo
KTsKKyAgICBwYXJhbWV0ZXJzLmhhc1JpY2hDb250ZW50U2VydmljZXMgPSBTZXJ2aWNlc0NvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmhhc1JpY2hDb250ZW50U2VydmljZXMoKTsKKyAgICBTZXJ2aWNl
c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CiAjZW5k
aWYKIAogICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwpAQCAtNzE1
LDcgKzcxNSw3IEBAIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5ld1dl
YlByb2Nlc3MoKQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgLy8gSW5pdGlh
bGl6ZSByZW1vdGUgaW5zcGVjdG9yIGNvbm5lY3Rpb24gbm93IHRoYXQgd2UgaGF2ZSBhIHN1Yi1w
cm9jZXNzIHRoYXQgaXMgaG9zdGluZyBvbmUgb2Ygb3VyIHdlYiB2aWV3cy4KLSAgICBJbnNwZWN0
b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCk7IAorICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKTsgCiAjZW5kaWYKIAogICAgIHJldHVybiBwcm9jZXNzOwpAQCAt
MTEwNSw3ICsxMTA1LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RhcnRNZW1vcnlTYW1wbGVy
KGNvbnN0IGRvdWJsZSBpbnRlcnZhbCkKICAgICAKICAgICAvLyBGb3IgVUlQcm9jZXNzCiAjaWYg
RU5BQkxFKE1FTU9SWV9TQU1QTEVSKQotICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5z
dGFydChpbnRlcnZhbCk7CisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0YXJ0
KGludGVydmFsKTsKICNlbmRpZgogICAgIAogICAgIC8vIEZvciBXZWJQcm9jZXNzCkBAIC0xMTI0
LDcgKzExMjQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigpCiAg
ICAgCiAgICAgLy8gRm9yIFVJUHJvY2VzcwogI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikKLSAg
ICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RvcCgpOworICAgIFdlYk1lbW9yeVNhbXBs
ZXI6OnNpbmdsZXRvbigpLT5zdG9wKCk7CiAjZW5kaWYKIAogICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGMyNTdhMzg4MmNhNWRi
Y2UyNTZiODljOTg2NGZlNGJlMGVhNTIyYmIuLmRkMDA2NDgwNGU4MDc0ZjIzNjc5NTc1NjRhODY4
MmExMTQxODVmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJv
eHkuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdlYlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1Byb3h5
KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKICAgICAsIG1fbnVtYmVyT2ZUaW1lc1N1ZGRl
blRlcm1pbmF0aW9uV2FzRGlzYWJsZWQoMCkKICAgICAsIG1fdGhyb3R0bGVyKHN0ZDo6bWFrZV91
bmlxdWU8UHJvY2Vzc1Rocm90dGxlcj4odGhpcykpCiB7Ci0gICAgV2ViUGFzdGVib2FyZFByb3h5
OjpzaGFyZWQoKS5hZGRXZWJQcm9jZXNzUHJveHkoKnRoaXMpOworICAgIFdlYlBhc3RlYm9hcmRQ
cm94eTo6c2luZ2xldG9uKCkuYWRkV2ViUHJvY2Vzc1Byb3h5KCp0aGlzKTsKIAogICAgIGNvbm5l
Y3QoKTsKIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Y29ubmVj
dGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKICAgICBBU1NFUlQodGhp
cy0+Y29ubmVjdGlvbigpID09ICZjb25uZWN0aW9uKTsKIAogI2lmIEVOQUJMRShTRUNfSVRFTV9T
SElNKQotICAgIFNlY0l0ZW1TaGltUHJveHk6OnNoYXJlZCgpLmluaXRpYWxpemVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOworICAgIFNlY0l0ZW1TaGltUHJveHk6OnNpbmdsZXRvbigpLmluaXRpYWxp
emVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIHBhZ2Ug
OiBtX3BhZ2VNYXAudmFsdWVzKCkpCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmdldFBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBsdWdp
bnMsIFZlY3QKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIHZvaWQgV2ViUHJvY2Vz
c1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9jZXNz
VG9rZW4sIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7Ci0gICAgUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OnNoYXJlZCgpLmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblByb2Nl
c3NUb2tlbiwgcmVwbHkpOworICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5n
ZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9rZW4sIHJlcGx5KTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENo
ZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcApp
bmRleCBhZjQ1OWEzYjAzZTVmNWI4MWFlY2NjMDRiMDRlOGVjZTdiMjg3NjFhLi44YTg1NDM0ZWE4
MTIxODQ1MDgxOWI3NWEzOGFkNmY4ODViZTZjMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLVdlYlRleHRDaGVja2VyKiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkKK1dlYlRl
eHRDaGVja2VyKiBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV2Vi
VGV4dENoZWNrZXIqIHRleHRDaGVja2VyID0gYWRvcHRSZWYobmV3IFdlYlRleHRDaGVja2VyKS5s
ZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRleHRDaGVja2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViVGV4dENoZWNrZXIuaAppbmRleCAzNTllODFlZTUzNTUzMjM1ZTVhNTJiNDQ4Y2Q5ZjBl
MDE2YzIxN2FlLi43Yzk0NWM3MjYyN2EyZmZiYmZhMDI3YmQxNDBhOWFjMGMyNTQxNGE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaApAQCAtMzcsNyArMzcsNyBA
QCBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGljIEFQ
STo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VGV4dENoZWNrZXI+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgV2ViVGV4dENoZWNrZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJUZXh0
Q2hlY2tlciogc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHNldENsaWVudChjb25zdCBXS1RleHRD
aGVja2VyQ2xpZW50QmFzZSopOwogICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2VmbC9Fd2tEZWJ1Zy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tEZWJ1Zy5o
CmluZGV4IDBmMWU0OWI3NmY2N2JmZTQxYzFkZTA0YzFjYWUzOThmOWMyYjg4MjEuLjNiNGU0YTlh
MTk3ZjliNzk5YjBhMTQ1NWIyOTljZjRlZmVmOTFkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvRXdrRGVidWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL0V3a0RlYnVnLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiZXdrX21h
aW5fcHJpdmF0ZS5oIgogCi0jZGVmaW5lIENSSVRJQ0FMKC4uLikgRUlOQV9MT0dfRE9NX0NSSVQo
RXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIEVS
UiguLi4pIEVJTkFfTE9HX0RPTV9FUlIoRXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQoKSwg
X19WQV9BUkdTX18pCi0jZGVmaW5lIFdBUk4oLi4uKSBFSU5BX0xPR19ET01fV0FSTihFd2tNYWlu
OjpzaGFyZWQoKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5GTyguLi4p
IEVJTkFfTE9HX0RPTV9JTkZPKEV3a01haW46OnNoYXJlZCgpLmxvZ0RvbWFpbklkKCksIF9fVkFf
QVJHU19fKQotI2RlZmluZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKEV3a01haW46OnNoYXJl
ZCgpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBDUklUSUNBTCguLi4pIEVJ
TkFfTE9HX0RPTV9DUklUKEV3a01haW46OnNpbmdsZXRvbigpLmxvZ0RvbWFpbklkKCksIF9fVkFf
QVJHU19fKQorI2RlZmluZSBFUlIoLi4uKSBFSU5BX0xPR19ET01fRVJSKEV3a01haW46OnNpbmds
ZXRvbigpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBXQVJOKC4uLikgRUlO
QV9MT0dfRE9NX1dBUk4oRXdrTWFpbjo6c2luZ2xldG9uKCkubG9nRG9tYWluSWQoKSwgX19WQV9B
UkdTX18pCisjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhFd2tNYWluOjpzaW5n
bGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREJHKC4uLikgRUlO
QV9MT0dfRE9NX0RCRyhFd2tNYWluOjpzaW5nbGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FS
R1NfXykKIAogI2VuZGlmIC8vIEV3a0RlYnVnX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggYjM3ZDA5YTc3ZWEwY2VmYzIwNmVkZTli
NzhiZTQxMGJhNmE4OTk0ZC4uMTdiZDI1M2RmOTcwMzFjNGI5MTQwNGIzM2ViMjU4NmNjYjMxOGYz
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5j
cHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2kKICAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQ7CiAKICAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91dCB0
aGUgc2V0dGluZyBjaGFuZ2UuCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCku
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKICNlbmRpZgpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgVGV4dENoZWNr
ZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKIGludDY0X3QgVGV4
dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewog
I2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisgICAgcmV0dXJuIFdl
YlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRh
ZyhwYWdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVybiAwOwpA
QCAtMTEzLDcgKzExMyw3IEBAIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1l
bnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVsbERv
Y3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdp
dGhUYWcodGFnKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNs
b3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHRh
Zyk7CiAjZW5kaWYKQEAgLTE5NCw3ICsxOTQsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3VtZQog
dm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9uLCBp
bnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmlu
ZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFdlYlRleHRDaGVja2VyOjpz
aW5nbGV0b24oKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRU
YWcsIHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBt
aXNzcGVsbGluZ0xlbmd0aCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50
VGFnKTsKICAgICBVTlVTRURfUEFSQU0odGV4dCk7CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9pZCBU
ZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3QsIGNv
bnN0IFN0cmluZyYsIGNvbnMKIHZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcm
ICwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0g
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVs
bERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xl
dG9uKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1
ZXNzZXMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAgICAg
VU5VU0VEX1BBUkFNKHdvcmQpOwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6
OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5n
JiB3b3JkCiB2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAg
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVu
dFRhZywgd29yZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5s
ZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShzcGVsbERvY3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0od29yZCk7CkBAIC0yNTQsNyAr
MjU0LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVu
dFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChp
bnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKICNpZiBFTkFC
TEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmln
bm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNp
bmdsZXRvbigpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAgICAgVU5VU0VEX1BB
UkFNKHdvcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJD
b250ZXh0RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVm
bC5jcHAKaW5kZXggYjY1NDcyNmMxNTY1MGJhN2NhZTljNzVhYjFmNTlmMGEzOTgzMDQzNC4uZmZm
YjJmZWZjOGM1OWY0OWYwNDBmYTY2OTBlNWFkMmUwYzkyM2MwMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwCkBAIC03MCw3ICs3MCw3IEBAIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVJbnNwZWN0b3JTZXJ2ZXIoKQogICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgcGFyc2UgJXMsIHdyb25nIGZvcm1hdD8gVXNp
bmcgMTI3LjAuMC4xOjI5OTkgaW5zdGVhZC4iLCBzZXJ2ZXJBZGRyZXNzLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFyZWQoKS5saXN0ZW4oYmlu
ZEFkZHJlc3MsIHBvcnQpKQorICAgICAgICBpZiAoIVdlYkluc3BlY3RvclNlcnZlcjo6c2luZ2xl
dG9uKCkubGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KSkKICAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGRuJ3Qgc3RhcnQgbGlzdGVuaW5nIG9uOiBJUCBhZGRyZXNzPSVzLCBwb3J0PSVkLiIsIGJp
bmRBZGRyZXNzLnV0ZjgoKS5kYXRhKCksIHBvcnQpOwogCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKaW5kZXggZGUx
OTRhZDg5ZTI0ZGY0YjEyNjc5OWQxYjYyOWE1OTA1YzlmMjg3YS4uNGZmODI0NDY5ZGUwYTdiNzA2
MTQ4NDFlNDNhZmJjYjRmOTQ2NjJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgVGV4dENoZWNr
ZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKICAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0YXRl
KQogICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIAotICAgIFdlYlRleHRDaGVja2Vy
Q2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOworICAg
IFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9u
KCktPmNsaWVudCgpOwogICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7CiAg
ICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSAgY2xpZW50Lmdy
YW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKIApAQCAtNTQsNyArNTQsNyBAQCBjb25zdCBUZXh0Q2hl
Y2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogICAKIGJvb2wgVGV4dENoZWNrZXI6Omlz
Q29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICByZXR1cm4gV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQo
KTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5jb250
aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0
Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tpCiAg
ICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICB0ZXh0Q2hl
Y2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50
KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5n
RW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKQEAgLTcwLDcgKzcwLDcgQEAg
dm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3JhbW1h
ckNoZWNraW5nRW5hYmxlZCkKICAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAgICAgdGV4
dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisgICAgV2ViVGV4
dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCkBAIC04
NSw1NyArODUsNTcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0
YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiAKIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNw
ZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIHJldHVybiBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7
CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudW5pcXVl
U3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVs
bERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhU
YWcodGFnKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBpbnQzMl90JiBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVsbERv
Y3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24o
KS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRleHQu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGlu
Z0xlbmd0aCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5nKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8V2ViQ29yZTo6
R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9jYXRp
b24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0
ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJM
b2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRv
bigpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0
LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJMb2Nh
dGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxsaW5n
VUlJc1Nob3dpbmcoKQogewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNs
aWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6
OnNpbmdsZXRvbigpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7CiB9CiAKIHZvaWQg
VGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpOwor
ICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdV
SUlzU2hvd2luZygpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0
aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBt
aXNzcGVsbGVkV29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywgbWlz
c3BlbGxlZFdvcmQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCku
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNz
cGVsbGVkV29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgYmFk
R3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRo
R3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFtbWFy
RGV0YWlsKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLnVwZGF0
ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFy
UGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nl
c0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNv
bnN0IFN0cmluZyYgLyogY29udGV4dCAqLywgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7Ci0g
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVs
bERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xl
dG9uKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQsIGd1
ZXNzZXMpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERv
Y3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisgICAg
V2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRf
dCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdv
cmQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuaWdub3JlV29y
ZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6cmVxdWVz
dENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcApp
bmRleCA1Y2E1ZWU4ZjY5ODNmMWM2MWM2OWRhYjE2ZTAxYWY4ZGViZDE5MTBiLi4wZjllMGM3ZmYz
NjAxMmY3YmIxYmMzOGViMjM0ODBhNzYwMTc5ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcApAQCAtNzQsNyArNzQsNyBAQCBz
dGF0aWMgdm9pZCBpbml0SW5zcGVjdG9yU2VydmVyKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNlICVzLCB3cm9uZyBmb3JtYXQ/IFVzZSAxMjcu
MC4wLjE6Mjk5OSBpbnN0ZWFkLiIsIHNlcnZlckFkZHJlc3MudXRmOCgpLmRhdGEoKSk7CiAKLSAg
ICAgICAgaWYgKCFXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLmxpc3RlbihiaW5kQWRkcmVz
cywgcG9ydCkpCisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKS5s
aXN0ZW4oYmluZEFkZHJlc3MsIHBvcnQpKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4n
dCBzdGFydCBsaXN0ZW5pbmcgb246IElQIGFkZHJlc3M9JXMsIHBvcnQ9JWQuIiwgYmluZEFkZHJl
c3MudXRmOCgpLmRhdGEoKSwgcG9ydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxl
cklPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhh
bmRsZXJJT1MuaAppbmRleCA3OTEwZmFhNTk4NzhkNWIyZDg4MDEzYTc1NzIxNjdiNTExMzc5M2Yz
Li43YzM0YzMxNzg0MDVjNjk2NDU3NWEyYzhiZGNlMmE1ZWIwYzE1MmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5k
bGVySU9TLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJN
ZW1vcnlQcmVzc3VyZUhhbmRsZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxX
ZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI+OwogcHVibGljOgotICAgIHN0YXRpYyBXZWJNZW1vcnlQ
cmVzc3VyZUhhbmRsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJNZW1vcnlQcmVzc3VyZUhh
bmRsZXImIHNpbmdsZXRvbigpOwogCiBwcml2YXRlOgogICAgIFdlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1v
cnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
Yk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQppbmRleCBiZGQyMzYzZTBiNjI5NDY0YmE5YWI0
ODk4MDdjZThiYWY2MTVhOTgwLi4xYmI1ZDNhMTU0ZGE1NTkzMGI5M2E0ODZiZTBlODhmYzUxNjli
NmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dl
Yk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAotV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyJiBXZWJNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXI6OnNoYXJlZCgpCitXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXImIFdlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyPiBtZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAgcmV0
dXJuIG1lbW9yeVByZXNzdXJlSGFuZGxlcjsKQEAgLTQ4LDcgKzQ4LDcgQEAgV2ViTWVtb3J5UHJl
c3N1cmVIYW5kbGVyOjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKQogICAgIGRpc3BhdGNoX3Nv
dXJjZV90IHNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNFX1RZ
UEVfTUVNT1JZU1RBVFVTLCAwLCBESVNQQVRDSF9NRU1PUllTVEFUVVNfUFJFU1NVUkVfV0FSTiwg
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CiAgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQoc291
cmNlLCB0aGlzKTsKICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoc291cmNl
LCBeewotICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlzY2FyZFNuYXBzaG90
SW1hZ2VzKCk7CisgICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5kaXNjYXJk
U25hcHNob3RJbWFnZXMoKTsKICAgICB9KTsKICAgICBkaXNwYXRjaF9yZXN1bWUoc291cmNlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCmlu
ZGV4IDFjODhhYTUzNDQyNWZhMWY4ZGE0YTI2ZmQ2MTM5N2Q0OGZjODFjYTUuLmRjMDk2OTkwY2Mx
MmI2OGQ3ZDhlMjQ4YmQ2Mzg4NTU3MmQwY2MxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgUGFn
ZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KCkKIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNW
aXN1YWxseUlkbGUoKQogewotICAgIHJldHVybiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaGFy
ZWQoKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8ICFpc1Zp
ZXdWaXNpYmxlKCk7CisgICAgcmV0dXJuIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmdsZXRv
bigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgfHwgIWlzVmll
d1Zpc2libGUoKTsKIH0KIAogTGF5ZXJIb3N0aW5nTW9kZSBQYWdlQ2xpZW50SW1wbDo6dmlld0xh
eWVySG9zdGluZ01vZGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9TZWNJdGVtU2hpbVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2Vj
SXRlbVNoaW1Qcm94eS5jcHAKaW5kZXggZjNmODQ0Zjk5MzkzMjE5ZDRmNjFiZjczZTAzNWFkY2E0
ZWY1M2Y4Yi4uNDIwMzkxMjE1MDNjMjNmYzVjM2NiNzZiMmQ2MzA3MTEzZDU0NTI0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCkBA
IC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1TZWNJdGVtU2hpbVByb3h5
JiBTZWNJdGVtU2hpbVByb3h5OjpzaGFyZWQoKQorU2VjSXRlbVNoaW1Qcm94eSYgU2VjSXRlbVNo
aW1Qcm94eTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgU2VjSXRlbVNoaW1Qcm94eSogcHJv
eHk7CiAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuaAppbmRleCAzZTQ5NjI0MGQxZGM3NTUx
NjFhNzVlZjE0NTcyZDY2MzBlNjMzZjJmLi5hYmEzZDE2MzJkM2ExMjIwYmEzMDZiMjc2YWNkMGY5
Zjk0NDg1YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0
ZW1TaGltUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1T
aGltUHJveHkuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTZWNJdGVtUmVxdWVzdERhdGE7CiBj
bGFzcyBTZWNJdGVtU2hpbVByb3h5IDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVl
TWVzc2FnZVJlY2VpdmVyIHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlY0l0ZW1TaGltUHJveHkp
OwogcHVibGljOgotICAgIHN0YXRpYyBTZWNJdGVtU2hpbVByb3h5JiBzaGFyZWQoKTsKKyAgICBz
dGF0aWMgU2VjSXRlbVNoaW1Qcm94eSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIGluaXRpYWxp
emVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIuaAppbmRleCA4ZWM3NTVkZGVjY2I3YjQ2
NWExMzI1Nzg0N2E2MGVjMmJjMzc1NWEyLi4zZGY3YWE5NjFlZjQ0NWY0NTg4NmUzM2E5YTAxNjEw
YTI1YmQ3MTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZp
Y2VzQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2Vydmlj
ZXNDb250cm9sbGVyLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgU2VydmljZXNDb250cm9sbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXJ2aWNlc0NvbnRyb2xsZXIpOwogICAgIGZy
aWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxTZXJ2aWNlc0NvbnRyb2xsZXI+OwogcHVibGljOgot
ICAgIHN0YXRpYyBTZXJ2aWNlc0NvbnRyb2xsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBTZXJ2
aWNlc0NvbnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgYm9vbCBoYXNJbWFnZVNlcnZpY2Vz
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbWFnZVNlcnZpY2VzOyB9CiAgICAgYm9vbCBoYXNTZWxl
Y3Rpb25TZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2VsZWN0aW9uU2VydmljZXM7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9s
bGVyLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIu
bW0KaW5kZXggZTgyYzcyZDkxYzkwNDU5N2JlNDZhODgwMWUzYjFiZGJhNDZkZGMxNy4uMmRkMzVj
NTBmZDk2NDhmMTdhNzEwODM1ZWQ4OWNjOWE1YTJmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KQEAgLTM3LDcgKzM3LDcg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVNlcnZpY2VzQ29udHJvbGxlciYgU2VydmljZXND
b250cm9sbGVyOjpzaGFyZWQoKQorU2VydmljZXNDb250cm9sbGVyJiBTZXJ2aWNlc0NvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNlcnZpY2VzQ29u
dHJvbGxlcj4gc2hhcmVkQ29udHJvbGxlcjsKICAgICByZXR1cm4gc2hhcmVkQ29udHJvbGxlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApp
bmRleCA1ODA5M2ZiNGIzNjQ2M2M0MDYwMjAwYmQ0MjNkZjRlMGUyMDU4MjljLi4zZGM5MWYyOTNk
NWFkMzExYWY1ZDE1YWM5MDRhMzEwYzE5MGExZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oCkBAIC0xMTUsNyArMTE1LDcgQEAgcHVi
bGljOgogICAgIFZpZXdTbmFwc2hvdFN0b3JlKCk7CiAgICAgflZpZXdTbmFwc2hvdFN0b3JlKCk7
CiAKLSAgICBzdGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHNoYXJlZCgpOworICAgIHN0YXRpYyBW
aWV3U25hcHNob3RTdG9yZSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHJlY29yZFNuYXBzaG90
KFdlYlBhZ2VQcm94eSYsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KaW5kZXggMWE4YWUw
NzE5ZDI5NjljYjg5NWE3NTdiMzNkNzZjY2E3NzI5ZTY4Yi4uMzVkMWYzNTQ4YjFlOWM2ZTcxNmNl
NTg5YTNiYzM5OTNlMWQ2MzA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCkBAIC01Niw3ICs1Niw3IEBAIFZpZXdTbmFwc2hvdFN0
b3JlOjp+Vmlld1NuYXBzaG90U3RvcmUoKQogICAgIGRpc2NhcmRTbmFwc2hvdEltYWdlcygpOwog
fQogCi1WaWV3U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpCitWaWV3
U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3Rh
dGljIFZpZXdTbmFwc2hvdFN0b3JlJiBzdG9yZSA9ICpuZXcgVmlld1NuYXBzaG90U3RvcmU7CiAg
ICAgcmV0dXJuIHN0b3JlOwpAQCAtMTU2LDcgKzE1Niw3IEBAIFZpZXdTbmFwc2hvdDo6Vmlld1Nu
YXBzaG90KHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5C
eXRlCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBpZiAoaGFzSW1hZ2UoKSkKLSAgICAgICAg
Vmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmRpZEFkZEltYWdlVG9TbmFwc2hvdCgqdGhpcyk7
CisgICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5kaWRBZGRJbWFnZVRvU25h
cHNob3QoKnRoaXMpOwogfQogCiBWaWV3U25hcHNob3Q6On5WaWV3U25hcHNob3QoKQpAQCAtMTc4
LDcgKzE3OCw3IEBAIHZvaWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKICAgICBpZiAoIWhh
c0ltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFy
ZWQoKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOworICAgIFZpZXdTbmFwc2hv
dFN0b3JlOjpzaW5nbGV0b24oKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOwog
CiAjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUwogICAgIG1fc3VyZmFjZSA9IG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
ZW51UHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRN
ZW51UHJveHlNYWMubW0KaW5kZXggZGM2NDk1YTA0ZmI4ZjdiZmUyNDJmNmUyMDM0NjFkODJlZDNh
ZDQxNS4uZGRiYThhMWM2YTU5NTVkZDA5Njk3N2E4NDlkOWZmZDUyMDNiZGYyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94eU1h
Yy5tbQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6c2V0
dXBTZXJ2aWNlc01lbnUoY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYgY29uCiAgICAgLy8g
SWYgdGhlcmUgaXMgbm8gc2VydmljZXMgbWVudSwgdGhlbiB0aGUgZXhpc3Rpbmcgc2VydmljZXMg
b24gdGhlIHN5c3RlbSBoYXZlIGNoYW5nZWQsIHNvIHJlZnJlc2ggdGhhdCBsaXN0IG9mIHNlcnZp
Y2VzLgogICAgIC8vIElmIDxyZGFyOi8vcHJvYmxlbS8xNzk1NDcwOT4gaXMgcmVzb2x2ZWQgdGhl
biB3ZSBjYW4gbW9yZSBhY2N1cmF0ZWx5IGtlZXAgdGhlIGxpc3QgdXAgdG8gZGF0ZSB3aXRob3V0
IHRoaXMgY2FsbC4KICAgICBpZiAoIW1fc2VydmljZXNNZW51KQotICAgICAgICBTZXJ2aWNlc0Nv
bnRyb2xsZXI6OnNoYXJlZCgpLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CisgICAgICAgIFNl
cnZpY2VzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMoKTsK
IH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpjbGVhclNlcnZpY2VzTWVudSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNvbm5l
Y3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVj
dGlvbi5oCmluZGV4IDdmMDI4NjViODdiOWY4MjM3MDc3Mjg4MzNlYzYyMmQzNTk3ZTIyMWIuLjgz
OGEzNGZiNWMyZDQ0ZWVlNTQ2NGU1N2VkYzcwZTEwYWRiZDNiMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5oCkBAIC0z
MCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXaW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2luZG93U2VydmVyQ29ubmVjdGlvbiYgc2hh
cmVkKCk7CisgICAgc3RhdGljIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24mIHNpbmdsZXRvbigpOwog
CiAgICAgYm9vbCBhcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zSGF2ZVN0b3BwZWQ7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uLm1tCmluZGV4IDRhN2VmZTZlNTRkMjY2Nzc2YWNhODIwYWU4NjNmZGY1OTlh
MmM4MzkuLjgxOTUzNWMyYWMxMjljOGQ1MjEyMThjOTc1NWM4NGI2MWQ0NGYyODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNvbm5lY3Rp
b24ubW0KQEAgLTQzLDEyICs0MywxMiBAQCB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OmFw
cGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc1N0b3BwZWQoYm9vbCBzdG9wcGVkKQogCiB2b2lk
IFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc1N0
YXJ0ZWQodWludDMyX3QsIHZvaWQqLCB1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90KQogewotICAg
IFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZp
Y2F0aW9uc1N0b3BwZWQoZmFsc2UpOworICAgIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmds
ZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc1N0b3BwZWQoZmFsc2UpOwogfQog
CiB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0
aW9uc1N0b3BwZWQodWludDMyX3QsIHZvaWQqLCB1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90KQog
ewotICAgIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgpLmFwcGxpY2F0aW9uV2luZG93
TW9kaWZpY2F0aW9uc1N0b3BwZWQodHJ1ZSk7CisgICAgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6
c2luZ2xldG9uKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zU3RvcHBlZCh0cnVlKTsK
IH0KIAogdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjp3aW5kb3dTZXJ2ZXJDb25uZWN0aW9u
U3RhdGVDaGFuZ2VkKCkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0
aW9uOjp3aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCkKIAogI2VuZGlmCiAKLVdp
bmRvd1NlcnZlckNvbm5lY3Rpb24mIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgpCitX
aW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiB3aW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uID0gKm5ldyBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOwogICAgIHJldHVybiB3aW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9E
YXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rp
b24uY3BwCmluZGV4IDQxMTYzZDkxZGY1YjBhNjBmMjU4MjgyODBjNjQzZjA0YzIxMGU2MjYuLmY2
OTBlYjczZThhN2RmNDc2NjczOWI1MmY2MDdiOTdkNjY4ZjYxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgc3RhdGlj
IHVpbnQ2NF90IGdlbmVyYXRlU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoKQogUGFzc1JlZlB0
cjxXZWJJREJTZXJ2ZXJDb25uZWN0aW9uPiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVuaW5n
T3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luKQogewogICAgIFJl
ZlB0cjxXZWJJREJTZXJ2ZXJDb25uZWN0aW9uPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgV2ViSURC
U2VydmVyQ29ubmVjdGlvbihkYXRhYmFzZU5hbWUsIG9wZW5pbmdPcmlnaW4sIG1haW5GcmFtZU9y
aWdpbikpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlRvRGF0YWJhc2VQcm9jZXNzQ29u
bmVjdGlvbigpLT5yZWdpc3RlcldlYklEQlNlcnZlckNvbm5lY3Rpb24oKnJlc3VsdCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKCkt
PnJlZ2lzdGVyV2ViSURCU2VydmVyQ29ubmVjdGlvbigqcmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBXZWJJREJTZXJ2ZXJDb25uZWN0
aW9uOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBj
b25zdAogCiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViSURCU2VydmVyQ29ubmVjdGlvbigp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0
aW9uKCktPnJlbW92ZVdlYklEQlNlcnZlckNvbm5lY3Rpb24oKnRoaXMpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVX
ZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCp0aGlzKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaXQg
OiBtX3NlcnZlclJlcXVlc3RzKQogICAgICAgICBpdC52YWx1ZS0+cmVxdWVzdEFib3J0ZWQoKTsK
QEAgLTcwNSw3ICs3MDUsNyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmN1cnNvckl0
ZXJhdGUoSURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IEN1cnNvckl0ZXJhdAogCiBJUEM6OkNvbm5l
Y3Rpb24qIFdlYklEQlNlcnZlckNvbm5lY3Rpb246Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkK
IHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nlc3ND
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25u
ZWN0aW9uLmNwcAppbmRleCA0ZTkyMzkwNTE2ZDlmOGZhYWZkYTA2Y2IwZDgzYzI2OWIzZWVhZDk5
Li40MmExNTc2MmQwMDQ3M2MzZDdmYThlY2ZjODQ3ODY5YjhhZmVkMjkxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dl
YlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBX
ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGkKIAogdm9pZCBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
Q2xvc2VkKHRoaXMpOwogfQogCiB2b2lkIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VO
YW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9i
UmVnaXN0cnlQcm94eS5jcHAKaW5kZXggNDUzMzVlZDg4NzZhNjEwMjlhMDYzMmE1NGY1MTZhNTRj
YjZiODUzNC4uZGFjZTU3M2YxNmEzNTM4NDYzNWFjYTc1OTkzODcyYmMyMWNmZDFkMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5
UHJveHkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIEJs
b2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYg
dXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gZmlsZSwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05l
dHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2Vz
TmV0d29ya1Byb2Nlc3MoKSk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0ZW5z
aW9uSGFuZGxlOwogCkBAIC00OCw0MyArNDgsNDMgQEAgdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6
cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUGFzc1JlZlB0cjwK
ICAgICBpZiAoIWZpbGUtPnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZShmaWxlLT5wYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlJlYWRPbmx5
LCBleHRlbnNpb25IYW5kbGUpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmwsIGZpbGUtPnBhdGgoKSwgZXh0
ZW5zaW9uSGFuZGxlLCBjb250ZW50VHlwZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyRmlsZUJsb2JVUkwodXJsLCBmaWxl
LT5wYXRoKCksIGV4dGVuc2lvbkhhbmRsZSwgY29udGVudFR5cGUpLCAwKTsKIH0KIAogdm9pZCBC
bG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8
QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBB
U1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFT
U0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJs
b2JVUkwodXJsLCBibG9iUGFydHMsIGNvbnRlbnRUeXBlKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwg
YmxvYlBhcnRzLCBjb250ZW50VHlwZSksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5
OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMKQogewot
ICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7Cisg
ICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsK
IAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lz
dGVyQmxvYlVSTEZyb21VUkwodXJsLCBzcmNVUkwpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGcm9tVVJMKHVy
bCwgc3JjVVJMKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQo
KS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CisgICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5l
dHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlVucmVnaXN0ZXJCbG9iVVJMKHVybCksIDApOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlVucmVnaXN0ZXJC
bG9iVVJMKHVybCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJs
b2JVUkxGb3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcgbG9u
ZyBzdGFydCwgbG9uZyBsb25nIGVuZCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGb3JTbGljZSh1cmwsIHNyY1VS
TCwgc3RhcnQsIGVuZCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKHVybCwgc3JjVVJMLCBzdGFy
dCwgZW5kKSwgMCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlQcm94eTo6
YmxvYlNpemUoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCiAgICAgdWludDY0X3QgcmVzdWx0U2l6ZTsK
LSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpCbG9iU2l6ZSh1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkJsb2JTaXplOjpSZXBseShyZXN1bHRTaXplKSwgMCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6QmxvYlNpemUodXJsKSwgTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZTo6UmVwbHkocmVz
dWx0U2l6ZSksIDApKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVzdWx0U2l6ZTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUu
bW0KaW5kZXggZGIyODI3NzA0NDc4YjI0ZTBhZTc0MGZmNTQ0ZWNiMjc0NjYwYjBkNC4uMzFlZWVk
MjAxMzYzMTFiZTY3YWZmMzExZWI3OGMzNThkMzJjY2RmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1
Z0luRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KQEAgLTQ4LDcgKzQ4LDcgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogKyAoaW5zdGFuY2V0eXBlKWxvb2tVcEZyYW1lRnJv
bUhhbmRsZTooX1dLRnJhbWVIYW5kbGUgKiloYW5kbGUKIHsKLSAgICBXZWJGcmFtZSogd2ViRnJh
bWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShoYW5kbGUuX2ZyYW1lSUQpOworICAg
IFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGhh
bmRsZS5fZnJhbWVJRCk7CiAgICAgaWYgKCF3ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCmluZGV4IDlkODhmZDBiMmY0NzJj
NmI3M2UxMDExYzNhNWExNmJkYWI2NDE4ZWEuLjBhZTkxM2IyY2ExYjMyMzBiODIwN2M4ZDQ5ODFi
NDRlODM1ZDVkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAKQEAgLTE2
Myw3ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCBkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcgogICAgIG1lc3NhZ2Uuc2V0KFN0
cmluZzo6ZnJvbVVURjgoIkZyYW1lIiksIHRvSW1wbChmcmFtZSkpOwogICAgIG1lc3NhZ2Uuc2V0
KFN0cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShpZGVu
dGlmaWVyKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUmVxdWVzdCIpLCB0
b0ltcGwocmVxdWVzdCkpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxl
KCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkSW5pdGlhdGVMb2Fk
Rm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2Up
KS5nZXQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+
cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRJbml0aWF0ZUxvYWRGb3JS
ZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkpLmdl
dCgpKTsKIH0KIAogc3RhdGljIFdLVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RGb3JGcmFt
ZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRp
ZmllciwgV0tVUkxSZXF1ZXN0UmVmIHdrUmVxdWVzdCwgV0tVUkxSZXNwb25zZVJlZiB3a1JlZGly
ZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xODgsNyArMTg4LDcgQEAg
c3RhdGljIFdLVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tCdW5kbGVGcmEKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4
KCJSZXF1ZXN0IiksIG5ld1JlcXVlc3QuZ2V0KCkpOwogICAgIGlmICghcmVkaXJlY3RSZXNvdXJj
ZVJlc3BvbnNlLmlzTnVsbCgpKQogICAgICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4
KCJSZWRpcmVjdFJlc3BvbnNlIiksIHRvSW1wbCh3a1JlZGlyZWN0UmVzcG9uc2UpKTsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6
OmZyb21VVEY4KCJXZWJQYWdlLkRpZFNlbmRSZXF1ZXN0Rm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0
aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9t
VVRGOCgiV2ViUGFnZS5EaWRTZW5kUmVxdWVzdEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFy
eTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHRvQVBJ
KG5ld1JlcXVlc3QucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CkBAIC0xOTksNyArMTk5LDcgQEAg
c3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4
KCJQYWdlIiksIHRvSW1wbChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRG
OCgiSWRlbnRpZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKICAgICBt
ZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJSZXNwb25zZSIpLCB0b0ltcGwocmVzcG9uc2Up
KTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2Fn
ZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNl
IiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdl
KFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2Ui
KSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UoV0tCdW5k
bGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIHVp
bnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCopCkBAIC0yMDgsNyArMjA4LDcgQEAgc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tCdW5kbGVGcmEKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJQYWdlIiks
IHRvSW1wbChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiSWRlbnRp
ZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKICAgICBtZXNzYWdlLnNl
dChTdHJpbmc6OmZyb21VVEY4KCJDb250ZW50TGVuZ3RoIiksIEFQSTo6VUludDY0OjpjcmVhdGUo
bGVuZ3RoKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9z
dE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRSZWNlaXZlQ29udGVudExlbmd0
aEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdl
KSkuZ2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCkt
PnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkUmVjZWl2ZUNvbnRlbnRM
ZW5ndGhGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVz
c2FnZSkpLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvclJlc291cmNl
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlm
aWVyLCBjb25zdCB2b2lkKikKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCBkaWRGaW5p
c2hMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYs
IHVpbgogICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlOwogICAgIG1lc3NhZ2Uu
c2V0KFN0cmluZzo6ZnJvbVVURjgoIlBhZ2UiKSwgdG9JbXBsKHBhZ2UpKTsKICAgICBtZXNzYWdl
LnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlmaWVyIiksIEFQSTo6VUludDY0OjpjcmVhdGUo
aWRlbnRpZmllcikpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCkt
PnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkRmluaXNoTG9hZEZvclJl
c291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPnBvc3RN
ZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkRmluaXNoTG9hZEZvclJlc291cmNl
IiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOwog
fQogCiBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS0Vycm9yUmVmIGVy
cm9yLCBjb25zdCB2b2lkKikKQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMgdm9pZCBkaWRGYWls
TG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1
aW50NgogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIlBhZ2UiKSwgdG9JbXBsKHBh
Z2UpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlmaWVyIiksIEFQ
STo6VUludDY0OjpjcmVhdGUoaWRlbnRpZmllcikpOwogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6
ZnJvbVVURjgoIkVycm9yIiksIHRvSW1wbChlcnJvcikpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBh
Z2UuRGlkRmFpbExvYWRGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6
Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmpl
Y3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZEZh
aWxMb2FkRm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1l
c3NhZ2UpKS5nZXQoKSk7CiB9CiAKIGNsYXNzIFBhZ2VDb250ZXh0TWVudUNsaWVudCBmaW5hbCA6
IHB1YmxpYyBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQgewpAQCAt
NDc4LDcgKzQ3OCw3IEBAIHZvaWQgd2Via2l0V2ViUGFnZURpZFJlY2VpdmVNZXNzYWdlKFdlYktp
dFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hCiAgICAgICAgIG1lc3NhZ2VS
ZXBseS5zZXQoIlBhZ2UiLCB3ZWJQYWdlKTsKICAgICAgICAgbWVzc2FnZVJlcGx5LnNldCgiQ2Fs
bGJhY2tJRCIsIEFQSTo6VUludDY0OjpjcmVhdGUoY2FsbGJhY2tJRCkpOwogICAgICAgICBtZXNz
YWdlUmVwbHkuc2V0KCJTbmFwc2hvdCIsIHNuYXBzaG90SW1hZ2UpOwotICAgICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZSgiV2ViUGFnZS5EaWRH
ZXRTbmFwc2hvdCIsIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlUmVw
bHkpKS5nZXQoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVu
ZGxlKCktPnBvc3RNZXNzYWdlKCJXZWJQYWdlLkRpZEdldFNuYXBzaG90IiwgQVBJOjpEaWN0aW9u
YXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2VSZXBseSkpLmdldCgpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0lu
QnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlci5tbQppbmRleCAyZmI4Zjk1MzllY2M4MzExNGQyNmE2NmE2YWM0Mzc3NzY2Y2JmODg3
Li5iMGEyNzQ1NDIzNDY5MzM0Mjc1NmUyZDRiZjdjMzFmM2UzNjc2MjlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9j
ZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5Ccm93
c2VyQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTQwMiw3ICs0MDIsNyBAQCBzdGF0aWMgdm9pZCBz
ZXRVcFJlc291cmNlTG9hZENsaWVudChXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENv
bnRyb2xsZXIgKgogCiArIChpbnN0YW5jZXR5cGUpbG9va1VwQnJvd3NpbmdDb250ZXh0RnJvbUhh
bmRsZTooV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgKiloYW5kbGUKIHsKLSAgICBXZWJQYWdlKiB3
ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShoYW5kbGUucGFnZUlEKTsKKyAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShoYW5k
bGUucGFnZUlEKTsKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKQEAg
LTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRVcFJlc291cmNlTG9hZENsaWVudChXS1dl
YlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKgogewogICAgIGlmICghX3Jl
bW90ZU9iamVjdFJlZ2lzdHJ5KSB7CiAgICAgICAgIF9yZW1vdGVPYmplY3RSZWdpc3RyeSA9IGFk
b3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoTWVzc2FnZVNl
bmRlcjoqX3BhZ2VdKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBfcGFnZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0
UmVnaXN0cnldKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBfcGFnZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2JqZWN0
UmVnaXN0cnldKTsKICAgICB9CiAKICAgICByZXR1cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5Lmdl
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBmZjBhZmQ5ZGUzYjk1ZTg1ODJmZThlMmQ3
NjViZWY2YmI4OGM1MzdiLi5iNGU2ZmU0ZDNiM2E3ZWUwY2MyNjBlZTQ5NmExMzZhMDVhNGM5YmI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMTE2LDMyICsxMTYsMzIgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0J1bmRsZUNsaWVudEJhc2UqIGNs
aWVudCkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3NQb29sOjpIYW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCAwKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlTWVzc2FnZShtZXNzYWdlTmFtZSwg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyhtZXNzYWdlQm9keSkpKSwgMCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1l
c3NhZ2VCb2R5LCBSZWZQdHI8QVBJOjpPYmplY3Q+JiByZXR1cm5EYXRhKQogewogICAgIFVzZXJE
YXRhIHJldHVyblVzZXJEYXRhOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkpKSwgTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5KHJl
dHVyblVzZXJEYXRhKSwgMCkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6
OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyhtZXNzYWdlQm9keSkpKSwg
TWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2U6OlJlcGx5
KHJldHVyblVzZXJEYXRhKSwgMCkpCiAgICAgICAgIHJldHVybkRhdGEgPSBudWxscHRyOwogICAg
IGVsc2UKLSAgICAgICAgcmV0dXJuRGF0YSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9y
bUhhbmRsZXNUb09iamVjdHMocmV0dXJuVXNlckRhdGEub2JqZWN0KCkpOworICAgICAgICByZXR1
cm5EYXRhID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0
cyhyZXR1cm5Vc2VyRGF0YS5vYmplY3QoKSk7CiB9CiAKIFdlYkNvbm5lY3Rpb24qIEluamVjdGVk
QnVuZGxlOjp3ZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MoKTsKKyAgICByZXR1
cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzKCk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2Nl
cHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5h
Z2VyPigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGFjY2VwdCA/IEhUVFBDb29raWVBY2Nl
cHRQb2xpY3lBbHdheXMgOiBIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1l
bnREb21haW4pOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViQ29v
a2llTWFuYWdlcj4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShhY2NlcHQgPyBIVFRQQ29v
a2llQWNjZXB0UG9saWN5QWx3YXlzIDogSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFp
bkRvY3VtZW50RG9tYWluKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2Rl
bCh1aW50MzJfdCBjYWNoZU1vZGVsKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNldENh
Y2hlTW9kZWwoY2FjaGVNb2RlbCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0Q2Fj
aGVNb2RlbChjYWNoZU1vZGVsKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3ZlcnJpZGVC
b29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwg
Y29uc3QgU3RyaW5nJiBwcmVmZXJlbmNlLCBib29sIGVuYWJsZWQpCkBAIC0zNDIsMTkgKzM0Miwx
OSBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5h
YmxlZChXZWJQYWdlR3JvdXBQcm94eSogcGFnZQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpjbGVh
ckFsbERhdGFiYXNlcygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxX
ZWJEYXRhYmFzZU1hbmFnZXI+KCktPmRlbGV0ZUFsbERhdGFiYXNlcygpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViRGF0YWJhc2VNYW5hZ2VyPigpLT5kZWxldGVB
bGxEYXRhYmFzZXMoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0RGF0YWJhc2VRdW90
YSh1aW50NjRfdCBxdW90YSkKIHsKICAgICAvLyBIaXN0b3JpY2FsbHksIHdlJ3ZlIHVzZWQgdGhl
IGZvbGxvd2luZyAoc29tZXdoYXQgbm9uLXNlbnNpY2FsKSBzdHJpbmcKICAgICAvLyBmb3IgdGhl
IGRhdGFiYXNlSWRlbnRpZmllciBvZiBsb2NhbCBmaWxlcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5zdXBwbGVtZW50PFdlYkRhdGFiYXNlTWFuYWdlcj4oKS0+c2V0UXVvdGFGb3JPcmlnaW4o
ImZpbGVfXzAiLCBxdW90YSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxXZWJEYXRhYmFzZU1hbmFnZXI+KCktPnNldFF1b3RhRm9yT3JpZ2luKCJmaWxlX18wIiwgcXVv
dGEpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKQog
ewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViQXBwbGljYXRpb25DYWNo
ZU1hbmFnZXI+KCktPmRlbGV0ZUFsbEVudHJpZXMoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zdXBwbGVtZW50PFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5kZWxldGVBbGxF
bnRyaWVzKCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZykKQEAgLTM2NSw3ICszNjUsNyBA
QCB2b2lkIEluamVjdGVkQnVuZGxlOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29u
c3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFwcENh
Y2hlTWF4aW11bVNpemUodWludDY0X3Qgc2l6ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5zdXBwbGVtZW50PFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5zZXRBcHBDYWNoZU1h
eGltdW1TaXplKHNpemUpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8
V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI+KCktPnNldEFwcENhY2hlTWF4aW11bVNpemUoc2l6
ZSk7CiB9CiAKIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlOjphcHBDYWNoZVVzYWdlRm9yT3JpZ2lu
KGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQpAQCAtNTg2LDcgKzU4Niw3IEBAIHVpbnQ2NF90
IEluamVjdGVkQnVuZGxlOjp3ZWJOb3RpZmljYXRpb25JRChKU0NvbnRleHRSZWYganNDb250ZXh0
LCBKU1ZhbHVlUmVmIGpzCiAgICAgV2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24g
PSBKU05vdGlmaWNhdGlvbjo6dG9XcmFwcGVkKHRvSlModG9KUyhqc0NvbnRleHQpLCBqc05vdGlm
aWNhdGlvbikpOwogICAgIGlmICghbm90aWZpY2F0aW9uKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyPigpLT5ub3RpZmljYXRpb25JREZvclRlc3Rpbmcobm90aWZpY2F0aW9uKTsKKyAgICBy
ZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyPigpLT5ub3RpZmljYXRpb25JREZvclRlc3Rpbmcobm90aWZpY2F0aW9uKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGpzQ29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGpzTm90aWZp
Y2F0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggYTk0Yzc5YzMzNzdmNjBk
ZWI4ODIyZTQ3NmRhNWI1OWRiMmM5MWRhNC4uODM3MGNjNGU3NjI5YWE0NmZiMDIxYWY5ZjAzNzQ1
NzBkNjk1ZGNmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTU2LDcgKzU2LDcg
QEAgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjp+TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkK
IHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7CiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJSZXNv
dXJjZUxvYWRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIGlmIChXZWJSZXNv
dXJjZUxvYWRlciogd2ViUmVzb3VyY2VMb2FkZXIgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS53ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIoZGVj
b2Rlci5kZXN0aW5hdGlvbklEKCkpKQorICAgICAgICBpZiAoV2ViUmVzb3VyY2VMb2FkZXIqIHdl
YlJlc291cmNlTG9hZGVyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCkud2ViUmVzb3VyY2VMb2FkZXJGb3JJZGVudGlmaWVyKGRlY29kZXIuZGVzdGlu
YXRpb25JRCgpKSkKICAgICAgICAgICAgIHdlYlJlc291cmNlTG9hZGVyLT5kaWRSZWNlaXZlV2Vi
UmVzb3VyY2VMb2FkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuOwpAQCAtNzMsNyArNzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzcwog
dm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYp
CiB7CiAgICAgLy8gVGhlIE5ldHdvcmtQcm9jZXNzIHByb2JhYmx5IGNyYXNoZWQuCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkNsb3Nl
ZCh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDQzNDc5
MGE4YzJlNjVhZjczN2MzNDBkNjRhNGM3MWI0ZWM5ZjViYWMuLjgwMjQ1ZmI2YmZlMGZhZWZmYjU4
ZjNmOTczNjFmN2EyOWY5ZTUxODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0x
ODAsNyArMTgwLDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9h
ZChSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIsIENhY2gKIAogICAgIEFTU0VSVCgobG9h
ZFBhcmFtZXRlcnMud2ViUGFnZUlEICYmIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQpIHx8IGxv
YWRQYXJhbWV0ZXJzLmNsaWVudENyZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JB
bnlDcmVkZW50aWFscyk7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlNjaGVkdWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgMCkp
IHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlNjaGVkdWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgMCkpIHsKICAgICAgICAg
Ly8gV2UgcHJvYmFibHkgZmFpbGVkIHRvIHNjaGVkdWxlIHRoaXMgbG9hZCB3aXRoIHRoZSBOZXR3
b3JrUHJvY2VzcyBiZWNhdXNlIGl0IGhhZCBjcmFzaGVkLgogICAgICAgICAvLyBUaGlzIGxvYWQg
d2lsbCBuZXZlciBzdWNjZWVkIHNvIHdlIHdpbGwgc2NoZWR1bGUgaXQgdG8gZmFpbCBhc3luY2hy
b25vdXNseS4KICAgICAgICAgc2NoZWR1bGVJbnRlcm5hbGx5RmFpbGVkTG9hZChyZXNvdXJjZUxv
YWRlcik7CkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6
OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiAgICAgaWYgKCFsb2FkZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlJlbW92ZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLCAwKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVMb2Fk
SWRlbnRpZmllcihpZGVudGlmaWVyKSwgMCk7CiAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQg
dGhpcyBXZWJSZXNvdXJjZUxvYWRlciBtaWdodCBiZSBqdXN0IGFib3V0IHRvIG1lc3NhZ2UgYmFj
ayB0byB0aGUgTmV0d29ya1Byb2Nlc3MgKGUuZy4gQ29udGludWVXaWxsU2VuZFJlcXVlc3QpCiAg
ICAgLy8gYnV0IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gZG9pbmcgc28gYW55bW9yZS4KQEAgLTIzNiw3
ICsyMzYsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291cmNl
TG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpz
ZXREZWZlcnNMb2FkaW5nKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgYm9vbCBkZWZl
cnMpCiB7CiAgICAgUmVzb3VyY2VMb2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VM
b2FkZXItPmlkZW50aWZpZXIoKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpTZXREZWZlcnNMb2FkaW5nKGlkZW50aWZpZXIsIGRlZmVycyksIDApOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldERl
ZmVyc0xvYWRpbmcoaWRlbnRpZmllciwgZGVmZXJzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpjcm9zc09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2Fk
ZXIqLCBjb25zdCBVUkwmKQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5p
bXVtCiAgICAgaWYgKG1fc3VzcGVuZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpT
ZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXJ2ZVBlbmRpbmdSZXF1ZXN0
cyhtaW5pbXVtUHJpb3JpdHkpLCAwKTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVs
ZXI6OnN1c3BlbmRQZW5kaW5nUmVxdWVzdHMoKQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogCiB2b2lkIFdl
YlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChlbmFibGVkKSwgTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZDo6UmVwbHkoKSwg
MCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVkKGVuYWJsZWQpLCBNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVkOjpSZXBseSgpLCAw
KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcm9jZXNzQ3Jh
c2hlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dl
YlJlc291cmNlTG9hZGVyLmNwcAppbmRleCA2ZDY2OGQ1ODQ0Y2Q1YmFkYTQwOTU1ZmViMzBkOTZi
ODMyM2FlMTNhLi44OWQxNzhiYTMyM2UyMjVjMDQyZDExZTRlMDMwYzE4ZDI3ZTc5NzFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJj
ZUxvYWRlci5jcHAKQEAgLTYxLDcgKzYxLDcgQEAgV2ViUmVzb3VyY2VMb2FkZXI6On5XZWJSZXNv
dXJjZUxvYWRlcigpCiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUmVzb3VyY2VMb2FkZXI6Om1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCku
bmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCk7CiB9CiAKIHVp
bnQ2NF90IFdlYlJlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwCmluZGV4IDYwOThhMTdjZTAxOWNkMGJjYjJmYWViN2Q4NzJlYTcxODAwNDQ1MjkuLjNhOTlk
ZDg4Y2JmMjAyNTBkN2QzYTljZGY1M2MyNjljNDNmN2U5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVx
dWVzdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC0xMjYsNyAr
MTI2LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlcjo6cGVybWlzc2lvbkwKICAgICBpZiAoIW1fcGFnZS0+Y29yZVBh
Z2UoKS0+c2V0dGluZ3MoKS5ub3RpZmljYXRpb25zRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4g
Tm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwogICAgIAotICAgIHJldHVybiBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCkt
PnBvbGljeUZvck9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+cG9saWN5
Rm9yT3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY3Vy
aXR5T3JpZ2luKTsKICAgICByZXR1cm4gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVu
aWVkOwpAQCAtMTM2LDcgKzEzNiw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbiBO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnBlcm1pc3Npb25MCiB2b2lkIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6c2V0UGVybWlzc2lvbkxldmVsRm9y
VGVzdGluZyhjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZywgYm9vbCBhbGxvd2VkKQogewogI2lm
IEVOQUJMRShOT1RJRklDQVRJT05TKSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
PigpLT5kaWRVcGRhdGVOb3RpZmljYXRpb25EZWNpc2lvbihvcmlnaW5TdHJpbmcsIGFsbG93ZWQp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9u
TWFuYWdlcj4oKS0+ZGlkVXBkYXRlTm90aWZpY2F0aW9uRGVjaXNpb24ob3JpZ2luU3RyaW5nLCBh
bGxvd2VkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKG9yaWdpblN0cmluZyk7CiAgICAgVU5V
U0VEX1BBUkFNKGFsbG93ZWQpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpzZXRQZXJtaXNzaW9uTGV2ZWxGb3JUZXN0aW5nKGNv
bnN0IFN0CiB2b2lkIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3Zl
QWxsUGVybWlzc2lvbnNGb3JUZXN0aW5nKCkKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykg
fHwgRU5BQkxFKExFR0FDWV9OT1RJRklDQVRJT05TKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+cmVtb3ZlQWxsUGVybWlzc2lv
bnNGb3JUZXN0aW5nKCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5yZW1vdmVBbGxQZXJtaXNzaW9uc0ZvclRlc3Rpbmco
KTsKICNlbmRpZgogfQogCkBAIC0xNjIsNyArMTYyLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXI6OmRpZFJlY2VpdmVOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVj
aXMKIAogICAgIG1fb3JpZ2luVG9JRE1hcC5yZW1vdmUob3JpZ2luKTsKIAotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkVXBk
YXRlTm90aWZpY2F0aW9uRGVjaXNpb24ob3JpZ2luLT50b1N0cmluZygpLCBhbGxvd2VkKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXI+KCktPmRpZFVwZGF0ZU5vdGlmaWNhdGlvbkRlY2lzaW9uKG9yaWdpbi0+dG9TdHJpbmcoKSwg
YWxsb3dlZCk7CiAKICNpZiBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgUmVmUHRy
PFdlYkNvcmU6OlZvaWRDYWxsYmFjaz4gdm9pZENhbGxiYWNrID0gbV9pZFRvVm9pZENhbGxiYWNr
TWFwLnRha2UocmVxdWVzdElEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BERi9QREZQbHVnaW4ubW0KaW5kZXggODBmNDQzNmI4OTA0MGNjOWExNjFhYmQ0OGUw
MTZjNjU3YmUxODlkMy4uYmYxZjBlOTJjZWFjZWY1MTYzMjBjYzc1MjEzMmVjOTMyODBlMTNjZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVn
aW4ubW0KQEAgLTE2NjIsNyArMTY2Miw3IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9Q
YXN0ZWJvYXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsCiAgICAg
ICAgIHBhc3RlYm9hcmRUeXBlcy5hcHBlbmQodHlwZSk7CiAKICAgICB1aW50NjRfdCBuZXdDaGFu
Z2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJk
VHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlcyksCisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBw
YXN0ZWJvYXJkVHlwZXMpLAogICAgICAgICBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpT
ZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAKICAgICBmb3Ig
KE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0gaXRlbXMuY291bnQ7IGkgPCBjb3VudDsgKytpKSB7
CkBAIC0xNjc3LDcgKzE2NzcsNyBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVi
b2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLAogCiAgICAgICAg
IGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRUeXBlXSB8fCBbdHlwZSBp
c0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsKICAgICAgICAgICAgIFJl
dGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHROUyhbW05TU3RyaW5nIGFs
bG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ10pOwot
ICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0
cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQoKSks
IE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBl
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5h
bWUsIHR5cGUsIHBsYWluVGV4dFN0cmluZy5nZXQoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCks
IDApOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
YnVmZmVyID0gU2hhcmVkQnVmZmVyOjp3cmFwTlNEYXRhKGRhdGEpOwogCkBAIC0xNjg4LDcgKzE2
ODgsNyBAQCB2b2lkIFBERlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAq
cGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0ZW1zLAogICAgICAgICAgICAgUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gc2hhcmVkTWVtb3J5ID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoYnVmZmVyLT5zaXpl
KCkpOwogICAgICAgICAgICAgbWVtY3B5KHNoYXJlZE1lbW9yeS0+ZGF0YSgpLCBidWZmZXItPmRh
dGEoKSwgYnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgc2hhcmVkTWVtb3J5LT5jcmVhdGVI
YW5kbGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKLSAgICAgICAgICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3Rl
Ym9hcmROYW1lLCB0eXBlLCBoYW5kbGUsIGJ1ZmZlci0+c2l6ZSgpKSwgTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5n
ZUNvdW50KSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgaGFuZGxl
LCBidWZmZXItPnNpemUoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3Rl
Ym9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgICAgICB9
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcAppbmRleCBk
OGJiOTkwNDViZDU3Yzc5YjRhY2Q2NDMxODVlMmE1OTBkMDRlNjQwLi5jMzU0YjIyNDQ2ODY1NmE5
ODQwNmRmY2Y0ZjlkMmUwMDQzYjA1NzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25N
YW5hZ2VyLmNwcApAQCAtNzAsNyArNzAsNyBAQCBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiogUGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyOjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdAogCiAg
ICAgSVBDOjpBdHRhY2htZW50IGVuY29kZWRDb25uZWN0aW9uSWRlbnRpZmllcjsKICAgICBib29s
IHN1cHBvcnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb247Ci0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNz
VG9rZW4pLAorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJvY2Vzc1Rva2VuKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb246OlJlcGx5KGVuY29kZWRDb25uZWN0aW9u
SWRlbnRpZmllciwgc3VwcG9ydHNBc3luY2hyb25vdXNJbml0aWFsaXphdGlvbiksIDApKQogICAg
ICAgICByZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5Qcm94eS5jcHAKaW5kZXggMDk1ZGNiZGM3MDE5YzU5YTE5YzVjZWMyOTg5NTk1NzJm
YTgxZTIzZC4uZGQ3ZjkyOTU5OTQzYzA5YWI3OWJiOWI4YjYyMWZkNmFlNmVmNWNmMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCkBA
IC04Niw3ICs4Niw3IEBAIHZvaWQgUGx1Z2luUHJveHk6OnBsdWdpblByb2Nlc3NDcmFzaGVkKCkK
IGJvb2wgUGx1Z2luUHJveHk6OmluaXRpYWxpemUoY29uc3QgUGFyYW1ldGVycyYgcGFyYW1ldGVy
cykKIHsKICAgICBBU1NFUlQoIW1fY29ubmVjdGlvbik7Ci0gICAgbV9jb25uZWN0aW9uID0gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyKCkuZ2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3Rpb24obV9wbHVnaW5Qcm9jZXNzVG9rZW4pOworICAgIG1fY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlcigpLmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKG1fcGx1Z2luUHJvY2Vzc1Rva2VuKTsK
ICAgICAKICAgICBpZiAoIW1fY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4
IDEwNzYwN2FkNmJjYzkzOGRkN2JhNzk5ODY5Y2FkNjRjYjM2MDFlYmQuLjE4NjQyMzNkNTY5YTI5
YTJjYjI5MjViMmYyYTgyNWM4ZGIxNmUyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE1MzIsNyArMTUzMiw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6c2V0Q29tcGxleFRleHRJbnB1dFN0YXRlKFBsdWdpbkNvbXBsZXhUZXh0SW5w
dXRTdGF0ZSBwbHVnaW5Db21wCiAKIGNvbnN0IE1hY2hTZW5kUmlnaHQmIFBsdWdpblZpZXc6OmNv
bXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpOworICAgIHJldHVybiBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKTsKIH0KIAogdm9p
ZCBQbHVnaW5WaWV3OjpvcGVuUGx1Z2luUHJlZmVyZW5jZVBhbmUoKQpAQCAtMTgxNCw3ICsxODE0
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKCkK
ICAgICBTdHJpbmcgcGx1Z2luT3JpZ2luID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZFVybCgp
Lmhvc3QoKTsKICAgICBTdHJpbmcgbWltZVR5cGUgPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVk
TWltZVR5cGUoKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBsdWdJbkRpZFJlY2VpdmVV
c2VySW50ZXJhY3Rpb24ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgcGx1Z0lu
SW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGx1Z0luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbihwYWdlT3Jp
Z2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBwbHVnSW5JbWFnZUVsZW1lbnQuZG9jdW1lbnQo
KS5wYWdlKCktPnNlc3Npb25JRCgpKTsKIH0KIAogYm9vbCBQbHVnaW5WaWV3OjpzaG91bGRDcmVh
dGVUcmFuc2llbnRQYWludGluZ1NuYXBzaG90KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IubW0KaW5kZXggM2EzYzU5NjZlNmU0NTgxZDMzYjI1Y2FmYTk4MjNhYTExZjYwOTc5
ZS4uYTY4MDg4MWMyZGExNzlkMWMxZGNlMzFjZTkyNWM5MTRlMDQyZGVkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3IubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KQEAgLTU0LDEyICs1NCwxMiBAQCBSZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvcjo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IoV2ViUGFnZSogcGFnZSkK
ICAgICA6IEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IocGFnZS0+Y29yZVBhZ2UoKSkKICAgICAs
IG1fd2ViUGFnZShwYWdlKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSwg
KnRoaXMpOwogfQogCiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6flJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSk7CiB9
CiAKIHZvaWQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjaGVkdWxlVHJlZVN0YXRlQ29t
bWl0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9y
YWdlQXJlYU1hcC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFn
ZUFyZWFNYXAuY3BwCmluZGV4IDc2YjA5YWVkMWI4NGE5ZmYzZTIwNmMzMjA2MWE0ZWY3ZWRjZGIw
NjkuLmUyMTg1MTYzMDg4NzdkZjIxNDUyZmY5YjNhYzFhYmZjMjU2ZmMwZmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcApA
QCAtNzEsMjQgKzcxLDI0IEBAIFN0b3JhZ2VBcmVhTWFwOjpTdG9yYWdlQXJlYU1hcChTdG9yYWdl
TmFtZXNwYWNlSW1wbCogc3RvcmFnZU5hbWVzcGFjZSwgUGFzc1JlZlB0CiAgICAgc3dpdGNoICht
X3N0b3JhZ2VUeXBlKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpMb2NhbFN0b3JhZ2U6CiAgICAgICAg
IGlmIChTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxPcmlnaW4gPSBzdG9yYWdlTmFtZXNwYWNlLT50
b3BMZXZlbE9yaWdpbigpKQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0
ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFj
ZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5
T3JpZ2luKHRvcExldmVsT3JpZ2luKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlP
cmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdl
TWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbih0b3BMZXZlbE9yaWdpbiksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVM
b2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VO
YW1lc3BhY2VJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX3Nl
Y3VyaXR5T3JpZ2luLmdldCgpKSksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXI6OkNyZWF0ZUxvY2FsU3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVz
cGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3Vy
aXR5T3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7CiAKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIFdlYkNvcmU6OlNlc3Npb25TdG9yYWdlOgotICAgICAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9y
YWdlTWFuYWdlcjo6Q3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIHN0b3Jh
Z2VOYW1lc3BhY2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZy
b21TZWN1cml0eU9yaWdpbihtX3NlY3VyaXR5T3JpZ2luLmdldCgpKSksIDApOworICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlU2Vzc2lvblN0b3JhZ2VNYXAobV9zdG9yYWdl
TWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX3NlY3VyaXR5T3JpZ2luLmdldCgpKSksIDAp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fc3RvcmFnZU1hcElELCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VNYXBJRCwgKnRoaXMpOwogfQogCiBTdG9yYWdlQXJlYU1h
cDo6flN0b3JhZ2VBcmVhTWFwKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6RGVzdHJv
eVN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQpLCAwKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fc3RvcmFnZU1hcElEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6RGVzdHJveVN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQpLCAwKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VB
cmVhTWFwOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fc3RvcmFnZU1hcElEKTsKIH0KIAogdW5z
aWduZWQgU3RvcmFnZUFyZWFNYXA6Omxlbmd0aCgpCkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6c2V0SXRlbShGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1w
bCogc291cmNlQXJlYSwgY28KIAogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsK
IAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpTZXRJdGVtKG1fc3RvcmFnZU1hcElELCBzb3Vy
Y2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJj
ZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5h
Z2VyOjpTZXRJdGVtKG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCks
IG1fY3VycmVudFNlZWQsIGtleSwgdmFsdWUsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KSksIDApOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJdGVtKFdlYkNvcmU6OkZy
YW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBcmVhLCBjb25zdCBTdHJp
bmcmIGtleSkKQEAgLTE0NSw3ICsxNDUsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpyZW1vdmVJ
dGVtKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzbwogCiAg
ICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1h
bmFnZXI6OlJlbW92ZUl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVh
SUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkp
LCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6UmVtb3ZlSXRlbShtX3N0b3JhZ2VN
YXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHNv
dXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIDApOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVh
TWFwOjpjbGVhcihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCog
c291cmNlQXJlYSkKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpjbGVh
cihXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQQog
CiAgICAgbV9oYXNQZW5kaW5nQ2xlYXIgPSB0cnVlOwogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3Jh
Z2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6
OkNsZWFyKG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3Vy
cmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSksIDApOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDbGVhcihtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3Rv
cmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCkpLCAwKTsKIH0KIAogYm9vbCBTdG9yYWdlQXJlYU1hcDo6Y29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXkpCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6bG9hZFZhbHVl
c0lmTmVlZGVkKCkKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgdXNlIGEgc3BlY2lhbCBzZW5k
U3luYyBmbGFnIHRvIGluZGljYXRlIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIGluY29t
aW5nIG1lc3NhZ2VzIHdoaWxlIHdhaXRpbmcgZm9yIGEgcmVwbHkuCiAgICAgLy8gKFRoaXMgZmxh
ZyBkb2VzIG5vdCB5ZXQgZXhpc3QpLiBTaW5jZSBsb2FkVmFsdWVzSWZOZWVkZWQoKSBlbmRzIHVw
IGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBKYXZhU2NyaXB0IGNvZGUsIHByb2Nlc3NpbmcgaW5j
b21pbmcgc3luY2hyb25vdXMgbWVzc2FnZXMKICAgICAvLyBjb3VsZCBsZWFkIHRvIHdlaXJkIHJl
ZW50cmVuY3kgYnVncyBvdGhlcndpc2UuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpH
ZXRWYWx1ZXMobV9zdG9yYWdlTWFwSUQsIG1fY3VycmVudFNlZWQpLCBNZXNzYWdlczo6U3RvcmFn
ZU1hbmFnZXI6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXMobV9zdG9yYWdlTWFwSUQsIG1fY3VycmVudFNlZWQp
LCBNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlczo6UmVwbHkodmFsdWVzKSwgMCk7
CiAKICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMp
OwogICAgIG1fc3RvcmFnZU1hcC0+aW1wb3J0SXRlbXModmFsdWVzKTsKQEAgLTMxNiw3ICszMTYs
NyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRjaFNlc3Npb25TdG9yYWdlRXZlbnQodWlu
dDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgYwogCiAgICAgLy8gTmFtZXNwYWNlIElEcyBmb3Ig
c2Vzc2lvbiBzdG9yYWdlIG5hbWVzcGFjZXMgYXJlIGVxdWl2YWxlbnQgdG8gd2ViIHBhZ2UgSURz
CiAgICAgLy8gc28gd2UgY2FuIGdldCB0aGUgcmlnaHQgcGFnZSBoZXJlLgotICAgIFdlYlBhZ2Uq
IHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKG1fc3RvcmFnZU5hbWVzcGFj
ZUlEKTsKKyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
UGFnZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTM1MCw3ICszNTAsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpkaXNwYXRj
aExvY2FsU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGNvbgogCiAg
ICAgVmVjdG9yPFJlZlB0cjxGcmFtZT4+IGZyYW1lczsKIAotICAgIFBhZ2VHcm91cCYgcGFnZUdy
b3VwID0gKldlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2VHcm91cChtX3N0b3JhZ2VOYW1lc3Bh
Y2VJRCktPmNvcmVQYWdlR3JvdXAoKTsKKyAgICBQYWdlR3JvdXAmIHBhZ2VHcm91cCA9ICpXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlR3JvdXAobV9zdG9yYWdlTmFtZXNwYWNlSUQpLT5j
b3JlUGFnZUdyb3VwKCk7CiAgICAgY29uc3QgSGFzaFNldDxQYWdlKj4mIHBhZ2VzID0gcGFnZUdy
b3VwLnBhZ2VzKCk7CiAgICAgZm9yIChIYXNoU2V0PFBhZ2UqPjo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwYWdlcy5iZWdpbigpLCBlbmQgPSBwYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gJigqaXQpLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVu
dENvbnRyb2xsZXIuY3BwCmluZGV4IDRmY2Y4NmU4NTkwOTNiNzIzZTc5MDM3YzBiZmZjOTMwNmQ3
NzQyYzIuLjIzNjAzMzMwZjU4MTliNmFlMGU4MDJmMDcwYTgxOTUwMTNlZjdkNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50
L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAKQEAgLTcwLDE0ICs3MCwxNCBAQCBXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXI6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcih1aW50NjRfdCBpZGVu
dGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiAgICAgLCBtX3VzZXJDb250
ZW50Q29udHJvbGxlcigqVXNlckNvbnRlbnRDb250cm9sbGVyOjpjcmVhdGUoKSkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIsICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2lkZW50aWZpZXIsICp0aGlzKTsKIH0KIAogV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjp+V2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyKCkKIHsKICAgICBBU1NFUlQodXNlckNvbnRlbnRDb250cm9s
bGVycygpLmNvbnRhaW5zKG1faWRlbnRpZmllcikpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250
ZW50Q29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIpOwogCiAg
ICAgdXNlckNvbnRlbnRDb250cm9sbGVycygpLnJlbW92ZShtX2lkZW50aWZpZXIpOwogfQpAQCAt
MTMzLDcgKzEzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICAg
ICAgcmV0dXJuOwogCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxlclByb3h5
OjpEaWRQb3N0TWVzc2FnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgd2ViRnJhbWUtPmZyYW1lSUQoKSwg
bV9pZGVudGlmaWVyLCBJUEM6OkRhdGFSZWZlcmVuY2UodmFsdWUtPmRhdGEoKSkpLCBtX2NvbnRy
b2xsZXItPmlkZW50aWZpZXIoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29u
dHJvbGxlclByb3h5OjpEaWRQb3N0TWVzc2FnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgd2ViRnJhbWUt
PmZyYW1lSUQoKSwgbV9pZGVudGlmaWVyLCBJUEM6OkRhdGFSZWZlcmVuY2UodmFsdWUtPmRhdGEo
KSkpLCBtX2NvbnRyb2xsZXItPmlkZW50aWZpZXIoKSk7CiAgICAgfQogCiAgICAgV2ViQ29yZTo6
VXNlck1lc3NhZ2VIYW5kbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcigpIHsgcmV0dXJuICptX2Rl
c2NyaXB0b3I7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQmF0dGVyeUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkJhdHRlcnlDbGllbnQuY3BwCmluZGV4IDFkMTM2ZTRmMTNjMDE1
YzEzNWE3NmIzMDk1MjAyNzVjNDE4MjBlYTguLmFhN2Q0ZmIwYzE2YWVjNzFjMTk2NGU2ODRiOTRm
ODc5Nzk3ZDg2Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQmF0dGVyeUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYXR0ZXJ5Q2xpZW50LmNwcApAQCAtMzgsMTcgKzM4LDE3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYkJhdHRlcnlDbGllbnQ6OnN0YXJ0VXBk
YXRpbmcoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViQmF0dGVy
eU1hbmFnZXI+KCktPnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViQmF0dGVyeU1hbmFnZXI+KCktPnJlZ2lzdGVyV2ViUGFn
ZShtX3BhZ2UpOwogfQogCiB2b2lkIFdlYkJhdHRlcnlDbGllbnQ6OnN0b3BVcGRhdGluZygpCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4o
KS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3Bh
Z2UpOwogfQogCiB2b2lkIFdlYkJhdHRlcnlDbGllbnQ6OmJhdHRlcnlDb250cm9sbGVyRGVzdHJv
eWVkKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkJhdHRlcnlN
YW5hZ2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViQmF0dGVyeU1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQ
YWdlKG1fcGFnZSk7CiAgICAgZGVsZXRlIHRoaXM7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cAppbmRleCBlYTVhMzk4ZDhjZDEzYmUxYmY3ZjhmMjY2ODU5MTEzN2RjNTM3OTQyLi5hNmZlMTNl
ZWE0NDk1M2M4MmY1MzI1OGM3N2NjZDZjNTA0N2Y2NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCkBAIC0xMzUsNyArMTM1LDcgQEAgRmxvYXRSZWN0IFdlYkNocm9tZUNsaWVudDo6d2luZG93
UmVjdCgpCiAKICAgICBGbG9hdFJlY3QgbmV3V2luZG93RnJhbWU7CiAKLSAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0ZyYW1lKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldFdpbmRvd0ZyYW1lOjpSZXBseShuZXdXaW5kb3dGcmFtZSksIG1fcGFnZS0+cGFnZUlE
KCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWUo
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWU6OlJlcGx5KG5ld1dpbmRv
d0ZyYW1lKSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsK
IAogICAgIHJldHVybiBuZXdXaW5kb3dGcmFtZTsKQEAgLTE5Miw3ICsxOTIsNyBAQCB2b2lkIFdl
YkNocm9tZUNsaWVudDo6Zm9jdXNlZEZyYW1lQ2hhbmdlZChGcmFtZSogZnJhbWUpCiB7CiAgICAg
V2ViRnJhbWUqIHdlYkZyYW1lID0gZnJhbWUgPyBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqZnJh
bWUpIDogbnVsbHB0cjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9jdXNlZEZyYW1lQ2hh
bmdlZCh3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb2N1c2VkRnJhbWVDaGFuZ2VkKHdlYkZy
YW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDApLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAog
UGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBG
cmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgd2luZG93RmVh
dHVyZXMsIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25BY3Rpb24pCkBAIC0yMTMs
MTQgKzIxMywxNCBAQCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSog
ZnJhbWUsIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlcwogCiAgICAgdWludDY0X3QgbmV3
UGFnZUlEID0gMDsKICAgICBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0g
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlKHdlYkZyYW1lLT5m
cmFtZUlEKCksIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHdpbmRvd0ZlYXR1cmVzLCBuYXZp
Z2F0aW9uQWN0aW9uRGF0YSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2U6
OlJlcGx5KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlm
ICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZSh3ZWJGcmFtZS0+ZnJh
bWVJRCgpLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywgbmF2aWdh
dGlvbkFjdGlvbkRhdGEpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpS
ZXBseShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAg
cmV0dXJuIDA7CiAKICAgICBpZiAoIW5ld1BhZ2VJRCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jcmVhdGVXZWJQYWdlKG5ld1BhZ2VJRCwgcGFyYW1ldGVy
cyk7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2UobmV3UGFnZUlEKS0+
Y29yZVBhZ2UoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jcmVhdGVXZWJQYWdlKG5l
d1BhZ2VJRCwgcGFyYW1ldGVycyk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYlBhZ2UobmV3UGFnZUlEKS0+Y29yZVBhZ2UoKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnNob3coKQpAQCAtMjUwLDcgKzI1MCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp0b29s
YmFyc1Zpc2libGUoKQogICAgICAgICByZXR1cm4gdG9vbGJhcnNWaXNpYmlsaXR5ID09IEFQSTo6
SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudDo6VUlFbGVtZW50VmlzaWJpbGl0eTo6VmlzaWJs
ZTsKICAgICAKICAgICBib29sIHRvb2xiYXJzQXJlVmlzaWJsZSA9IHRydWU7Ci0gICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGUoKSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJhcnNBcmVWaXNpYmxlOjpSZXBseSh0b29sYmFyc0FyZVZp
c2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJsZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXRUb29sYmFyc0FyZVZpc2libGU6OlJlcGx5KHRvb2xiYXJzQXJlVmlzaWJsZSksIG1fcGFnZS0+
cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiB0b29sYmFyc0Fy
ZVZpc2libGU7CkBAIC0yNjgsNyArMjY4LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnN0YXR1
c2JhclZpc2libGUoKQogICAgICAgICByZXR1cm4gc3RhdHVzYmFyVmlzaWJpbGl0eSA9PSBBUEk6
OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ6OlVJRWxlbWVudFZpc2liaWxpdHk6OlZpc2li
bGU7CiAKICAgICBib29sIHN0YXR1c0JhcklzVmlzaWJsZSA9IHRydWU7Ci0gICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpHZXRTdGF0dXNCYXJJc1Zpc2libGUoKSwgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpSZXBseShzdGF0dXNCYXJJc1Zpc2li
bGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldFN0YXR1c0JhcklzVmlzaWJsZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRT
dGF0dXNCYXJJc1Zpc2libGU6OlJlcGx5KHN0YXR1c0JhcklzVmlzaWJsZSksIG1fcGFnZS0+cGFn
ZUlEKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBzdGF0dXNCYXJJc1Zp
c2libGU7CkBAIC0yOTcsNyArMjk3LDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6Om1lbnViYXJW
aXNpYmxlKCkKICAgICAgICAgcmV0dXJuIG1lbnViYXJWaXNpYmlsaXR5ID09IEFQSTo6SW5qZWN0
ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudDo6VUlFbGVtZW50VmlzaWJpbGl0eTo6VmlzaWJsZTsKICAg
ICAKICAgICBib29sIG1lbnVCYXJJc1Zpc2libGUgPSB0cnVlOwotICAgIGlmICghV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlzaWJsZSgpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpSZXBseShtZW51QmFySXNWaXNpYmxlKSwgbV9wYWdl
LT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51
QmFySXNWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldE1lbnVCYXJJc1Zpc2li
bGU6OlJlcGx5KG1lbnVCYXJJc1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gbWVudUJhcklzVmlzaWJsZTsKQEAgLTMzMSw3ICsz
MzEsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqCiAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9u
b3VzTWVzc2FnZXNTaG91bGRTcGluUnVuTG9vcCgpKQogICAgICAgICBzeW5jU2VuZEZsYWdzIHw9
IElQQzo6U3BpblJ1bkxvb3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKICAgICAKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChtZXNzYWdl
LCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3Jl
VW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSksIG1fcGFnZS0+cGFnZUlEKCks
IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKKyAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5l
bChtZXNzYWdlLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsOjpSZXBseShzaG91bGRDbG9zZSksIG1fcGFnZS0+
cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdz
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHNob3VsZENsb3NlOwpAQCAt
MzY3LDcgKzM2Nyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0QWxlcnQo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGFsZXJ0VGV4dCkKICAgICB1bnNpZ25lZCBzeW5j
U2VuZEZsYWdzID0gSVBDOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZDsKICAgICBp
ZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAg
ICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5
OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFt
ZS0+ZnJhbWVJRCgpLCBhbGVydFRleHQpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZh
U2NyaXB0QWxlcnQ6OlJlcGx5KCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgYWxlcnRUZXh0
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgpLCBt
X3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1Nl
bmRGbGFncyk7CiB9CiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmly
bShGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTM4Miw3ICszODIsNyBA
QCBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1l
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9ub3VzTWVz
c2FnZXNTaG91bGRTcGluUnVuTG9vcCgpKQogICAgICAgICBzeW5jU2VuZEZsYWdzIHw9IElQQzo6
U3BpblJ1bkxvb3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKICAgICBib29sIHJlc3VsdCA9IGZhbHNl
OwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0o
d2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1
bkphdmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykpCisgICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3ZWJGcmFtZS0+
ZnJhbWVJRCgpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlw
dENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjpt
aWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTQwMCw3ICs0MDAsNyBAQCBib29sIFdlYkNocm9t
ZUNsaWVudDo6cnVuSmF2YVNjcmlwdFByb21wdChGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgYwogICAgIGlmIChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3Bp
blJ1bkxvb3AoKSkKICAgICAgICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNwaW5SdW5Mb29wV2hp
bGVXYWl0aW5nRm9yUmVwbHk7CiAgICAgCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJl
cGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVzc2FnZSwgZGVm
YXVsdFZhbHVlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6
UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
czo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBy
ZXR1cm4gIXJlc3VsdC5pc051bGwoKTsKQEAgLTQxNyw3ICs0MTcsNyBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBTdHJpbmcmIHN0YXR1c2JhclRleHQpCiBi
b29sIFdlYkNocm9tZUNsaWVudDo6c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpCiB7CiAgICAg
Ym9vbCBzaG91bGRJbnRlcnJ1cHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdDo6UmVwbHkoc2hvdWxkSW50ZXJydXB0KSwgbV9w
YWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG91
bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3VsZElu
dGVycnVwdEphdmFTY3JpcHQ6OlJlcGx5KHNob3VsZEludGVycnVwdCksIG1fcGFnZS0+cGFnZUlE
KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkSW50ZXJydXB0
OwpAQCAtNjAxLDcgKzYwMSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0CiAKICAgICAvLyBO
b3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJIaXRUZXN0UmVzdWx0OjpEYXRhIHdlYkhpdFRl
c3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpNb3VzZURpZE1vdmVPdmVyRWxlbWVudCh3ZWJIaXRUZXN0UmVzdWx0RGF0
YSwgbW9kaWZpZXJGbGFncywgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgbV9wYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHdlYkhp
dFRlc3RSZXN1bHREYXRhLCBtb2RpZmllckZsYWdzLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkp
KTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxM
b25nTW91c2VQcmVzcyhjb25zdCBJbnRQb2ludCYgbW91c2VEb3duUG9zaXRpb24sIGNvbnN0IEhp
dFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhjb25z
dCBJbnRQb2ludCYgbW8KICAgICAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBX
ZWJIaXRUZXN0UmVzdWx0OjpEYXRhIHdlYkhpdFRlc3RSZXN1bHREYXRhKGhpdFRlc3RSZXN1bHQp
OwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRCZWdpblRyYWNr
aW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MobW91c2VEb3duUG9zaXRpb24sIHdlYkhpdFRlc3RS
ZXN1bHREYXRhLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVBy
ZXNzKG1vdXNlRG93blBvc2l0aW9uLCB3ZWJIaXRUZXN0UmVzdWx0RGF0YSwgVXNlckRhdGEoV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5n
ZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRSZWNvZ25pemVM
b25nTW91c2VQcmVzcygpCkBAIC02MjQsNyArNjI0LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OmRpZFJlY29nbml6ZUxvbmdNb3VzZVByZXNzKCkKICAgICBtX3BhZ2UtPmluamVjdGVkQnVuZGxl
VUlDbGllbnQoKS5kaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhtX3BhZ2UsIHVzZXJEYXRhKTsK
IAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcyhVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
UmVjb2duaXplTG9uZ01vdXNlUHJlc3MoVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRDYW5jZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3Vz
ZVByZXNzKCkKQEAgLTYzNSw3ICs2MzUsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2Fu
Y2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcygpCiAgICAgbV9wYWdlLT5pbmplY3Rl
ZEJ1bmRsZVVJQ2xpZW50KCkuZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVz
cyhtX3BhZ2UsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDYW5jZWxUcmFja2luZ1Bv
dGVudGlhbExvbmdNb3VzZVByZXNzKFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIG1fcGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDYW5jZWxUcmFja2luZ1BvdGVudGlh
bExvbmdNb3VzZVByZXNzKFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdl
YkNocm9tZUNsaWVudDo6c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRvb2xUaXAsIFRleHREaXJl
Y3Rpb24pCkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnByaW50KEZy
YW1lKiBmcmFtZSkKICAgICAvLyB0aGUgcHJpbnQgb3BlcmF0aW9uIGlzIGZpbmlzaGVkIHVuZXhw
ZWN0ZWx5IGFuZCB0aGUgd2ViIHByb2Nlc3MgY3Jhc2hlcywgc2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjY5NzkuCiAgICAgLy8gVGhlIFByaW50ZXJMaXN0R3Rr
IGNsYXNzIGdldHMgdGhlIGxpc3Qgb2YgcHJpbnRlcnMgaW4gdGhlIGNvbnN0cnVjdG9yIHNvIHdl
IGp1c3QgbmVlZCB0byBlbnN1cmUgdGhlcmUncyBhbiBpbnN0YW5jZSBhbGl2ZQogICAgIC8vIGR1
cmluZyB0aGUgc3luY2hyb25vdXMgcHJpbnQgb3BlcmF0aW9uLgotICAgIFJlZlB0cjxQcmludGVy
TGlzdEd0az4gcHJpbnRlckxpc3QgPSBQcmludGVyTGlzdEd0azo6c2hhcmVkKCk7CisgICAgUmVm
UHRyPFByaW50ZXJMaXN0R3RrPiBwcmludGVyTGlzdCA9IFByaW50ZXJMaXN0R3RrOjpzaW5nbGV0
b24oKTsKICNlbmRpZgogCiAgICAgdW5zaWduZWQgc3luY1NlbmRGbGFncyA9IElQQzo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQ7CkBAIC02OTAsNyArNjkwLDcgQEAgdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSogZnJhbWUsIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2UKICAgICAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9ub3VzTWVzc2FnZXNT
aG91bGRTcGluUnVuTG9vcCgpKQogICAgICAgICAgICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNw
aW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7CiAgICAgICAgIAotICAgICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYygKKyAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoCiAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFi
YXNlUXVvdGEod2ViRnJhbWUtPmZyYW1lSUQoKSwgb3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIo
KSwgZGF0YWJhc2VOYW1lLCBkZXRhaWxzLmRpc3BsYXlOYW1lKCksIGN1cnJlbnRRdW90YSwgY3Vy
cmVudE9yaWdpblVzYWdlLCBkZXRhaWxzLmN1cnJlbnRVc2FnZSgpLCBkZXRhaWxzLmV4cGVjdGVk
VXNhZ2UoKSksCiAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERh
dGFiYXNlUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpOwogICAgIH0KQEAgLTcxOCw3
ICs3MTgsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YShTZWN1cml0eU9yaWdpbiogb3JpZ2luLAogICAgICAgICByZXR1cm47CiAKICAg
ICB1aW50NjRfdCBuZXdRdW90YSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoCiAgICAgICAgIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEob3JpZ2lu
LT5kYXRhYmFzZUlkZW50aWZpZXIoKSwgY3VycmVudFF1b3RhLCB0b3RhbEJ5dGVzTmVlZGVkKSwK
ICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVP
cmlnaW5RdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncyk7CiAKQEAgLTEwNTMsNyArMTA1
Myw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzZXRQYWdlQWN0aXZpdHlTdGF0ZShQYWdlQWN0
aXZpdHlTdGF0ZTo6RmxhZ3MgYWN0aXZpdHlTdGF0CiBib29sIFdlYkNocm9tZUNsaWVudDo6d3Jh
cENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIGtleSwgVmVjdG9yPHVpbnQ4X3Q+JiB3
cmFwcGVkS2V5KSBjb25zdAogewogICAgIGJvb2wgc3VjY2VlZGVkOwotICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6V3JhcENyeXB0b0tleShrZXkpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpXcmFwQ3J5cHRvS2V5OjpSZXBseShzdWNjZWVkZWQsIHdyYXBwZWRLZXkpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldyYXBDcnlw
dG9LZXkoa2V5KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V3JhcENyeXB0b0tleTo6UmVwbHko
c3VjY2VlZGVkLCB3cmFwcGVkS2V5KSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICByZXR1cm4gc3VjY2VlZGVkOwogfQpAQCAtMTA2MSw3ICsxMDYxLDcgQEAg
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+
JiBrZXksIFZlY3Rvcjx1aW50OF90PiYKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp1bndyYXBDcnlw
dG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiB3cmFwcGVkS2V5LCBWZWN0b3I8dWludDhfdD4m
IGtleSkgY29uc3QKIHsKICAgICBib29sIHN1Y2NlZWRlZDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tleSh3cmFwcGVkS2V5KSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VW53cmFwQ3J5cHRvS2V5OjpSZXBseShzdWNjZWVkZWQsIGtleSksIG1fcGFnZS0+
cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW53cmFwQ3J5
cHRvS2V5KHdyYXBwZWRLZXkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbndyYXBDcnlwdG9L
ZXk6OlJlcGx5KHN1Y2NlZWRlZCwga2V5KSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gc3VjY2VlZGVkOwogfQpAQCAtMTA4Miw3ICsxMDgyLDcg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmhhbmRsZVNlbGVjdGlvblNlcnZpY2VDbGljayhXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiYgc2VsZWMKIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6Omhhc1Jl
bGV2YW50U2VsZWN0aW9uU2VydmljZXMoYm9vbCBpc1RleHRPbmx5KSBjb25zdAogewotICAgIHJl
dHVybiAoaXNUZXh0T25seSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2
aWNlcygpKSB8fCBXZWJQcm9jZXNzOjpzaGFyZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7
CisgICAgcmV0dXJuIChpc1RleHRPbmx5ICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmhhc1Nl
bGVjdGlvblNlcnZpY2VzKCkpIHx8IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmhhc1JpY2hDb250
ZW50U2VydmljZXMoKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbG9yQ2hvb3Nlci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbG9yQ2hvb3Nlci5jcHAKaW5kZXgg
Yjc3OTE4MjE2MmRmYThjMmU0NDYwNmNkMWIyYWZjNGU1NDU2ZmUxZS4uMTU4NTRhZWMwYjliMWVh
NGRiODlhMjYwNWM4OTM5Njg3OWU2MmJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb2xvckNob29zZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29sb3JDaG9vc2VyLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBXZWJDb2xvckNob29zZXI6OldlYkNvbG9yQ2hvb3NlcihXZWJQYWdlKiBw
YWdlLCBDb2xvckNob29zZXJDbGllbnQqIGNsaWVudCwgY29ucwogICAgICwgbV9wYWdlKHBhZ2Up
CiB7CiAgICAgbV9wYWdlLT5zZXRBY3RpdmVDb2xvckNob29zZXIodGhpcyk7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTaG93Q29sb3JQaWNrZXIoaW5pdGlhbENvbG9yLCBjbGllbnQtPmVsZW1l
bnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb2xvclBpY2tlcihpbml0aWFsQ29sb3IsIGNsaWVudC0+
ZWxlbWVudFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQog
CiBXZWJDb2xvckNob29zZXI6On5XZWJDb2xvckNob29zZXIoKQpAQCAtNzUsNyArNzUsNyBAQCB2
b2lkIFdlYkNvbG9yQ2hvb3Nlcjo6cmVhdHRhY2hDb2xvckNob29zZXIoY29uc3QgQ29sb3ImIGNv
bG9yKQogICAgIG1fcGFnZS0+c2V0QWN0aXZlQ29sb3JDaG9vc2VyKHRoaXMpOwogCiAgICAgQVNT
RVJUKG1fY29sb3JDaG9vc2VyQ2xpZW50KTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dD
b2xvclBpY2tlcihjb2xvciwgbV9jb2xvckNob29zZXJDbGllbnQtPmVsZW1lbnRSZWN0UmVsYXRp
dmVUb1Jvb3RWaWV3KCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNob3dDb2xvclBpY2tlcihjb2xvciwgbV9jb2xvckNob29zZXJDbGllbnQtPmVsZW1l
bnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9p
ZCBXZWJDb2xvckNob29zZXI6OnNldFNlbGVjdGVkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpA
QCAtODYsNyArODYsNyBAQCB2b2lkIFdlYkNvbG9yQ2hvb3Nlcjo6c2V0U2VsZWN0ZWRDb2xvcihj
b25zdCBDb2xvciYgY29sb3IpCiAgICAgaWYgKG1fcGFnZS0+YWN0aXZlQ29sb3JDaG9vc2VyKCkg
IT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZXRD
b2xvclBpY2tlckNvbG9yKGNvbG9yKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTZXRDb2xvclBpY2tlckNvbG9yKGNvbG9yKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiB9CiAKIHZvaWQgV2ViQ29sb3JDaG9vc2VyOjplbmRDaG9vc2VyKCkKQEAgLTk0LDcgKzk0
LDcgQEAgdm9pZCBXZWJDb2xvckNob29zZXI6OmVuZENob29zZXIoKQogICAgIGlmICghbV9wYWdl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVuZENvbG9yUGlj
a2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RW5k
Q29sb3JQaWNrZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCmluZGV4IDUyNmFjNTczYWViN2Y4OTNmMDk2ZGJi
MzFiYjY5MDE0NTg4MWY0ODYuLjM0YWZiYmFkZmRiNGQ5ODZmNWY3Y2EzZGNkZGE0NzAzZmZlNzky
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBXZWJF
ZGl0b3JDbGllbnQ6OmlzU2VsZWN0VHJhaWxpbmdXaGl0ZXNwYWNlRW5hYmxlZCgpCiAKIGJvb2wg
V2ViRWRpdG9yQ2xpZW50Ojppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpCiB7Ci0g
ICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
OwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQ29udGludW91c1NwZWxsQ2hlY2tp
bmcoKQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmcoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkudGV4dENo
ZWNrZXJTdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZDsKKyAgICByZXR1cm4gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUdyYW1tYXJDaGVja2luZygp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IDYzNGExNGFlMDIzNWViZDZm
NGQ2NTQ4ODJmNWE2OTM3OWEzZDBhNTcuLjk1MTQwOWUzNDY4MWRjYzc5MDI1NmI5NDZjODJhYTZi
YzFmZDVjZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xNDgsNyAr
MTQ4LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUGFyZW50Migp
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRSZW1vdmVGcmFt
ZUZyb21IaWVyYXJjaHkod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90
aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2Vy
RGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJE
YXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShtX2ZyYW1lLT5mcmFtZUlEKCksIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkZXRhY2hlZEZyb21QYXJlbnQzKCkKQEAgLTE5Nyw3ICsxOTcsNyBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShE
b2N1bWVudExvYQogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxBdXRoZW50aWNhdGlvbk1hbmFnZXI+KCktPmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX2ZyYW1lLCBjaGFsbGVuZ2UpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8QXV0aGVudGljYXRpb25NYW5hZ2Vy
PigpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9mcmFtZSwgY2hhbGxlbmdl
KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgLyppZGVu
dGlmaWVyKi8sIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikgICAgCkBAIC0yOTEsNyAr
MjkxLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVu
ZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5
IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2Zy
YW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCB1cmwsIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUo
bV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgdXJsLCBV
c2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpCkBAIC0zMjcsNyArMzI3LDcgQEAg
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhp
blBhZ2UoKQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViRG9jdW1lbnRM
b2FkZXImIGRvY3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigq
bV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwotICAgIHdl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlv
bklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25BbmNob3JOYXZpZ2F0aW9uLCBtX2ZyYW1lLT5j
b3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25BbmNob3JOYXZpZ2F0
aW9uLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhpblBhZ2UoKQpAQCAtMzQzLDcgKzM0Myw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgp
CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJEb2N1bWVudExvYWRlciYg
ZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1l
LT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9y
RnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwg
U2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVB1c2gsIG1fZnJhbWUtPmNvcmVGcmFt
ZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7
CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1l
bnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5u
YXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVB1c2gsIG1f
ZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEo
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0
YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpCkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdlKCkK
IAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBk
b2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUt
PmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JG
cmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUmVwbGFjZSwgbV9mcmFtZS0+Y29yZUZy
YW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpz
aGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkp
KTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1
bWVudE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVy
Lm5hdmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUmVwbGFj
ZSwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2Vy
RGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVz
ZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKQpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkKIAog
ICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBkb2N1
bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUtPmNv
cmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUG9wLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2
aWdhdGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdh
dGlvbklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQb3AsIG1fZnJhbWUt
PmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2ls
bENsb3NlKCkKQEAgLTM4NSw3ICszODUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaFdpbGxDbG9zZSgpCiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkUmVjZWl2ZUljb24oKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6RGlkUmVjZWl2
ZUljb25Gb3JQYWdlVVJMKG1fZnJhbWUtPnVybCgpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSWNv
bkRhdGFiYXNlOjpEaWRSZWNlaXZlSWNvbkZvclBhZ2VVUkwobV9mcmFtZS0+dXJsKCkpLCAwKTsK
IH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lv
bmFsTG9hZCgpCkBAIC00MTMsNyArNDEzLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgU3RyaW5nIHVucmVhY2hhYmxl
VVJMID0gcHJvdmlzaW9uYWxMb2FkZXIudW5yZWFjaGFibGVVUkwoKS5zdHJpbmcoKTsKIAogICAg
IC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFt
ZUlEKCksIHByb3Zpc2lvbmFsTG9hZGVyLm5hdmlnYXRpb25JRCgpLCB1cmwsIHVucmVhY2hhYmxl
VVJMLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5k
bGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+
ZnJhbWVJRCgpLCBwcm92aXNpb25hbExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgdXJsLCB1bnJlYWNo
YWJsZVVSTCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJl
Y3Rpb24mIHRpdGxlKQpAQCAtNDI5LDcgKzQyOSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRp
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRSZWNlaXZlVGl0
bGVGb3JGcmFtZSh3ZWJQYWdlLCB0aXRsZS5zdHJpbmcoKSwgbV9mcmFtZSwgdXNlckRhdGEpOwog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlE
KCksIHRpdGxlLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zv
cm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgdGl0bGUuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgp
KSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUlj
b25zKFdlYkNvcmU6Okljb25UeXBlKQpAQCAtNDUzLDcgKzQ1Myw3IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCiAKICAgICAvLyBOb3RpZnkgdGhl
IFVJUHJvY2Vzcy4KIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIu
bmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkubWltZVR5cGUoKSwgbV9m
cmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5sb2FkVHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIucmVz
cG9uc2UoKS5jZXJ0aWZpY2F0ZUluZm8oKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRDb21taXRMb2FkRm9yRnJh
bWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgZG9j
dW1lbnRMb2FkZXIucmVzcG9uc2UoKS5taW1lVHlwZSgpLCBtX2ZyYW1lSGFzQ3VzdG9tQ29udGVu
dFByb3ZpZGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9mcmFtZS0+Y29yZUZyYW1lKCktPmxv
YWRlcigpLmxvYWRUeXBlKCkpLCBkb2N1bWVudExvYWRlci5yZXNwb25zZSgpLmNlcnRpZmljYXRl
SW5mbygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKICAgICB3ZWJQYWdlLT5kaWRDb21t
aXRMb2FkKG1fZnJhbWUpOwogfQogCkBAIC00ODMsNyArNDgzLDcgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNl
RXJyb3ImIGUKICAgICAgICAgbmF2aWdhdGlvbklEID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRM
b2FkZXIqPihkb2N1bWVudExvYWRlciktPm5hdmlnYXRpb25JRCgpOwogCiAgICAgLy8gTm90aWZ5
IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZp
Z2F0aW9uSUQsIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1P
YmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmlnYXRpb25JRCwgZXJyb3IsIFVzZXJEYXRhKFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0
KCkpLmdldCgpKSkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlm
eSBpdC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9m
cmFtZS0+bG9hZExpc3RlbmVyKCkpCkBAIC01MDMsNyArNTAzLDcgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVy
JiBkb2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZhaWxMb2FkRm9yRnJhbWUobV9mcmFt
ZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgZXJyb3IsIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmFpbExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9h
ZGVyLm5hdmlnYXRpb25JRCgpLCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAK
ICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9hZCBsaXN0ZW5lciwgbm90aWZ5IGl0LgogICAgIGlmIChX
ZWJGcmFtZTo6TG9hZExpc3RlbmVyKiBsb2FkTGlzdGVuZXIgPSBtX2ZyYW1lLT5sb2FkTGlzdGVu
ZXIoKSkKQEAgLTUyNCw3ICs1MjQsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCgpCiAgICAgV2ViRG9jdW1lbnRMb2FkZXImIGRvY3Vt
ZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigqbV9mcmFtZS0+Y29y
ZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwogCiAgICAgLy8gTm90aWZ5IHRo
ZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50
TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlzaERvY3VtZW50TG9hZEZv
ckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCks
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCiAgICAgV2ViRG9jdW1l
bnRMb2FkZXImIGRvY3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXIm
PigqbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwogCiAg
ICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBk
b2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7Cisg
ICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9y
RnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9hZCBs
aXN0ZW5lciwgbm90aWZ5IGl0LgogICAgIGlmIChXZWJGcmFtZTo6TG9hZExpc3RlbmVyKiBsb2Fk
TGlzdGVuZXIgPSBtX2ZyYW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAgLTU3NSw3ICs1NzUsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3Rv
bmVzIG1pbGVzdG9uZXMpCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVt
b3ZpbmcgdGhlIG9sZCBkaWRGaXJzdExheW91dCBBUEkgc2luY2UgdGhpcyBpcyBkb2luZyBkb3Vi
bGUgZHV0eSB3aXRoIHRoZQogICAgICAgICAvLyBuZXcgZGlkTGF5b3V0IEFQSS4KICAgICAgICAg
d2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGaXJzdExheW91dEZvckZy
YW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKLSAgICAgICAgd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdExheW91dEZvckZyYW1lKG1fZnJhbWUtPmZy
YW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1Rv
SGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5m
cmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogCiAjaWYgUExBVEZPUk0oTUFD
KQogICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyBvbiBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXQgd2hlbiBNYWMgU2FmYXJpIGlzIGFibGUgdG8gaGFuZGxlIGl0ICg8cmRhcjovL3Byb2Js
ZW0vMTc1ODAwMjE+KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkTGF5b3V0KExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKIAogICAg
IC8vIFNlbmQgdGhpcyBhZnRlciBEaWRGaXJzdExheW91dC1zcGVjaWZpYyBjYWxscyBzaW5jZSBz
b21lIGNsaWVudHMgZXhwZWN0IHRvIGdldCB0aG9zZSBtZXNzYWdlcyBmaXJzdC4KICAgICB3ZWJQ
YWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZExheW91dCh3ZWJQYWdlLCBtaWxl
c3RvbmVzLCB1c2VyRGF0YSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRMYXlvdXQobWlsZXN0b25lcywgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRMYXlvdXQobWlsZXN0b25l
cywgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAKICAgICBpZiAobWlsZXN0b25lcyAmIERp
ZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCkgewogICAgICAgICBpZiAobV9mcmFtZS0+aXNN
YWluRnJhbWUoKSAmJiAhbV9kaWRDb21wbGV0ZVBhZ2VUcmFuc2l0aW9uICYmICF3ZWJQYWdlLT5j
b3JlUGFnZSgpLT5zZXR0aW5ncygpLnN1cHByZXNzZXNJbmNyZW1lbnRhbFJlbmRlcmluZygpKSB7
CkBAIC02MDQsNyArNjA0LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBvbGQgZGlkRmlyc3RWaXN1YWxseU5vbkVt
cHR5TGF5b3V0Rm9yRnJhbWUgQVBJIHNpbmNlIHRoaXMgaXMgZG9pbmcKICAgICAgICAgLy8gZG91
YmxlIGR1dHkgd2l0aCB0aGUgbmV3IGRpZExheW91dCBBUEkuCiAgICAgICAgIHdlYlBhZ2UtPmlu
amVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwotICAgICAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7Cisg
ICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RWaXN1
YWxseU5vbkVtcHR5TGF5b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKICAgICB9CiB9CiAKQEAgLTY4Niw3ICs2ODYsNyBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvclJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9ucwogICAgIHVuc2lnbmVkIHN5bmNTZW5kRmxhZ3MgPSBJUEM6OkluZm9y
bVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kOwogICAgIGlmIChXZWJQYWdlOjpzeW5jaHJvbm91
c01lc3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAgICAgICAgc3luY1NlbmRGbGFncyB8PSBJ
UEM6OlNwaW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7Ci0gICAgaWYgKCF3ZWJQYWdlLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5
bmMobV9mcmFtZS0+ZnJhbWVJRCgpLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBl
LCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0
aW9uLCBwb2xpY3lBY3Rpb24sIGRvd25sb2FkSUQpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgc3luY1NlbmRGbGFncykpCisgICAgaWYgKCF3ZWJQYWdlLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JSZXNwb25zZVN5bmMobV9mcmFtZS0+
ZnJhbWVJRCgpLCByZXNwb25zZSwgcmVxdWVzdCwgY2FuU2hvd01JTUVUeXBlLCBsaXN0ZW5lcklE
LCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5k
bGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNp
ZGVQb2xpY3lGb3JSZXNwb25zZVN5bmM6OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBwb2xp
Y3lBY3Rpb24sIGRvd25sb2FkSUQpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwg
c3luY1NlbmRGbGFncykpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGNhbGwgdGhpcyBz
eW5jaHJvbm91c2x5IGJlY2F1c2UgQ0ZOZXR3b3JrIGNhbiBvbmx5IGNvbnZlcnQgYSBsb2FkaW5n
IGNvbm5lY3Rpb24gdG8gYSBkb3dubG9hZCBmcm9tIGl0cyBkaWRSZWNlaXZlUmVzcG9uc2UgY2Fs
bGJhY2suCkBAIC03MjEsNyArNzIxLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oY29uc3QgTmF2aWdhdGkKICAgICBu
YXZpZ2F0aW9uQWN0aW9uRGF0YS5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSA9IG5hdmlnYXRpb25B
Y3Rpb24ucHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEu
Y2FuSGFuZGxlUmVxdWVzdCA9IHdlYlBhZ2UtPmNhbkhhbmRsZVJlcXVlc3QocmVxdWVzdCk7CiAK
LSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZv
ck5ld1dpbmRvd0FjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmlnYXRpb25BY3Rpb25EYXRh
LCByZXF1ZXN0LCBmcmFtZU5hbWUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5
Rm9yTmV3V2luZG93QWN0aW9uKG1fZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbkFjdGlvbkRh
dGEsIHJlcXVlc3QsIGZyYW1lTmFtZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0
KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9u
QWN0aW9uLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBwcnBGb3JtU3RhdGUsIEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24pCkBAIC03ODgs
NyArNzg4LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5hdmlnYXQKICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlcio+KGNvcmVGcmFtZS0+bG9hZGVyKCku
ZG9jdW1lbnRMb2FkZXIoKSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBp
ZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci0+
bmF2aWdhdGlvbklEKCksIG5hdmlnYXRpb25BY3Rpb25EYXRhLCBvcmlnaW5hdGluZ0ZyYW1lID8g
b3JpZ2luYXRpbmdGcmFtZS0+ZnJhbWVJRCgpIDogMCwgbmF2aWdhdGlvbkFjdGlvbi5yZXNvdXJj
ZVJlcXVlc3QoKSwgcmVxdWVzdCwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6
UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIG5ld05hdmlnYXRpb25JRCwgcG9saWN5QWN0aW9u
LCBkb3dubG9hZElEKSkpCisgICAgaWYgKCF3ZWJQYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKG1fZnJhbWUtPmZyYW1l
SUQoKSwgZG9jdW1lbnRMb2FkZXItPm5hdmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSwgb3JpZ2luYXRpbmdGcmFtZSA/IG9yaWdpbmF0aW5nRnJhbWUtPmZyYW1lSUQoKSA6IDAsIG5h
dmlnYXRpb25BY3Rpb24ucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QsIGxpc3RlbmVySUQsIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb246OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBuZXdO
YXZpZ2F0aW9uSUQsIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBXZSBjYWxsIHRoaXMgc3luY2hyb25vdXNseSBiZWNhdXNlIFdlYkNvcmUgY2Fu
bm90IGdyYWNlZnVsbHkgaGFuZGxlIGEgZnJhbWUgbG9hZCB3aXRob3V0IGEgc3luY2hyb25vdXMg
bmF2aWdhdGlvbiBwb2xpY3kgcmVwbHkuCkBAIC04MTMsNyArODEzLDcgQEAgdm9pZCBXZWJGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNv
dXJjZUVycm9yJgogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlUG9saWN5Q2xpZW50KCkudW5h
YmxlVG9JbXBsZW1lbnRQb2xpY3kod2ViUGFnZSwgbV9mcmFtZSwgZXJyb3IsIHVzZXJEYXRhKTsK
IAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6VW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kobV9mcmFtZS0+ZnJhbWVJ
RCgpLCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbmFibGVUb0ltcGxlbWVudFBvbGljeShtX2ZyYW1lLT5m
cmFtZUlEKCksIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zv
cm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFN1Ym1pdEV2ZW50KFBhc3NSZWZQ
dHI8Rm9ybVN0YXRlPiBwcnBGb3JtU3RhdGUpCkBAIC04NTMsNyArODUzLDcgQEAgdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4gcHJwRm9ybVMKIAogICAgIHVpbnQ2NF90IGxpc3RlbmVySUQgPSBtX2ZyYW1lLT5zZXRV
cFBvbGljeUxpc3RlbmVyKFdURjo6bW92ZShmdW5jdGlvbikpOwogCi0gICAgd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaWxsU3VibWl0Rm9ybShtX2ZyYW1lLT5mcmFtZUlE
KCksIHNvdXJjZUZyYW1lLT5mcmFtZUlEKCksIHZhbHVlcywgbGlzdGVuZXJJRCwgVXNlckRhdGEo
V2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5n
ZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpXaWxsU3VibWl0Rm9ybShtX2ZyYW1lLT5mcmFtZUlEKCksIHNvdXJjZUZyYW1lLT5mcmFtZUlE
KCksIHZhbHVlcywgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAK
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1
bWVudExvYWRlciopCkBAIC0xMDA5LDcgKzEwMDksNyBAQCBib29sIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpzaG91bGRHb1RvSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pIGNvbnN0CiAgICAg
aWYgKCFzaG91bGRHb1RvQmFja0ZvcndhcmRMaXN0SXRlbSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaWxsR29Ub0Jh
Y2tGb3J3YXJkTGlzdEl0ZW0oaXRlbUlELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxHb1RvQmFja0ZvcndhcmRM
aXN0SXRlbShpdGVtSUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogICAgIHJldHVybiB0
cnVlOwogfQogCkBAIC0xMDIzLDcgKzEwMjMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkKIAogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVu
ZGxlTG9hZGVyQ2xpZW50KCkuZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKHdlYlBh
Z2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKG1fZnJhbWUtPmZy
YW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1Rv
SGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUobV9m
cmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zv
cm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2lu
KiwgY29uc3QgVVJMJikKQEAgLTEwMzYsNyArMTAzNiw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpZFJ1bkluc2VjdXJlQ29udGVudChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFVSTCYp
CiAKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJ1bkluc2Vj
dXJlQ29udGVudEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAotICAgIHdl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUnVuSW5zZWN1cmVDb250ZW50
Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQo
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAg
ICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJ1bkluc2VjdXJlQ29u
dGVudEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkp
KSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZERldGVjdFhTUyhjb25zdCBV
UkwmLCBib29sKQpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlkRGV0ZWN0WFNTKGNvbnN0IFVSTCYsIGJvb2wpCiAKICAgICB3ZWJQYWdlLT5pbmplY3Rl
ZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZERldGVjdFhTU0ZvckZyYW1lKHdlYlBhZ2UsIG1fZnJh
bWUsIHVzZXJEYXRhKTsKIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRGV0ZWN0WFNTRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZERldGVjdFhTU0ZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CiB9CiAKIFJlc291cmNlRXJyb3IgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNl
bGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGll
bnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9s
b2NhdGlvbkNsaWVudC5jcHAKaW5kZXggYzIyMTEwMzgzODQ4YzM2YmY2NDFmNjhmZmE4ZDVmN2I5
YTBhY2UwNS4uY2YxNmJjNjhlYWQyZGY0NTcwZDdjNWM2MmY4Mzc2YWIxMDU5YTQxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2Nh
dGlvbkNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVudC5jcHAKQEAgLTQ0LDIzICs0NCwyMyBAQCBXZWJHZW9s
b2NhdGlvbkNsaWVudDo6fldlYkdlb2xvY2F0aW9uQ2xpZW50KCkKIAogdm9pZCBXZWJHZW9sb2Nh
dGlvbkNsaWVudDo6Z2VvbG9jYXRpb25EZXN0cm95ZWQoKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyPigpLT51bnJlZ2lzdGVyV2Vi
UGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2Vi
R2VvbG9jYXRpb25NYW5hZ2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOwogICAgIGRl
bGV0ZSB0aGlzOwogfQogCiB2b2lkIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpzdGFydFVwZGF0aW5n
KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9u
TWFuYWdlcj4oKS0+cmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnJlZ2lzdGVyV2Vi
UGFnZShtX3BhZ2UpOwogfQogCiB2b2lkIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpzdG9wVXBkYXRp
bmcoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRp
b25NYW5hZ2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyPigpLT51bnJlZ2lz
dGVyV2ViUGFnZShtX3BhZ2UpOwogfQogCiB2b2lkIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpzZXRF
bmFibGVIaWdoQWNjdXJhY3koYm9vbCBlbmFibGVkKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyPigpLT5zZXRFbmFibGVIaWdoQWNj
dXJhY3lGb3JQYWdlKG1fcGFnZSwgZW5hYmxlZCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnNldEVuYWJsZUhpZ2hBY2N1
cmFjeUZvclBhZ2UobV9wYWdlLCBlbmFibGVkKTsKIH0KIAogR2VvbG9jYXRpb25Qb3NpdGlvbiog
V2ViR2VvbG9jYXRpb25DbGllbnQ6Omxhc3RQb3NpdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNh
dGlvbkNsaWVudC5jcHAKaW5kZXggNjJmZjhmYmEyYjViNTJhNDJhNjM2ZjQxODdkNzQzYTMxN2I4
N2E3MC4uNmNlNjVmMjYxNDhhYmZjYzE4MGQ5NWMzNGYyMTE3ZmFmZGUyMzJhYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRp
b25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcApAQCAtNDksMjIgKzQ5LDIyIEBAIFdlYk5vdGlm
aWNhdGlvbkNsaWVudDo6fldlYk5vdGlmaWNhdGlvbkNsaWVudCgpCiAKIGJvb2wgV2ViTm90aWZp
Y2F0aW9uQ2xpZW50OjpzaG93KE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogewotICAgIHJl
dHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFn
ZXI+KCktPnNob3cobm90aWZpY2F0aW9uLCBtX3BhZ2UpOworICAgIHJldHVybiBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPnNob3co
bm90aWZpY2F0aW9uLCBtX3BhZ2UpOwogfQogCiB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6
Y2FuY2VsKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+Y2FuY2VsKG5vdGlm
aWNhdGlvbiwgbV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50
PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmNhbmNlbChub3RpZmljYXRpb24sIG1fcGFnZSk7
CiB9CiAKIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50OjpjbGVhck5vdGlmaWNhdGlvbnMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmNsZWFyTm90aWZpY2F0aW9u
cyhjb250ZXh0LCBtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1l
bnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+Y2xlYXJOb3RpZmljYXRpb25zKGNvbnRleHQs
IG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpub3RpZmljYXRpb25P
YmplY3REZXN0cm95ZWQoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5kaWRE
ZXN0cm95Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmRpZERl
c3Ryb3lOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBtX3BhZ2UpOwogfQogCiB2b2lkIFdlYk5v
dGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uQ29udHJvbGxlckRlc3Ryb3llZCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRm
b3JtU3RyYXRlZ2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKaW5kZXggYjI3OWRkMmM2NmQyMjhjMWRjOTU4
MjRmZGM2MmZlYzI2ZWQzMWVmYy4uNTRlYmU0NDQ2YjIyNmZiZTBiNTczNjc2NzdiZGEzMzJmMTg5
OWI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcApAQCAtMTEwLDkgKzEx
MCw5IEBAIFBsdWdpblN0cmF0ZWd5KiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZVBsdWdp
blN0cmF0ZWd5KCkKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00o
Y29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFy
dHksIGNvbnN0IFVSTCYgdXJsKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAg
aWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYg
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAg
IFN0cmluZyByZXN1bHQ7Ci0gICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Np
b25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAg
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q29va2llc0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJz
dFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNv
b2tpZXNGb3JET006OlJlcGx5KHJlc3VsdCksIDApKQogICAgICAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTEyNCw4ICsxMjQsOCBAQCBT
dHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbgogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldENv
b2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVTdHJp
bmcpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vzczo6
c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zyb21ET00oU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcp
LCAwKTsKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6U2V0Q29va2llc0Zyb21ET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9u
KSwgZmlyc3RQYXJ0eSwgdXJsLCBjb29raWVTdHJpbmcpLCAwKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZgpAQCAtMTM2LDkgKzEzNiw5IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Np
CiBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVS
TCYgdXJsKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYgKFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgIGJvb2wgcmVzdWx0
OwotICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpDb29raWVzRW5hYmxlZChTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24p
LCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkNvb2tpZXNFbmFibGVkOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0Vu
YWJsZWQoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJs
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxl
ZDo6UmVwbHkocmVzdWx0KSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMTUwLDkgKzE1MCw5IEBAIGJvb2wgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0
IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpz
aGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZp
ZWxkVmFsdWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwg
dXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwgMCkpCisgICAgICAgIGlmICghV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiks
IGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQogICAg
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTE2NCw4ICsxNjQsOCBAQCBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBOZXR3b3JrU3RvcmFnZQogYm9vbCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9u
JiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAg
IGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpH
ZXRSYXdDb29raWVzKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFy
dHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3
Q29va2llczo6UmVwbHkocmF3Q29va2llcyksIDApKQorICAgIGlmIChXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKFNl
c3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHko
cmF3Q29va2llcyksIDApKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzcsOCArMTc3LDggQEAgYm9vbCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmRlbGV0ZUNvb2tpZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJv
Y2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKLSAgICAgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25U
cmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIHVybCwgY29va2llTmFtZSksIDApOworICAgIGlm
IChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVD
b29raWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgdXJsLCBjb29raWVOYW1l
KSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTE5Myw4ICsxOTMsOCBA
QCBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VM
b2FkU2NoZWR1bGVyKCkKIHsKICAgICBzdGF0aWMgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBzY2hl
ZHVsZXI7CiAgICAgaWYgKCFzY2hlZHVsZXIpIHsKLSAgICAgICAgaWYgKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICAgICAgc2NoZWR1bGVyID0gJldl
YlByb2Nlc3M6OnNoYXJlZCgpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgICAgICBp
ZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCisgICAgICAg
ICAgICBzY2hlZHVsZXIgPSAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNjaGVkdWxlciA9IFdlYkNv
cmU6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgIH0KQEAgLTIwNCw3ICsyMDQsNyBAQCBS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKCkKIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5
bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQsIHVuc2lnbmVkIGxvbmcgcmVz
b3VyY2VMb2FkSWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTdG9y
ZWRDcmVkZW50aWFscyBzdG9yZWRDcmVkZW50aWFscywgQ2xpZW50Q3JlZGVudGlhbFBvbGljeSBj
bGllbnRDcmVkZW50aWFsUG9saWN5LCBSZXNvdXJjZUVycm9yJiBlcnJvciwgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBpZiAoIVdlYlByb2Nl
c3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAgICBMb2FkZXJTdHJh
dGVneTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb250ZXh0LCByZXNvdXJjZUxvYWRJZGVu
dGlmaWVyLCByZXF1ZXN0LCBzdG9yZWRDcmVkZW50aWFscywgY2xpZW50Q3JlZGVudGlhbFBvbGlj
eSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIz
MCw3ICsyMzAsNyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dAogCiAgICAgZGF0YS5yZXNpemUo
MCk7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCkt
PmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpS
ZXBseShlcnJvciwgcmVzcG9uc2UsIGRhdGEpLCAwKSkgeworICAgIGlmICghV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91
c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVycm9yLCByZXNwb25zZSwgZGF0
YSksIDApKSB7CiAgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwogICAgICAg
ICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7CiAgICAgfQpAQCAtMjM4LDcg
KzIzOCw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJv
bm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0CiAKIEJsb2JSZWdpc3RyeSogV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkoKQogewotICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAgcmV0dXJuIExvYWRl
clN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVnaXN0cnkoKTsKICAgICByZXR1cm4gbmV3IEJsb2JSZWdp
c3RyeVByb3h5OyAgICAKIH0KQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6cG9wdWxhdGVQbHVnaW5DYWNoZSgpCiAgICAgQVNTRVJUKG1fY2FjaGVkUGx1Z2lu
cy5pc0VtcHR5KCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgZG8gc29tZXRoaW5n
IGluIGNhc2Ugb2YgZXJyb3IgaGVyZT8KLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldFBsdWdpbnMobV9zaG91bGRSZWZyZXNoUGx1Z2lucyksIE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldFBsdWdpbnM6OlJlcGx5KG1fY2FjaGVkUGx1Z2lucywgbV9jYWNoZWRBcHBs
aWNhdGlvblBsdWdpbnMpLCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldFBsdWdpbnMobV9zaG91bGRSZWZyZXNoUGx1Z2lucyksIE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldFBsdWdpbnM6OlJlcGx5KG1fY2FjaGVkUGx1Z2lucywgbV9jYWNoZWRBcHBs
aWNhdGlvblBsdWdpbnMpLCAwKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9zaG91bGRSZWZy
ZXNoUGx1Z2lucyA9IGZhbHNlOwpAQCAtMzAxLDcgKzMwMSw3IEBAIHZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNvbnN0IFN0cmluZyYg
cGFzdGViCiAgICAgaWYgKCF0eXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJv
YXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRUeXBl
czo6UmVwbHkodHlwZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwgMCk7CiB9CiAKIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1
ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKQEAgLTMxNCw3ICszMTQsNyBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0
cgogICAgIC8vIEZhbGxiYWNrIHRvIG1lc3NhZ2luZyB0aGUgVUkgcHJvY2VzcyBmb3IgbmF0aXZl
IHBhc3RlYm9hcmQgY29udGVudC4KICAgICBTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGU7CiAg
ICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5
cGU6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRC
dWZmZXJGb3JUeXBlOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKICAgICBpZiAoaGFuZGxlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFy
ZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUsIFNoYXJlZE1lbW9y
eTo6UmVhZE9ubHkpOwpAQCAtMzIzLDYyICszMjMsNjIgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVmZmVyRm9yVHlwZShjb25zdCBT
dHIKIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1lc0ZvclR5cGUoVmVj
dG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFz
dGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJk
UGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUocGFzdGVi
b2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KHBhdGhuYW1lcyksIDApOwogfQog
CiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBlKGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAg
U3RyaW5nIHZhbHVlOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3Rl
Ym9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBs
eSh2YWx1ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpS
ZXBseSh2YWx1ZSksIDApOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAogbG9uZyBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2FyZCwgY29uc3QgU3Ry
aW5nJiB0b1Bhc3RlYm9hcmQpCiB7CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZENvcHkoZnJvbVBhc3RlYm9h
cmQsIHRvUGFzdGVib2FyZCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9h
cmRDb3B5OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRDb3B5KGZyb21QYXN0ZWJvYXJkLCB0b1Bhc3RlYm9h
cmQpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQ29weTo6UmVwbHko
bmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKIGxv
bmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudChjb25zdCBXVEY6OlN0cmluZyAm
cGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgY2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KHBhc3RlYm9h
cmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5n
ZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChwYXN0ZWJvYXJkTmFtZSksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVw
bHkoY2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gY2hhbmdlQ291bnQ7CiB9CiAKIFN0cmlu
ZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVuaXF1ZU5hbWUoKQogewogICAgIFN0cmluZyBwYXN0
ZWJvYXJkTmFtZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkVW5pcXVlTmFtZSgpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkVW5pcXVlTmFtZTo6UmVwbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZSgpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZTo6UmVwbHkocGFz
dGVib2FyZE5hbWUpLCAwKTsKICAgICByZXR1cm4gcGFzdGVib2FyZE5hbWU7CiB9CiAKIENvbG9y
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29sb3IoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFt
ZSkKIHsKICAgICBDb2xvciBjb2xvcjsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkQ29sb3IocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3I6OlJlcGx5KGNvbG9yKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9yKHBhc3RlYm9h
cmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9y
OjpSZXBseShjb2xvciksIDApOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAogVVJMIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6dXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAg
U3RyaW5nIHVybFN0cmluZzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkVVJMKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94
eTo6R2V0UGFzdGVib2FyZFVSTDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTChwYXN0ZWJvYXJkTmFtZSks
IE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVUkw6OlJlcGx5KHVy
bFN0cmluZyksIDApOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcp
OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMoY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVi
b2FyZFByb3h5OjpBZGRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRU
eXBlcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkFkZFBhc3RlYm9hcmRUeXBlczo6
UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpBZGRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
cyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkFkZFBhc3RlYm9hcmRUeXBlczo6UmVw
bHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAK
IGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAg
IHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShu
ZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdD
aGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIApAQCAtMzk1
LDQ0ICszOTUsNDQgQEAgbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldEJ1ZmZlckZvclR5
cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY28KICAgICAgICAgfQogICAgIH0K
ICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVi
b2FyZFR5cGUsIGhhbmRsZSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwKSwgTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5l
d0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
LCBoYW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCksIE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VD
b3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9uZyBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShw
YXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksIE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShuZXdD
aGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNl
dFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlw
ZSwgcGF0aG5hbWVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2Fy
ZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJu
IG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0U3Ry
aW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdD
aGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJv
YXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHN0cmluZyks
IE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBl
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSwgc3RyaW5nKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFz
dGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0
dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQogdm9pZCBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNvcmU6OlBhc3RlYm9h
cmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRlbnQpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb250ZW50KSwg
MCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChj
b25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIGltYWdlKQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSksIDApOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSks
IDApOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQo
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVTdHJpbmdUb1Bhc3RlYm9hcmQocGFzdGVi
b2FyZFR5cGUsIHRleHQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6Oldy
aXRlU3RyaW5nVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KSwgMCk7CiB9CiAKIGlu
dCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCkKIHsKICAg
ICB1aW50NjRfdCBpdGVtc0NvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50OjpSZXBseShpdGVtc0NvdW50KSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQ6OlJl
cGx5KGl0ZW1zQ291bnQpLCAwKTsKICAgICByZXR1cm4gaXRlbXNDb3VudDsKIH0KIApAQCAtNDQw
LDcgKzQ0MCw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyCiB7CiAgICAgU2hhcmVkTWVtb3J5
OjpIYW5kbGUgaGFuZGxlOwogICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVi
b2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVmZmVyRnJvbVBh
c3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2Fy
ZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVmZmVyRnJvbVBhc3Rl
Ym9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOwogICAgIGlmIChoYW5kbGUuaXNOdWxsKCkp
CiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9y
eUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFk
T25seSk7CkBAIC00NTAsMjEgKzQ1MCwyMSBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1
ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9hcgogV2Vi
Q29yZTo6VVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFVSTEZyb21QYXN0ZWJvYXJkKGlu
dCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsKICAgICBTdHJpbmcgdXJs
U3RyaW5nOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRVUkxGcm9tUGFz
dGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRVUkxGcm9tUGFzdGVib2FyZChpbmRl
eCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkVVJM
RnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOwogICAgIHJldHVybiBVUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVn
aWVzOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmRUeXBlKQogewogICAgIFN0cmluZyB2YWx1ZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRU
eXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkOjpSZXBseSh2YWx1ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQ6OlJlcGx5
KHZhbHVlKSwgMCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3Ry
YXRlZ2llczo6Y2hhbmdlQ291bnQoKQogewogICAgIHVpbnQ2NF90IGNoYW5nZUNvdW50OwotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChT
dHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFu
Z2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nKCkpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNo
YW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIGNoYW5nZUNvdW50OwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdJbkNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdJ
bkNsaWVudC5jcHAKaW5kZXggNjE0MWVlZmMyMWUwNDg5MThkYTBjYWFmODY3M2U1MGJkMmNhMDdm
OC4uMGZmNWZjMmM3NTBiZTQwNWMzNWJhNzVmOWRiY2I1ODMxMjNmNTNlYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbHVnSW5DbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1
Z0luQ2xpZW50LmNwcApAQCAtNTAsMTIgKzUwLDEyIEBAIHZvaWQgV2ViUGx1Z0luQ2xpZW50Ojpw
YWdlRGVzdHJveWVkKCkKIAogYm9vbCBXZWJQbHVnSW5DbGllbnQ6OnNob3VsZEF1dG9TdGFydEZy
b21PcmlnaW4oY29uc3QgU3RyaW5nJiBwYWdlT3JpZ2luLCBjb25zdCBTdHJpbmcmIHBsdWdpbk9y
aWdpbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6
c2hhcmVkKCkuc2hvdWxkUGx1Z0luQXV0b1N0YXJ0RnJvbU9yaWdpbihtX3dlYlBhZ2UsIHBhZ2VP
cmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUpOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5zaG91bGRQbHVnSW5BdXRvU3RhcnRGcm9tT3JpZ2luKG1fd2ViUGFnZSwgcGFn
ZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSk7CiB9CiAKIHZvaWQgV2ViUGx1Z0luQ2xp
ZW50OjpkaWRTdGFydEZyb21PcmlnaW4oY29uc3QgU3RyaW5nJiBwYWdlT3JpZ2luLCBjb25zdCBT
dHJpbmcmIHBsdWdpbk9yaWdpbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgV2ViQ29yZTo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wbHVnSW5EaWRT
dGFydEZyb21PcmlnaW4ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgc2Vzc2lv
bklEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wbHVnSW5EaWRTdGFydEZyb21Pcmln
aW4ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgc2Vzc2lvbklEKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKaW5kZXggYjYyZDhkMjQ5ZjEy
MDkzMDJmZTQwNWZhMTdlYmY0YzRiZmEzN2RiOC4uYzhlZjliZDFiMDBkZTA4NjBlMmUxNmUwMzlm
OWUwNDZlMjVjYjIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIHZv
aWQgV2ViUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZyYW1lVmlldyogdmll
dywgaW50IGluZGV4KQogICAgIFBsYXRmb3JtUG9wdXBNZW51RGF0YSBwbGF0Zm9ybURhdGE7CiAg
ICAgc2V0VXBQbGF0Zm9ybURhdGEocGFnZUNvb3JkaW5hdGVzLCBwbGF0Zm9ybURhdGEpOwogCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UG9wdXBNZW51KHBhZ2VDb29yZGluYXRlcywgbV9w
b3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpLCBpdGVtcywgaW5kZXgsIHBs
YXRmb3JtRGF0YSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd1BvcHVwTWVudShwYWdlQ29vcmRpbmF0ZXMsIG1fcG9wdXBDbGllbnQtPm1lbnVTdHls
ZSgpLnRleHREaXJlY3Rpb24oKSwgaXRlbXMsIGluZGV4LCBwbGF0Zm9ybURhdGEpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnU6OmhpZGUoKQpAQCAtMTIwLDcgKzEy
MCw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpoaWRlKCkKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9w
b3B1cENsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpI
aWRlUG9wdXBNZW51KCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6SGlkZVBvcHVwTWVudSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAgICBtX3BhZ2UtPnNl
dEFjdGl2ZVBvcHVwTWVudSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuY3BwCmlu
ZGV4IDFmOGY4YjMwNDhmZWRkOTFkZDdkOWUyZGRjOTJlMzNjZmRhNmQyNjAuLjAyNTg0NmVjMTdm
YjZhYzJkNDBhNDlmY2JkNTQ2MGE0OTRkMmU5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU2VhcmNoUG9wdXBNZW51LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVu
dS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBXZWJTZWFyY2hQb3B1cE1lbnU6OnNhdmVSZWNl
bnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZlY3QKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVJl
Y2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKSwgcGFnZS0+cGFnZUlEKCkpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1z
KSwgcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYlNlYXJjaFBvcHVwTWVudTo6bG9hZFJl
Y2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0cmluZz4mIHJl
c3VsdEl0ZW1zKQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYlNlYXJjaFBvcHVwTWVudTo6bG9h
ZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9yPFN0cgogICAg
IGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6TG9hZFJlY2VudFNlYXJjaGVzKG5hbWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2Fk
UmVjZW50U2VhcmNoZXM6OlJlcGx5KHJlc3VsdEl0ZW1zKSwgcGFnZS0+cGFnZUlEKCkpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lKSwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFJlY2VudFNlYXJjaGVzOjpSZXBseShyZXN1bHRJdGVt
cyksIHBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogYm9vbCBXZWJTZWFyY2hQb3B1cE1lbnU6OmVuYWJs
ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJWaWJyYXRpb25DbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJWaWJyYXRpb25DbGllbnQuY3BwCmluZGV4IGU0MWRlZDI4NTgwNTA0NjU1
Mzc3ZjA0YjFkZjc1ODQ1MDNiNWY2OTkuLmVlYWM2ZWNlZDJkY2Y1NjlmMmQxYmYxYmNhOTBhYzIz
YjhlZjViMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlicmF0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5jcHAKQEAgLTM4LDEyICszOCwx
MiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJWaWJyYXRpb25DbGllbnQ6OnZpYnJh
dGUoY29uc3QgdW5zaWduZWQmIHZpYnJhdGlvblRpbWUpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVmlicmF0
aW9uUHJveHk6OlZpYnJhdGUodmlicmF0aW9uVGltZSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYlZpYnJhdGlvblByb3h5OjpWaWJyYXRlKHZpYnJhdGlvblRpbWUpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJWaWJyYXRpb25DbGllbnQ6OmNhbmNlbFZpYnJh
dGlvbigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViVmlicmF0aW9uUHJveHk6OkNhbmNlbFZpYnJhdGlvbigp
LCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWJyYXRpb25Qcm94eTo6Q2Fu
Y2VsVmlicmF0aW9uKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYlZpYnJhdGlv
bkNsaWVudDo6dmlicmF0aW9uRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGll
bnRHdGsuY3BwCmluZGV4IGJjYTgzZTk5YzE2ZDE0OWQzOWJjMjhkY2EyNzUxYjU5NjNlNWI1M2Qu
Ljc2OWQ3OGM2ZDQyMzVhMTJjNTU1OGUxZTAzNDlhZWE4OWQ1MjFjOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVu
dEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBLZXlib2FyZEV2ZW50
KiBldmVudCwgVgogCiAgICAgLyogRmlyc3QgdHJ5IHRvIGludGVycHJldCB0aGUgY29tbWFuZCBp
biB0aGUgVUkgYW5kIGdldCB0aGUgY29tbWFuZHMuCiAgICAgICAgVUkgbmVlZHMgdG8gcmVjZWl2
ZSBldmVudCB0eXBlIGJlY2F1c2Ugb25seSBrbm93cyBjdXJyZW50IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQuKi8KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRFZGl0b3JDb21tYW5kc0Zv
cktleUV2ZW50KGV2ZW50LT50eXBlKCkpLAorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoZXZlbnQtPnR5cGUoKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50OjpSZXBseShwZW5kaW5nRWRpdG9yQ29t
bWFuZHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCkpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3Mv
V2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvaW9zL1dlYlF1aWNrTG9va0hhbmRsZUNsaWVudC5jcHAKaW5kZXggYzNh
NzI3NDViMzhkMTdjYzY1NDEwOTdiMDUxYjVkMDFlNmFlODM2Yy4uMTdiOTg5ZjJhMzliYTExMjEy
YTg2OTNlOWRjNTg1OTc5M2E3NzUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJRdWlja0xv
b2tIYW5kbGVDbGllbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIFdlYlF1aWNrTG9va0hhbmRsZUNs
aWVudDo6V2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50KGNvbnN0IFdlYkNvcmU6OlF1aWNrTG9va0hh
bmRsCiAgICAgLCBtX3V0aShoYW5kbGUucHJldmlld1VUSSgpKQogICAgICwgbV9wYWdlSUQocGFn
ZUlEKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShtX2ZpbGVO
YW1lLCBtX3V0aSksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3VtZW50
SW5NYWluRnJhbWUobV9maWxlTmFtZSwgbV91dGkpLCBtX3BhZ2VJRCk7CiB9CiAKIHZvaWQgV2Vi
UXVpY2tMb29rSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgZGF0
YUFycmF5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIFdlYlF1aWNrTG9va0hhbmRsZUNsaWVudDo6
ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKIAogdm9pZCBXZWJRdWlj
a0xvb2tIYW5kbGVDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoKQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoTG9hZEZvclF1
aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUobV9kYXRhKSwgbV9wYWdlSUQpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNo
TG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUobV9kYXRhKSwgbV9wYWdlSUQpOwog
ICAgIG1fZGF0YS5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMu
bW0KaW5kZXggNDlkNTliZTNiYzM1NDg5ZmU5MjNlMDZhYzZmYTQ5ZTk4ZmRhMDQ1Yi4uYzA2OWUw
ODVkNGQ2Mjk3MGI0NWYwZWY0YmU2NmZkMWQ2NDA1ODJhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVk
aXRvckNsaWVudE1hYy5tbQpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0b2dnbGVTbWFydEluc2VydERlbGV0ZSgpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0F1
dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZDsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNr
ZXJTdGF0ZSgpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkOwogfQogCiB2b2lk
IFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb24oKQpAQCAt
MTk2LDcgKzE5Niw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNRdW90
ZVN1YnN0aXR1dGlvbigpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0F1dG9tYXRpY0xpbmtE
ZXRlY3Rpb25FbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkudGV4
dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQ7CisgICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRp
Y0xpbmtEZXRlY3Rpb25FbmFibGVkOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xl
QXV0b21hdGljTGlua0RldGVjdGlvbigpCkBAIC0yMDcsNyArMjA3LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKQogCiBib29sIFdlYkVkaXRv
ckNsaWVudDo6aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb25FbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDsK
IH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY0Rhc2hTdWJzdGl0dXRp
b24oKQpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRv
bWF0aWNEYXNoU3Vic3RpdHV0aW9uKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21h
dGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJs
ZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUo
KS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7CiB9CiAKIHZvaWQgV2ViRWRpdG9y
Q2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQpAQCAtMjI5LDcgKzIyOSw3
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQo
KQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25F
bmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkudGV4dENoZWNrZXJT
dGF0ZSgpLmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKKyAgICByZXR1cm4g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljU3Bl
bGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2ds
ZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJh
bWVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBiMDI3Mjk0YjZjYzlmNGUxZTU4OWZmMDA0NDg3
MTk1NDJjZDBmNzIyLi43ZmU0OWY1NTJiMTFkYjUzN2YzMmI1NjNjYjM0YTU1ZTU5MmZhN2IxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9X
ZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTg4
LDcgKzg4LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4
dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb24KIHsKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgYXVkaXRfdG9rZW5fdCBhdWRpdFRva2VuOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tlbihhdWRpdFRva2Vu
KSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCAoY29uc3QgVUludDgqKSZhdWRp
dFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRleCBlNmNlZDllMjM1MjFl
Y2I5OGQyN2FjZmYzMDJiN2Q2NzkyNjRmZDVlLi4xMmEzNjQ0NzQyODQxMzQ4OWRlMmRkYTRmMWJi
OThjZTc3OTUyNDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5jcHAKQEAgLTgxLDEyICs4MSwxMiBAQCBEcmF3aW5nQXJlYTo6RHJhd2lu
Z0FyZWEoRHJhd2luZ0FyZWFUeXBlIHR5cGUsIFdlYlBhZ2UmIHdlYlBhZ2UpCiAgICAgLCBtX25h
dGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygwKQogI2VuZGlmCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0aGlzKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdp
bmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSwgKnRoaXMp
OwogfQogCiBEcmF3aW5nQXJlYTo6fkRyYXdpbmdBcmVhKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOwogfQogCiB2b2lkIERy
YXdpbmdBcmVhOjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVkU2Nyb2xsUG9zaXRpb24oc3Rk
OjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXggYjc5MmExMTQwM2Q2
ODlmYWViNjQ2MGNhMjUzYWVmNDk3ZmExOTJjNy4uNzFjMzNmNDgyZWJlMWY2NWY2YTY1ZmFmYTBh
MDUwMDVhNzdhNzFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTIwNSw3ICsyMDUsNyBAQCB2b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50cygpCiAgICAgfQogCiAgICAgZm9yIChhdXRv
JiBzbG90IDogbG9jYWxDb3B5KSB7Ci0gICAgICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShzbG90LmtleSkpCisgICAgICAgIGlmIChXZWJQYWdl
KiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShzbG90LmtleSkpCiAg
ICAgICAgICAgICB3ZWJQYWdlLT5kaXNwYXRjaEFzeW5jaHJvbm91c1RvdWNoRXZlbnRzKHNsb3Qu
dmFsdWUpOwogICAgIH0KIH0KQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVu
dCYgdwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAgICBXZWJQYWdlKiB3
ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShwYWdlSUQpOworICAgIFdlYlBh
Z2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCk7CiAg
ICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNSw3ICsyMjUsNyBAQCB2
b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwg
Y29uc3QgV2ViV2hlZWxFdmVudCYgdwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiB2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6c2VuZERpZFJlY2VpdmVFdmVudCh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFdlYkV2ZW50JiBldmVudCwgYm9vbCBkaWRIYW5kbGVFdmVudCkKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2FzdDx1aW50MzJfdD4oZXZlbnQu
dHlwZSgpKSwgZGlkSGFuZGxlRXZlbnQpLCBwYWdlSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90PihldmVudC50eXBlKCkp
LCBkaWRIYW5kbGVFdmVudCksIHBhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0
b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3IuY3BwCmluZGV4IDgwY2RlNjJjODk5M2U5NjU2YzBjMzBmYzQ0OTc0YmIz
MzU3N2EzYzQuLmRmNzAxM2QyZmY2ZjFjMDQ2YjIzN2NmM2UxYmU4NzE0Yzc2NTU3YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKQEAgLTU3LDEyICs1NywxMiBAQCBWaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yKFdl
YlBhZ2UmIHdlYlBhZ2UpCiAgICAgLCBtX3JlbmRlclRyZWVTaXplTm90aWZpY2F0aW9uVGltZXIo
UnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6cmVu
ZGVyVHJlZVNpemVOb3RpZmljYXRpb25UaW1lckZpcmVkKQogI2VuZGlmCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQo
KSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0aGlzKTsKIH0KIAogVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvcjo6flZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IoKQogewotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dl
c3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2Uu
cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOwogfQogCiB2b2lkIFZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3I6OmRpc3BhdGNoRGlkQ29sbGVjdEdlb21ldHJ5Rm9yU21hcnRNYWduaWZp
Y2F0aW9uR2VzdHVyZShGbG9hdFBvaW50IG9yaWdpbiwgRmxvYXRSZWN0IHRhcmdldFJlY3QsIEZs
b2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJs
ZSB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNw
YXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRl
RGlzcGF0Y2hlci5jcHAKaW5kZXggOWE0MDc3OWQ1ODBmMWNhMzEyYTU2MWRiNjVkYTkyNjI1YmNk
MGVmZi4uYzk4NzA0MzMzZTY4MDUwMjU4MmZlMDgxZWVhYzJlNzA2MDQ2ZWQwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURp
c3BhdGNoZXIuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6
OmRpc3BhdGNoVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKCkKICAgICB9CiAKICAgICBmb3IgKGF1
dG8mIHNsb3QgOiB1cGRhdGUpIHsKLSAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHNsb3Qua2V5KSkKKyAgICAgICAgaWYgKFdlYlBhZ2Uq
IHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHNsb3Qua2V5KSkKICAg
ICAgICAgICAgIHdlYlBhZ2UtPnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMoc2xvdC52YWx1ZS52
aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLCBzbG90LnZhbHVlLm9sZGVzdFRpbWVzdGFtcCk7
CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKaW5kZXggYmExODcxZmI0
MDA0YjcwMzUwMTY5YzYxNWI4ZTVkNjY1YzcwYzA3YS4uZDM1OWIxOWUwODIxYjQ1MzE2NDAxNzJk
OGZhYTk1NWJjYjRlYzg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCkBAIC01
OSwxNCArNTksMTQgQEAgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHUKIFZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcih1aW50NjRfdCBpZGVudGlmaWVy
KQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIsICp0aGlzKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmll
ciwgKnRoaXMpOwogfQogCiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6flZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyKCkKIHsKICAgICBBU1NFUlQodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXJzKCkuY29udGFpbnMobV9pZGVudGlmaWVyKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIpOwog
CiAgICAgdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJzKCkucmVtb3ZlKG1faWRlbnRpZmllcik7
CiB9CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmFk
ZFZpc2l0ZWRMaW5rKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtIYXNoKQogICAgIGlmICghd2Vi
UGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VmlzaXRlZExpbmtQcm92aWRlcjo6
QWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2Uod2ViUGFnZS0+cGFnZUlEKCksIGxpbmtIYXNoKSwg
bV9pZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1Byb3ZpZGVyOjpBZGRWaXNp
dGVkTGlua0hhc2hGcm9tUGFnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgbGlua0hhc2gpLCBtX2lkZW50
aWZpZXIpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpzZXRWaXNpdGVk
TGlua1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUpCkBAIC05NywyMCAr
OTcsMjAgQEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6c2V0VmlzaXRlZExpbmtU
YWJsZShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYKICAgICBtX3Zpc2l0ZWRMaW5rVGFibGUu
c2V0U2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeS5yZWxlYXNlKCkpOwogCiAgICAgaW52YWxpZGF0
ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNG
b3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5t
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNvbnN0IFZlY3RvcjxX
ZWJDb3JlOjpMaW5rSGFzaD4mIGxpbmtIYXNoZXMpCiB7CiAgICAgZm9yIChhdXRvIGxpbmtIYXNo
IDogbGlua0hhc2hlcykKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsobGlua0hhc2gp
OwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExp
bmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjph
bGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckFs
bExpbmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlu
a1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JW
aXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBW
aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKICAgICBt
X3Zpc2l0ZWRMaW5rVGFibGUuY2xlYXIoKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JBbGxM
aW5rcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtT
dHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlz
aXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwCmluZGV4IDc1ZTI3YmE1MTBhMmQ0YTQzNjUxOTEyNDk1MDdjYzI0
MTA2NTIxMGUuLmE5YzY3NzkwNTZiOTJkNjBkNDk0YjUxNTg5ZjM0ZDUzMTQ1ODhjZjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lkIFdlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVt
SUQpCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBpdGVtSUQs
IHVpbnQ2NF90IHBhZ2VJRCwgSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Byb3h5OjpBZGRCYWNrRm9yd2FyZEl0ZW0oaXRlbUlELCBwYWdlSUQsIHRvUGFnZVN0YXRl
KCppdGVtKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6QWRkQmFja0Zvcndh
cmRJdGVtKGl0ZW1JRCwgcGFnZUlELCB0b1BhZ2VTdGF0ZSgqaXRlbSkpLCAwKTsKIH0KIAogdm9p
ZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3ModWludDY0X3Qg
aXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBwcnBJdGVtLCB1aW50NjRf
dCBwYWdlSUQpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6cmVtb3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAgaWYgKCFpdGVtKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsK
KyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgV2ViQ29yZTo6
UGFnZTo6Y2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoaXRlbS5nZXQoKSk7CiAgICAgaGlz
dG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0ZW0pOwogfQpAQCAtMTgxLDcgKzE4MSw3IEBAIEhp
c3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbUF0SW5kZXgoaW50IGl0ZW1J
bmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICB1aW50NjRfdCBpdGVtSUQgPSAwOwotICAg
IGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleChpdGVt
SW5kZXgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OjpS
ZXBseShpdGVtSUQpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwgbV9w
YWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFpdGVtSUQpCkBA
IC0xOTYsNyArMTk2LDcgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpiYWNrTGlzdENv
dW50KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYmFja0xpc3RDb3VudCA9IDA7Ci0g
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQo
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50OjpSZXBs
eShiYWNrTGlzdENvdW50KSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSwgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50OjpSZXBseShiYWNrTGlzdENvdW50
KSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGJh
Y2tMaXN0Q291bnQ7CkBAIC0yMDgsNyArMjA4LDcgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5Ojpmb3J3YXJkTGlzdENvdW50KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgZm9y
d2FyZExpc3RDb3VudCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNr
Rm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0Zv
cndhcmRGb3J3YXJkTGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50KSwgbV9wYWdlLT5w
YWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2Fy
ZEZvcndhcmRMaXN0Q291bnQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRG
b3J3YXJkTGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50KSwgbV9wYWdlLT5wYWdlSUQo
KSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGZvcndhcmRMaXN0Q291bnQ7CkBA
IC0yMTgsNyArMjE4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Y2xvc2UoKQog
ewogICAgIGZvciAoYXV0byYgaXRlbUlEIDogbV9hc3NvY2lhdGVkSXRlbUlEcykgewogICAgICAg
ICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBpdGVtRm9ySUQoaXRlbUlEKSkKLSAgICAgICAgICAg
IFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAgICAgICAg
IFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICB9CiAK
ICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAppbmRleCA1ODFlYzI2NzM2
MmRmNGU4ZDUxOTI4ODQxMWQyNjZlYWYwODEwYzc3Li5lMDk3MmI1M2I2NGMzZTFiODY0N2Y0MTJl
NjAwNTAwOTc5MTFhYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBXZWJDb250
ZXh0TWVudTo6c2hvdygpCiAKICAgICAvLyBNYXJrIHRoZSBXZWJQYWdlIGhhcyBoYXZpbmcgYSBz
aG93biBjb250ZXh0IG1lbnUgdGhlbiBub3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBtX3BhZ2Ut
PmNvbnRleHRNZW51U2hvd2luZygpOwotICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVy
LmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpLCBjb250ZXh0
TWVudUNvbnRleHREYXRhLCBtZW51SXRlbXMsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmll
dy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVyLmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9p
bnRJbklubmVyTm9kZUZyYW1lKCkpLCBjb250ZXh0TWVudUNvbnRleHREYXRhLCBtZW51SXRlbXMs
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNvbnRleHRNZW51Ojpp
dGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRlbSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IGIwNTQ2MGE5
ODM3MTY4MTM5ZThiNTk3ZmNmMjIwZjVmNGU5NjdlOWEuLjNmZjAwNTc1NjliZDRiZTA4NWIyYjFm
YzE4NWE4Y2EyMTE1MDM3YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIFdlYkZyYW1lOjpXZWJGcmFtZShz
dGQ6OnVuaXF1ZV9wdHI8V2ViRnJhbWVMb2FkZXJDbGllbnQ+IGZyYW1lTG9hZGVyQ2xpZW50KQog
ICAgICwgbV9mcmFtZUlEKGdlbmVyYXRlRnJhbWVJRCgpKQogewogICAgIG1fZnJhbWVMb2FkZXJD
bGllbnQtPnNldFdlYkZyYW1lKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZFdl
YkZyYW1lKG1fZnJhbWVJRCwgdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRk
V2ViRnJhbWUobV9mcmFtZUlELCB0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICB3ZWJGcmFt
ZUNvdW50ZXIuaW5jcmVtZW50KCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgV2ViRnJhbWUqIFdlYkZy
YW1lOjpmcm9tQ29yZUZyYW1lKEZyYW1lJiBmcmFtZSkKIAogdm9pZCBXZWJGcmFtZTo6aW52YWxp
ZGF0ZSgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlV2ViRnJhbWUobV9mcmFt
ZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVXZWJGcmFtZShtX2ZyYW1l
SUQpOwogICAgIG1fY29yZUZyYW1lID0gMDsKIH0KIApAQCAtMjUxLDEzICsyNTEsMTMgQEAgdm9p
ZCBXZWJGcmFtZTo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiAgICAgbV9wb2xpY3lEb3dubG9hZElEID0gMDsKIAogI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlN0YXJ0RG93bmxvYWQocGFnZSgpLT5zZXNzaW9uSUQoKSwgcG9saWN5RG93bmxvYWRJ
RCwgcmVxdWVzdCksIDApOworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0
d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpTdGFydERvd25sb2FkKHBhZ2UoKS0+c2Vzc2lvbklEKCksIHBvbGlj
eURvd25sb2FkSUQsIHJlcXVlc3QpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZgogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3du
bG9hZChwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHBvbGljeURvd25sb2FkSUQsIHJl
cXVlc3QpOwogfQogCiB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93
bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMjcwLDcg
KzI3MCw3IEBAIHZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9h
ZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsCiAgICAgUmVzb3VyY2VMb2FkZXIqIG1h
aW5SZXNvdXJjZUxvYWRlciA9IGRvY3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VMb2FkZXIoKTsK
IAogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgIC8vIFVzZSAwIHRvIGluZGljYXRl
IHRoYXQgdGhlcmUgaXMgbm8gbWFpbiByZXNvdXJjZSBsb2FkZXIuCiAgICAgICAgIC8vIFRoaXMg
Y2FuIGhhcHBlbiBpZiB0aGUgbWFpbiByZXNvdXJjZSBpcyBpbiB0aGUgV2ViQ29yZSBtZW1vcnkg
Y2FjaGUuCiAgICAgICAgIHVpbnQ2NF90IG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyOwpAQCAt
Mjc5LDE4ICsyNzksMTggQEAgdm9pZCBXZWJGcmFtZTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIgPSAwOwogCi0gICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvbnZlcnRNYWluUmVz
b3VyY2VMb2FkVG9Eb3dubG9hZChtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcG9saWN5RG93
bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNvdXJjZUxvYWRU
b0Rvd25sb2FkKG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBwb2xpY3lEb3dubG9hZElELCBy
ZXF1ZXN0LCByZXNwb25zZSksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAK
ICAgICBpZiAoIW1haW5SZXNvdXJjZUxvYWRlcikgewogICAgICAgICAvLyBUaGUgbWFpbiByZXNv
dXJjZSBoYXMgYWxyZWFkeSBiZWVuIGxvYWRlZC4gU3RhcnQgYSBuZXcgZG93bmxvYWQgaW5zdGVh
ZC4KLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnRE
b3dubG9hZChwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KTsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9hZChwb2xpY3lEb3dubG9h
ZElELCByZXF1ZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKHBvbGlj
eURvd25sb2FkSUQsIGRvY3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxl
KCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3du
bG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChwb2xpY3lEb3dubG9hZElELCBk
b2N1bWVudExvYWRlci0+bWFpblJlc291cmNlTG9hZGVyKCktPmhhbmRsZSgpLCByZXF1ZXN0LCBy
ZXNwb25zZSk7CiB9CiAKIFN0cmluZyBXZWJGcmFtZTo6c291cmNlKCkgY29uc3QgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCmluZGV4
IGY0MjRkYjZkOTM2ZDQyMzNiZmEzMjA3YzM2MGUzYzRlM2I1ZGEwNmQuLjQ1NzBmOTEzNDdjZmUw
NTgxMzllMDc1OGM2MjBhOTM4NTA4NjA5OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwCkBAIC05MiwxMiArOTIsMTIgQEAgdm9p
ZCBXZWJJbnNwZWN0b3I6OmNyZWF0ZUluc3BlY3RvclBhZ2UoYm9vbCB1bmRlclRlc3QpCiAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24gPSBJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5l
Y3Rpb24oY29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzLCBSdW5Mb29wOjptYWluKCkpOwogICAg
IG1fZnJvbnRlbmRDb25uZWN0aW9uLT5vcGVuKCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6Q3JlYXRlSW5zcGVjdG9yUGFnZShjb25uZWN0aW9uQ2xpZW50UG9ydCwgY2FuQXR0YWNo
V2luZG93KCksIHVuZGVyVGVzdCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpDcmVhdGVJbnNwZWN0b3JQYWdlKGNvbm5lY3Rpb25DbGllbnRQb3J0
LCBjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
IHZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNw
ZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogCiAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKICAgICBtX2Zyb250ZW5kQ29ubmVj
dGlvbiA9IG51bGxwdHI7CkBAIC0xMDgsNyArMTA4LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3I6OmNs
b3NlRnJvbnRlbmQoKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6YnJpbmdUb0Zyb250KCkKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+cGFnZUlE
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiB9CiAKIC8vIENhbGxlZCBieSBXZWJJbnNwZWN0b3IgbWVzc2FnZXMK
QEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd1Jlc291cmNlcygpCiAK
IHZvaWQgV2ViSW5zcGVjdG9yOjpzaG93TWFpblJlc291cmNlRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJZGVudGlmaWVyKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLndlYkZyYW1lKGZyYW1lSWRlbnRpZmllcik7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFdlYklu
c3BlY3Rvcjo6dXBkYXRlRG9ja2luZ0F2YWlsYWJpbGl0eSgpCiAKICAgICBtX3ByZXZpb3VzQ2Fu
QXR0YWNoID0gY2FuQXR0YWNoV2luZG93OwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkF0dGFjaEF2YWlsYWJpbGl0eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9wYWdlLT5wYWdl
SUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEF2YWlsYWJpbGl0
eUNoYW5nZWQoY2FuQXR0YWNoV2luZG93KSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQg
V2ViSW5zcGVjdG9yOjpzZW5kTWVzc2FnZVRvQmFja2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBXZWJJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJW
RVIpCiAgICAgaWYgKG1fcmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQpCi0gICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQobWVzc2FnZSksIG1f
cGFnZS0+cGFnZUlEKCkpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2Vu
ZE1lc3NhZ2VUb1JlbW90ZUZyb250ZW5kKG1lc3NhZ2UpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAg
ICBlbHNlCiAjZW5kaWYKICAgICAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjpTZW5kTWVzc2FnZVRvRnJvbnRlbmQobWVzc2FnZSksIDApOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rv
clVJLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JV
SS5jcHAKaW5kZXggN2M5Y2U2ZDZkMDQ3ZWZmNjk5YjE3N2JlNDg2NDUwYTkxNWI3OWVhZi4uMzg3
NjljZjllOTA5MDA5ZmVjMTEyYTMxZmZmNDdkNDgyYTMwNGFiZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCkBAIC0xMTEs
MTIgKzExMSwxMiBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjptb3ZlV2luZG93QnkoZmxvYXQgeCwg
ZmxvYXQgeSkKIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6YnJpbmdUb0Zyb250KCkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQo
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6
OmNsb3NlV2luZG93KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2Uo
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9y
UHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogCiAgICAgbV9i
YWNrZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwogICAgIG1fYmFja2VuZENvbm5lY3Rpb24g
PSBudWxscHRyOwpAQCAtMTI5LDE1ICsxMjksMTUgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6cmVx
dWVzdFNldERvY2tTaWRlKERvY2tTaWRlIHNpZGUpCiB7CiAgICAgc3dpdGNoIChzaWRlKSB7CiAg
ICAgY2FzZSBEb2NrU2lkZTo6VW5kb2NrZWQ6Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpEZXRhY2goKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBEb2NrU2lkZTo6UmlnaHQ6Ci0gICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaFJp
Z2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtMTY3LDE3ICsxNjcsMTcg
QEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKIAogdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVp
Z2h0KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hl
aWdodChoZWlnaHQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNw
ZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0
dGFjaGVkV2luZG93V2lkdGgodW5zaWduZWQgd2lkdGgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRX
aW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lk
IFdlYkluc3BlY3RvclVJOjpzZXRUb29sYmFySGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2V0VG9vbGJhckhlaWdodChoZWlnaHQpLCBtX2lu
c3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
U2V0VG9vbGJhckhlaWdodChoZWlnaHQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0K
IAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNvbnN0IFN0cmluZyYgdXJsKQpA
QCAtMTg4LDE3ICsxODgsMTcgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6b3BlbkluTmV3VGFiKGNv
bnN0IFN0cmluZyYgdXJsKQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpzYXZlKGNvbnN0IFdURjo6
U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0
RW5jb2RlZCwgYm9vbCBmb3JjZVNhdmVBcykKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6U2F2ZShmaWxlbmFtZSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCwgZm9yY2VTYXZlQXMpLCBt
X2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6YXBw
ZW5kKGNvbnN0IFdURjo6U3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIGNvbnRl
bnQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29u
dGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
SW5zcGVjdGVkVVJMQ2hhbmdlZCh1cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6SW5zcGVjdGVkVVJMQ2hhbmdlZCh1
cmxTdHJpbmcpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JVSTo6c2hvd0NvbnNvbGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IGQ4NmQ3MjY2YzgzMjMxYjgxYjdhMmZkYzE3Y2ZlN2MxYmIy
NjdkOTguLmUyODZkZDdkMmZjMzRiNmZiOTA0MTRlZTE0ZjNjYTQwOTAwMTBmM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTI0MCw4ICsy
NDAsOCBAQCBQYXNzUmVmUHRyPFdlYlBhZ2U+IFdlYlBhZ2U6OmNyZWF0ZSh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZQogewogICAgIFJlZlB0cjxXZWJQYWdlPiBw
YWdlID0gYWRvcHRSZWYobmV3IFdlYlBhZ2UocGFnZUlELCBwYXJhbWV0ZXJzKSk7CiAKLSAgICBp
ZiAocGFnZS0+cGFnZUdyb3VwKCktPmlzVmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpKQotICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5kaWRDcmVhdGVQYWdlKHBhZ2UuZ2V0KCkpOworICAg
IGlmIChwYWdlLT5wYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCkpCisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPmRpZENyZWF0ZVBhZ2UocGFnZS5nZXQo
KSk7CiAKICAgICByZXR1cm4gcGFnZS5yZWxlYXNlKCk7CiB9CkBAIC0zNDcsNyArMzQ3LDcgQEAg
V2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgLy8gNG1zIHNob3VsZCBiZSBhZG9wdGVkIHByb2pl
Y3Qtd2lkZSBub3csIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MTIx
NAogICAgIFNldHRpbmdzOjpzZXREZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgwLjAwNCk7CiAK
LSAgICBtX3BhZ2VHcm91cCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2VHcm91cChwYXJh
bWV0ZXJzLnBhZ2VHcm91cERhdGEpOworICAgIG1fcGFnZUdyb3VwID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkud2ViUGFnZUdyb3VwKHBhcmFtZXRlcnMucGFnZUdyb3VwRGF0YSk7CiAKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgU2V0dGluZ3M6OnNldFNob3VsZE1hbmFnZUF1ZGlvU2Vzc2lvbkNh
dGVnb3J5KHRydWUpOwpAQCAtNDc0LDE2ICs0NzQsMTYgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50
NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMp
CiAgICAgLy8gV2UgdXNlIHRoZSBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgbWlsZXN0
b25lIHRvIGRldGVybWluZSB3aGVuIHRvIHVuZnJlZXplIHRoZSBsYXllciB0cmVlLgogICAgIG1f
cGFnZS0+YWRkTGF5b3V0TWlsZXN0b25lcyhEaWRGaXJzdExheW91dCB8IERpZEZpcnN0VmlzdWFs
bHlOb25FbXB0eUxheW91dCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2U6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdl
SUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlBhZ2U6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQsICp0
aGlzKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBvYmplY3Qg
Y29uc3RydWN0b3JzLCBhbmQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcyBzaG91bGQgYmUgbWVzc2Fn
ZSByZWNlaXZlcnMuCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwg
KnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZUlELCAqdGhpcyk7CiAjZW5kaWYKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlSUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2VJRCwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9wYWdlSUQsICp0aGlzKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJGdWxsU2Ny
ZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQsICp0aGlz
KTsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNDkyLDcgKzQ5Miw3IEBAIFdlYlBhZ2U6
OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJz
JiBwYXJhbWV0ZXJzKQogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAgICBpZiAobV91
c2VBc3luY1Njcm9sbGluZykKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZXZlbnREaXNw
YXRjaGVyKCkuYWRkU2Nyb2xsaW5nVHJlZUZvclBhZ2UodGhpcyk7CisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmV2ZW50RGlzcGF0Y2hlcigpLmFkZFNjcm9sbGluZ1RyZWVGb3JQYWdl
KHRoaXMpOwogI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogcGFyYW1ldGVycy5t
aW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVycykKQEAgLTUwMCw3ICs1MDAsNyBAQCBX
ZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKIAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikK
LSAgICBpZiAoV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlciogbWFuYWdlciA9IFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlcj4oKSkKKyAgICBp
ZiAoV2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlciogbWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnN1cHBsZW1lbnQ8V2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlcj4oKSkKICAgICAgICAg
bV9wYWdlLT5zZXR0aW5ncygpLnNldE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkobWFuYWdlci0+
bWVkaWFLZXlTdG9yYWdlRGlyZWN0b3J5KCkpOwogI2VuZGlmCiB9CkBAIC01NDEsNyArNTQxLDcg
QEAgV2ViUGFnZTo6fldlYlBhZ2UoKQogCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICAg
ICBpZiAobV91c2VBc3luY1Njcm9sbGluZykKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
ZXZlbnREaXNwYXRjaGVyKCkucmVtb3ZlU2Nyb2xsaW5nVHJlZUZvclBhZ2UodGhpcyk7CisgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV2ZW50RGlzcGF0Y2hlcigpLnJlbW92ZVNjcm9s
bGluZ1RyZWVGb3JQYWdlKHRoaXMpOwogI2VuZGlmCiAKICAgICBwbGF0Zm9ybURldGFjaCgpOwpA
QCAtNTU4LDE2ICs1NTgsMTYgQEAgV2ViUGFnZTo6fldlYlBhZ2UoKQogICAgICAgICBtX2Zvb3Rl
ckJhbm5lci0+ZGV0YWNoRnJvbVBhZ2UoKTsKICNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJQYWdlOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlBhZ2U6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGJlIGRvbmUgaW4gdGhlIG9iamVjdCBkZXN0cnVjdG9ycywgYW5kIHRoZSBvYmplY3RzIHRo
ZW1zZWx2ZXMgc2hvdWxkIGJlIG1lc3NhZ2UgcmVjZWl2ZXJzLgogI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDU19NVUxUSVBST0NFU1MpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXllclRyZWVIb3N0
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKICNlbmRpZgotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9y
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViRnVs
bFNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2Vi
RnVsbFNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogI2Vu
ZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC01ODEsNyArNTgxLDcgQEAgdm9pZCBXZWJQYWdlOjpk
dW1teShib29sJikKIAogSVBDOjpDb25uZWN0aW9uKiBXZWJQYWdlOjptZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCk7CiB9CiAKIHVpbnQ2NF90IFdlYlBhZ2U6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkKQEAgLTk3NCw4ICs5NzQsOCBAQCB2b2lkIFdlYlBhZ2U6OmNsb3Nl
KCkKICAgICBpZiAoIW1haW5XZWJGcmFtZSgpLT51cmwoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
cG9ydFVzZWRGZWF0dXJlcygpOwogCi0gICAgaWYgKHBhZ2VHcm91cCgpLT5pc1Zpc2libGVUb0lu
amVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKSkK
LSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+d2lsbERlc3Ry
b3lQYWdlKHRoaXMpOworICAgIGlmIChwYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1
bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCkpCisgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPndpbGxEZXN0cm95
UGFnZSh0aGlzKTsKIAogICAgIGlmIChtX2luc3BlY3RvcikgewogICAgICAgICBtX2luc3BlY3Rv
ci0+ZGlzY29ubmVjdEZyb21QYWdlKCk7CkBAIC0xMDM5LDcgKzEwMzksNyBAQCB2b2lkIFdlYlBh
Z2U6OmNsb3NlKCkKICAgICBtX2lzUnVubmluZ01vZGFsID0gZmFsc2U7CiAKICAgICAvLyBUaGUg
V2ViUGFnZSBjYW4gYmUgZGVzdHJveWVkIGJ5IHRoaXMgY2FsbC4KLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5yZW1vdmVXZWJQYWdlKG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5yZW1vdmVXZWJQYWdlKG1fcGFnZUlEKTsKIAogICAgIGlmIChpc1J1bm5pbmdNb2RhbCkK
ICAgICAgICAgUnVuTG9vcDo6bWFpbigpLnN0b3AoKTsKQEAgLTEwNjQsNyArMTA2NCw3IEBAIHZv
aWQgV2ViUGFnZTo6c2VuZENsb3NlKCkKIAogdm9pZCBXZWJQYWdlOjpsb2FkVVJMSW5GcmFtZShj
b25zdCBTdHJpbmcmIHVybCwgdWludDY0X3QgZnJhbWVJRCkKIHsKLSAgICBXZWJGcmFtZSogZnJh
bWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBXZWJGcmFt
ZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwODEsNyArMTA4MSw3IEBAIHZv
aWQgV2ViUGFnZTo6bG9hZFJlcXVlc3QodWludDY0X3QgbmF2aWdhdGlvbklELCBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsCiAKICAgICAvLyBMZXQgdGhlIEluamVjdGVkQnVuZGxlIGtu
b3cgd2UgYXJlIGFib3V0IHRvIHN0YXJ0IHRoZSBsb2FkLCBwYXNzaW5nIHRoZSB1c2VyIGRhdGEg
ZnJvbSB0aGUgVUlQcm9jZXNzCiAgICAgLy8gdG8gYWxsIHRoZSBjbGllbnQgdG8gc2V0IHVwIGFu
eSBuZWVkZWQgc3RhdGUuCi0gICAgbV9sb2FkZXJDbGllbnQud2lsbExvYWRVUkxSZXF1ZXN0KHRo
aXMsIHJlcXVlc3QsIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVj
dHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKKyAgICBtX2xvYWRlckNsaWVudC53aWxsTG9h
ZFVSTFJlcXVlc3QodGhpcywgcmVxdWVzdCwgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNm
b3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogCiAgICAgLy8g
SW5pdGF0ZSB0aGUgbG9hZCBpbiBXZWJDb3JlLgogICAgIGNvcmVQYWdlKCktPnVzZXJJbnB1dEJy
aWRnZSgpLmxvYWRSZXF1ZXN0KEZyYW1lTG9hZFJlcXVlc3QobV9tYWluRnJhbWUtPmNvcmVGcmFt
ZSgpLCByZXF1ZXN0KSk7CkBAIC0xMTAwLDcgKzExMDAsNyBAQCB2b2lkIFdlYlBhZ2U6OmxvYWRE
YXRhSW1wbCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBz
aGFyZQogCiAgICAgLy8gTGV0IHRoZSBJbmplY3RlZEJ1bmRsZSBrbm93IHdlIGFyZSBhYm91dCB0
byBzdGFydCB0aGUgbG9hZCwgcGFzc2luZyB0aGUgdXNlciBkYXRhIGZyb20gdGhlIFVJUHJvY2Vz
cwogICAgIC8vIHRvIGFsbCB0aGUgY2xpZW50IHRvIHNldCB1cCBhbnkgbmVlZGVkIHN0YXRlLgot
ICAgIG1fbG9hZGVyQ2xpZW50LndpbGxMb2FkRGF0YVJlcXVlc3QodGhpcywgcmVxdWVzdCwgY29u
c3RfY2FzdDxTaGFyZWRCdWZmZXIqPihzdWJzdGl0dXRlRGF0YS5jb250ZW50KCkpLCBzdWJzdGl0
dXRlRGF0YS5taW1lVHlwZSgpLCBzdWJzdGl0dXRlRGF0YS50ZXh0RW5jb2RpbmcoKSwgc3Vic3Rp
dHV0ZURhdGEuZmFpbGluZ1VSTCgpLCBXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1IYW5k
bGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAgbV9sb2FkZXJDbGll
bnQud2lsbExvYWREYXRhUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBjb25zdF9jYXN0PFNoYXJlZEJ1
ZmZlcio+KHN1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKSksIHN1YnN0aXR1dGVEYXRhLm1pbWVUeXBl
KCksIHN1YnN0aXR1dGVEYXRhLnRleHRFbmNvZGluZygpLCBzdWJzdGl0dXRlRGF0YS5mYWlsaW5n
VVJMKCksIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMo
dXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKIAogICAgIC8vIEluaXRhdGUgdGhlIGxvYWQgaW4g
V2ViQ29yZS4KICAgICBtX21haW5GcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmxvYWQoRnJh
bWVMb2FkUmVxdWVzdChtX21haW5GcmFtZS0+Y29yZUZyYW1lKCksIHJlcXVlc3QsIHN1YnN0aXR1
dGVEYXRhKSk7CkBAIC0xMTYyLDcgKzExNjIsNyBAQCB2b2lkIFdlYlBhZ2U6Om5hdmlnYXRlVG9V
UkxXaXRoU2ltdWxhdGVkQ2xpY2soY29uc3QgU3RyaW5nJiB1cmwsIEludFBvaW50IGRvY3VtZQog
CiB2b2lkIFdlYlBhZ2U6OnN0b3BMb2FkaW5nRnJhbWUodWludDY0X3QgZnJhbWVJRCkKIHsKLSAg
ICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlE
KTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFt
ZShmcmFtZUlEKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2MTYs
MTEgKzE2MTYsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRHYXBCZXR3ZWVuUGFnZXMoZG91YmxlIGdh
cCkKIAogdm9pZCBXZWJQYWdlOjpwb3N0SW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiB1c2VyRGF0YSkKIHsKLSAgICBJbmplY3Rl
ZEJ1bmRsZSogaW5qZWN0ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1
bmRsZSgpOworICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCk7CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaW5qZWN0ZWRCdW5kbGUtPmRpZFJlY2VpdmVNZXNzYWdl
VG9QYWdlKHRoaXMsIG1lc3NhZ2VOYW1lLCBXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1I
YW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAgaW5qZWN0ZWRC
dW5kbGUtPmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKHRoaXMsIG1lc3NhZ2VOYW1lLCBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVj
dCgpKS5nZXQoKSk7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMjE1NCw3ICsyMTU0LDcg
QEAgdm9pZCBXZWJQYWdlOjpkaXNwYXRjaFRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYg
dG91Y2hFdmVudCwgYm9vbCYgaGFuZGxlZCkKIHZvaWQgV2ViUGFnZTo6dG91Y2hFdmVudFN5bmMo
Y29uc3QgV2ViVG91Y2hFdmVudCYgdG91Y2hFdmVudCwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBF
dmVudERpc3BhdGNoZXI6OlRvdWNoRXZlbnRRdWV1ZSBxdWV1ZWRFdmVudHM7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuZXZlbnREaXNwYXRjaGVyKCkuZ2V0UXVldWVkVG91Y2hFdmVudHNGb3JQ
YWdlKCp0aGlzLCBxdWV1ZWRFdmVudHMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV2
ZW50RGlzcGF0Y2hlcigpLmdldFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSgqdGhpcywgcXVldWVk
RXZlbnRzKTsKICAgICBkaXNwYXRjaEFzeW5jaHJvbm91c1RvdWNoRXZlbnRzKHF1ZXVlZEV2ZW50
cyk7CiAKICAgICBkaXNwYXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudCwgaGFuZGxlZCk7CkBAIC0y
MzMxLDcgKzIzMzEsNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZUlzSW5XaW5kb3coYm9vbCBpc0lu
aXRpYWxTdGF0ZSkKICAgICAgICAgCiAgICAgICAgIC8vIFRoZSBXZWJQcm9jZXNzIGRvZXMgbm90
IHlldCBrbm93IGFib3V0IHRoaXMgcGFnZTsgbm8gbmVlZCB0byB0ZWxsIGl0IHdlJ3JlIGxlYXZp
bmcgdGhlIHdpbmRvdy4KICAgICAgICAgaWYgKCFpc0luaXRpYWxTdGF0ZSkKLSAgICAgICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhZ2VXaWxsTGVhdmVXaW5kb3cobV9wYWdlSUQpOworICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFnZVdpbGxMZWF2ZVdpbmRvdyhtX3Bh
Z2VJRCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRGVmZXIgdGhlIGNhbGwgdG8gUGFnZTo6
c2V0Q2FuU3RhcnRNZWRpYSgpIHNpbmNlIGl0IGVuZHMgdXAgc2VuZGluZyBhIHN5bmNocm9ub3Vz
IG1lc3NhZ2UgdG8gdGhlIFVJIHByb2Nlc3MKICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHBs
dWctaW4gY29ubmVjdGlvbnMsIGFuZCB0aGUgVUkgcHJvY2VzcyB3aWxsIGJlIHdhaXRpbmcgZm9y
IHRoZSBXZWIgcHJvY2VzcyB0byB1cGRhdGUgdGhlIGJhY2tpbmcKQEAgLTIzMzksNyArMjMzOSw3
IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlSXNJbldpbmRvdyhib29sIGlzSW5pdGlhbFN0YXRlKQog
ICAgICAgICBpZiAobV9tYXlTdGFydE1lZGlhV2hlbkluV2luZG93KQogICAgICAgICAgICAgbV9z
ZXRDYW5TdGFydE1lZGlhVGltZXIuc3RhcnRPbmVTaG90KDApOwogCi0gICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhZ2VEaWRFbnRlcldpbmRvdyhtX3BhZ2VJRCk7CisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhZ2VEaWRFbnRlcldpbmRvdyhtX3BhZ2VJRCk7CiAgICAgfQog
CiAgICAgaWYgKGlzSW5XaW5kb3cpCkBAIC0yMzc3LDEzICsyMzc3LDEzIEBAIHZvaWQgV2ViUGFn
ZTo6c2V0TGF5ZXJIb3N0aW5nTW9kZSh1bnNpZ25lZCBsYXllckhvc3RpbmdNb2RlKQogdm9pZCBX
ZWJQYWdlOjpzZXRTZXNzaW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoc2Vz
c2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmVuc3Vy
ZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQpOwogICAg
IG1fcGFnZS0+c2V0U2Vzc2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlk
UmVjZWl2ZVBvbGljeURlY2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVy
SUQsIHVpbnQzMl90IHBvbGljeUFjdGlvbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRf
dCBkb3dubG9hZElEKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybjsKICAgICBmcmFtZS0+ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGxpc3RlbmVySUQs
IHN0YXRpY19jYXN0PFBvbGljeUFjdGlvbj4ocG9saWN5QWN0aW9uKSwgbmF2aWdhdGlvbklELCBk
b3dubG9hZElEKTsKQEAgLTI0OTUsNyArMjQ5NSw3IEBAIEludFJlY3QgV2ViUGFnZTo6d2luZG93
UmVzaXplclJlY3QoKSBjb25zdAogCiBLZXlib2FyZFVJTW9kZSBXZWJQYWdlOjprZXlib2FyZFVJ
TW9kZSgpCiB7Ci0gICAgYm9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkID0gV2ViUHJvY2Vz
czo6c2hhcmVkKCkuZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCgpOworICAgIGJvb2wgZnVsbEtl
eWJvYXJkQWNjZXNzRW5hYmxlZCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmZ1bGxLZXlib2Fy
ZEFjY2Vzc0VuYWJsZWQoKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRVSU1vZGU+
KChmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkID8gS2V5Ym9hcmRBY2Nlc3NGdWxsIDogS2V5Ym9h
cmRBY2Nlc3NEZWZhdWx0KSB8IChtX3RhYlRvTGlua3MgPyBLZXlib2FyZEFjY2Vzc1RhYnNUb0xp
bmtzIDogMCkpOwogfQogCkBAIC0yNTgxLDcgKzI1ODEsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFNl
bGVjdGlvbk9yQ29udGVudHNBc1N0cmluZyh1aW50NjRfdCBjYWxsYmFja0lEKQogdm9pZCBXZWJQ
YWdlOjpnZXRTb3VyY2VGb3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFj
a0lEKQogewogICAgIFN0cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgaWYgKFdlYkZyYW1lKiBmcmFt
ZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpKQorICAgIGlmIChXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKSkK
ICAgICAgICByZXN1bHRTdHJpbmcgPSBmcmFtZS0+c291cmNlKCk7CiAKICAgICBzZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlN0cmluZ0NhbGxiYWNrKHJlc3VsdFN0cmluZywgY2FsbGJhY2tJ
RCkpOwpAQCAtMjU5MCw3ICsyNTkwLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRTb3VyY2VGb3JGcmFt
ZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpn
ZXRNYWluUmVzb3VyY2VEYXRhT2ZGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxs
YmFja0lEKQogewogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAoV2Vi
RnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsK
KyAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJh
bWUoZnJhbWVJRCkpIHsKICAgICAgICAgaWYgKFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVn
aW5WaWV3Rm9yRnJhbWUoZnJhbWUtPmNvcmVGcmFtZSgpKSkKICAgICAgICAgICAgIGJ1ZmZlciA9
IHBsdWdpblZpZXctPmxpdmVSZXNvdXJjZURhdGEoKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsK
QEAgLTI2MjIsNyArMjYyMiw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVz
b3VyY2VEYXRhRm9yRnJhbWUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHJlCiB2b2lkIFdlYlBh
Z2U6OmdldFJlc291cmNlRGF0YUZyb21GcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJp
bmcmIHJlc291cmNlVVJMU3RyaW5nLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJv
Y2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsKKyAgICBpZiAoV2ViRnJhbWUqIGZy
YW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsKICAgICAg
ICAgVVJMIHJlc291cmNlVVJMKFVSTCgpLCByZXNvdXJjZVVSTFN0cmluZyk7CiAgICAgICAgIGJ1
ZmZlciA9IHJlc291cmNlRGF0YUZvckZyYW1lKGZyYW1lLT5jb3JlRnJhbWUoKSwgcmVzb3VyY2VV
UkwpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewpAQCAtMjY0Miw3ICsyNjQyLDcgQEAgdm9pZCBX
ZWJQYWdlOjpnZXRXZWJBcmNoaXZlT2ZGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBj
YWxsYmFja0lEKQogewogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGRhdGE7Ci0gICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgp
LndlYkZyYW1lKGZyYW1lSUQpKQorICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKSkKICAgICAgICAgZGF0YSA9IGZyYW1lLT53
ZWJBcmNoaXZlRGF0YShudWxscHRyLCBudWxscHRyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGZyYW1lSUQpOwpAQCAtMzc2OCw3ICszNzY4LDcgQEAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBX
ZWJQYWdlOjpwZGZEb2N1bWVudEZvclByaW50aW5nRnJhbWUoRnJhbWUqIGNvcmVGcmFtZSkKIAog
dm9pZCBXZWJQYWdlOjpiZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50
SW5mbyYgcHJpbnRJbmZvKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNo
YXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtMzgzMyw3ICszODMzLDcgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRl
UGFnZXNGb3JQcmludGluZ0ltcGwodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBw
cmkKICNpZiBQTEFURk9STShDT0NPQSkKIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3RUb0ltYWdlKHVp
bnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2Vi
RnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lID8g
ZnJhbWUtPmNvcmVGcmFtZSgpIDogMDsKIAogICAgIFJlZlB0cjxXZWJJbWFnZT4gaW1hZ2U7CkBA
IC0zODg1LDcgKzM4ODUsNyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERGKHVpbnQ2NF90
IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCB1aW50MwogCiB2b2lkIFdlYlBh
Z2U6OmRyYXdQYWdlc1RvUERGSW1wbCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8m
IHByaW50SW5mbywgdWludDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBSZXRhaW5QdHI8Q0ZN
dXRhYmxlRGF0YVJlZj4mIHBkZlBhZ2VEYXRhKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdl
YlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBmcmFtZSA/IGZyYW1lLT5jb3JlRnJhbWUoKSA6IDA7CiAKICAgICBwZGZQ
YWdlRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CkBAIC00NTQ5LDcg
KzQ1NDksNyBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbW1pdExvYWQoV2ViRnJhbWUqIGZyYW1lKQog
ICAgIGNhbmNlbFBvdGVudGlhbFRhcCgpOwogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMp
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZXZlbnREaXNwYXRjaGVyKCkuY2xlYXJRdWV1ZWRU
b3VjaEV2ZW50c0ZvclBhZ2UoKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV2
ZW50RGlzcGF0Y2hlcigpLmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlzKTsKICNl
bmRpZgogCiAgICAgcmVzZXRWaWV3cG9ydERlZmF1bHRDb25maWd1cmF0aW9uKGZyYW1lKTsKQEAg
LTQ1NjMsNyArNDU2Myw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFtZSog
ZnJhbWUpCiAgICAgcmVzZXRQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oKTsKICNlbmRpZgogCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkudXBkYXRlQWN0aXZlUGFnZXMoKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS51cGRhdGVBY3RpdmVQYWdlcygpOwogCiAgICAgdXBkYXRlTWFpbkZy
YW1lU2Nyb2xsT2Zmc2V0UGlubmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKaW5kZXggNjQwNTJlYzkz
NGVmNTkwMDY4YzUxOTlkMmNkZmVjNDcwNmFmZTczNS4uZWUyMjM1YTI4Y2VmYmYyNDQwMWYyN2Rh
OTJjOTFmOWQ1NjAzMTQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCkBAIC0zOCw4ICszOCw4IEBAIFBhc3NS
ZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3Qg
V2ViUGFnZUdyb3VwRGF0YSYKIHsKICAgICBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+IHBhZ2VH
cm91cCA9IGFkb3B0UmVmKG5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAgICAgCi0gICAg
aWYgKHBhZ2VHcm91cC0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmluamVjdGVkQnVuZGxlKCktPmRpZEluaXRpYWxpemVQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgp
KTsKKyAgICBpZiAocGFnZUdyb3VwLT5pc1Zpc2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKSkKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChw
YWdlR3JvdXAuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHBhZ2VHcm91cC5yZWxlYXNlKCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJM
aXN0R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRl
ckxpc3RHdGsuY3BwCmluZGV4IGMzZTM2NGI2NGU4MmYwMmI1NDlhOWVkZTE5MzQ5ODdhMjA1MDM5
NWUuLjliMzlhZjcyNDQ2YmM5ZGJlMzJmN2ZlNGMwZDJjZWE3NGQ3NWU3ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RH
dGsuY3BwCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQcmludGVyTGlz
dEd0ayogUHJpbnRlckxpc3RHdGs6OnNfc2hhcmVkUHJpbnRlckxpc3QgPSBudWxscHRyOwogCi1S
ZWZQdHI8UHJpbnRlckxpc3RHdGs+IFByaW50ZXJMaXN0R3RrOjpzaGFyZWQoKQorUmVmUHRyPFBy
aW50ZXJMaXN0R3RrPiBQcmludGVyTGlzdEd0azo6c2luZ2xldG9uKCkKIHsKICAgICBpZiAoc19z
aGFyZWRQcmludGVyTGlzdCkKICAgICAgICAgcmV0dXJuIHNfc2hhcmVkUHJpbnRlckxpc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJM
aXN0R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJM
aXN0R3RrLmgKaW5kZXggNWE0NjZmNDdkMTAwYjQ5YzBlZTVhYTU5ZDI1ODg4ODg1ZTkxZmRhMS4u
ZmFiYTgyY2VmNzk5YWY0MWIzNjAyNTgzYzUyZWNjNzBkNTZhMDAxMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuaApA
QCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUHJpbnRlckxpc3RH
dGs6IHB1YmxpYyBSZWZDb3VudGVkPFByaW50ZXJMaXN0R3RrPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZlB0cjxQcmludGVyTGlzdEd0az4gc2hhcmVkKCk7CisgICAgc3RhdGljIFJlZlB0cjxQ
cmludGVyTGlzdEd0az4gc2luZ2xldG9uKCk7CiAgICAgflByaW50ZXJMaXN0R3RrKCk7CiAKICAg
ICBHdGtQcmludGVyKiBmaW5kUHJpbnRlcihjb25zdCBjaGFyKikgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9u
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRP
cGVyYXRpb25HdGsuY3BwCmluZGV4IDIzMzI2YjQwYzU3ZmVlOTMxNGI1NThiNDdiZGQ5OGE0MjE5
MzAwZmUuLjk4NTkyOThlZjM4ODUzMWE2Mzc4NWQ3YzZiM2MwYjQ3NTNhNmM5NWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRp
b25HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2Vi
UHJpbnRPcGVyYXRpb25HdGsuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
bV9wcmludENvbnRleHQgPSBwcmludENvbnRleHQ7CiAgICAgICAgIG1fY2FsbGJhY2tJRCA9IGNh
bGxiYWNrSUQ7CiAKLSAgICAgICAgUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBwcmludGVyTGlzdCA9
IFByaW50ZXJMaXN0R3RrOjpzaGFyZWQoKTsKKyAgICAgICAgUmVmUHRyPFByaW50ZXJMaXN0R3Rr
PiBwcmludGVyTGlzdCA9IFByaW50ZXJMaXN0R3RrOjpzaW5nbGV0b24oKTsKICAgICAgICAgY29u
c3QgY2hhciogcHJpbnRlck5hbWUgPSBndGtfcHJpbnRfc2V0dGluZ3NfZ2V0X3ByaW50ZXIobV9w
cmludFNldHRpbmdzLmdldCgpKTsKICAgICAgICAgR3RrUHJpbnRlciogcHJpbnRlciA9IHByaW50
ZXJOYW1lID8gcHJpbnRlckxpc3QtPmZpbmRQcmludGVyKHByaW50ZXJOYW1lKSA6IHByaW50ZXJM
aXN0LT5kZWZhdWx0UHJpbnRlcigpOwogICAgICAgICBpZiAoIXByaW50ZXIpIHsKQEAgLTE0OSwx
MyArMTQ5LDEzIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBwcmludEpvYkZpbmlzaGVkKFdl
YlByaW50T3BlcmF0aW9uR3RrVW5peCogcHJpbnRPcGVyYXRpb24pCiAgICAgewogICAgICAgICBw
cmludE9wZXJhdGlvbi0+ZGVyZWYoKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZW5h
YmxlVGVybWluYXRpb24oKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5hYmxl
VGVybWluYXRpb24oKTsKICAgICB9CiAKICAgICB2b2lkIGVuZFByaW50KCkgb3ZlcnJpZGUKICAg
ICB7CiAgICAgICAgIC8vIERpc2FibGUgd2ViIHByb2Nlc3MgdGVybWluYXRpb24gdW50aWwgdGhl
IHByaW50IGpvYiBmaW5pc2hlcy4KLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZGlzYWJs
ZVRlcm1pbmF0aW9uKCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmRpc2FibGVU
ZXJtaW5hdGlvbigpOwogCiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKGd0a19wcmludF9q
b2JfZ2V0X3N1cmZhY2UobV9wcmludEpvYi5nZXQoKSwgMCkpOwogICAgICAgICAvLyBNYWtlIHN1
cmUgdGhlIG9wZXJhdGlvbiBpcyBhbGl2ZSB1bnRpbCB0aGUgam9iIGlzIHNlbnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5k
ZXggYTg5NWJjNWQ2OTQ2NzhjMGMwNDRmODE3ZjYxMzIyMGUzOTZlN2M0Yi4uYjk4NzlhYmI3YTQz
NTRkNWU0ZGQ2YTJhZjdhYmQ5ZTBlMDViYjRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjgxLDcgKzI4MSw3IEBA
IGJvb2wgV2ViUGFnZTo6aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCog
ZXZlbnQpCiAKICAgICAvLyBGSVhNRTogSW50ZXJwcmV0IHRoZSBldmVudCBpbW1lZGlhdGVseSB1
cG9uIHJlY2VpdmluZyBpdCBpbiBVSSBwcm9jZXNzLCB3aXRob3V0IHNlbmRpbmcgdG8gV2ViUHJv
Y2VzcyBmaXJzdC4KICAgICBib29sIGV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwotICAgIGJvb2wg
c2VuZFJlc3VsdCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldEtleUV2ZW50KGVk
aXRvclN0YXRlKCksIHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZl
bnQ6OkNoYXIpLAorICAgIGJvb2wgc2VuZFJlc3VsdCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkludGVycHJldEtleUV2ZW50KGVkaXRvclN0YXRlKCksIHBsYXRmb3JtRXZlbnQtPnR5cGUo
KSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldEtleUV2ZW50OjpSZXBseShldmVudFdh
c0hhbmRsZWQpLCBtX3BhZ2VJRCk7CiAgICAgaWYgKCFzZW5kUmVzdWx0KQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yMjc3LDcgKzIyNzcsNyBAQCB2b2lkIFdlYlBhZ2U6OmVsZW1lbnREaWRG
b2N1cyhXZWJDb3JlOjpOb2RlKiBub2RlKQogICAgICAgICBpZiAobV91c2VySXNJbnRlcmFjdGlu
ZykKICAgICAgICAgICAgIG1fZm9ybUNsaWVudC0+d2lsbEJlZ2luSW5wdXRTZXNzaW9uKHRoaXMs
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqbm9kZS0+
ZG9jdW1lbnQoKS5mcmFtZSgpKSwgdXNlckRhdGEpOwogCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U3RhcnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0aW9uLCBtX3VzZXJJc0lu
dGVyYWN0aW5nLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBVc2VyRGF0YShXZWJQcm9j
ZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKKyAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdGFydEFzc2lz
dGluZ05vZGUoaW5mb3JtYXRpb24sIG1fdXNlcklzSW50ZXJhY3RpbmcsIG1faGFzUGVuZGluZ0Js
dXJOb3RpZmljYXRpb24sIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogICAgICAgICBtX2hh
c1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uID0gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1v
dGVDdXN0b20ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQppbmRleCBkMDRlM2M3NGI3NDA5NDA0N2UxYjUwNmQ2
NzAxYzA5MDhiMDhhNTJhLi4xZWY5YTk5MTExNzlmMzkxNTUzZTliNmI3MTgwNmZhOTU2MGM1Yzc1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQpAQCAtNTksNyArNTks
NyBAQCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OlBsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbShMYXllclR5cGUgbGF5ZXJUeXBlLCBQbAogewogICAgIHN3aXRjaCAoY29udGV4dC5sYXll
ckhvc3RpbmdNb2RlKCkpIHsKICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczoK
LSAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3Jl
YXRlRm9yUG9ydChXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBv
cnQoKSk7CisgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRl
eHQ6OmNyZWF0ZUZvclBvcnQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5k
ZXJTZXJ2ZXJQb3J0KCkpOwogICAgICAgICBicmVhazsKICNpZiBIQVZFKE9VVF9PRl9QUk9DRVNT
X0xBWUVSX0hPU1RJTkcpCiAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCBmMTMxZDVlMmYwODI0
YmI1MjQ4MzM1MTk2ZjBiY2NjNjI2NjAxZWFjLi5hNzU0OTA3ZmE5NDA3ZmUyYTRlMmEyZmFiMGQx
NGUxOGM0OWU1ZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAg
LTM5MywxNCArMzkzLDE0IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNo
TGF5ZXJzKCkKICAgICBpZiAoaGFkQW55Q2hhbmdlZEJhY2tpbmdTdG9yZSkKICAgICAgICAgYmFj
a2luZ1N0b3JlQ29sbGVjdGlvbi5zY2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpOwogCi0gICAgUmVm
UHRyPEJhY2tpbmdTdG9yZUZsdXNoZXI+IGJhY2tpbmdTdG9yZUZsdXNoZXIgPSBCYWNraW5nU3Rv
cmVGbHVzaGVyOjpjcmVhdGUoV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKSwgV1RGOjptb3ZlKGNvbW1pdEVuY29kZXIpLCBXVEY6Om1vdmUoY29udGV4dHNUb0Zs
dXNoKSk7CisgICAgUmVmUHRyPEJhY2tpbmdTdG9yZUZsdXNoZXI+IGJhY2tpbmdTdG9yZUZsdXNo
ZXIgPSBCYWNraW5nU3RvcmVGbHVzaGVyOjpjcmVhdGUoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSwgV1RGOjptb3ZlKGNvbW1pdEVuY29kZXIpLCBXVEY6
Om1vdmUoY29udGV4dHNUb0ZsdXNoKSk7CiAgICAgbV9wZW5kaW5nQmFja2luZ1N0b3JlRmx1c2hl
ciA9IGJhY2tpbmdTdG9yZUZsdXNoZXI7CiAKICAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBh
Z2UucGFnZUlEKCk7CiAgICAgZGlzcGF0Y2hfYXN5bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdT
dG9yZUZsdXNoZXIsIHBhZ2VJRF0gewogICAgICAgICBiYWNraW5nU3RvcmVGbHVzaGVyLT5mbHVz
aCgpOwogCi0gICAgICAgIGlmIChXZWJQYWdlICp3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVk
KCkud2ViUGFnZShwYWdlSUQpKSB7CisgICAgICAgIGlmIChXZWJQYWdlICp3ZWJQYWdlID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShwYWdlSUQpKSB7CiAgICAgICAgICAgICBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVzdGFtcCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29u
ZHMoc3RhdGljX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6cmVwPihtb25vdG9uaWNh
bGx5SW5jcmVhc2luZ1RpbWUoKSAqIDEwMDApKTsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5j
KGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CiAgICAgICAgICAgICAgICAgd2ViUGFnZS0+
ZGlkRmx1c2hMYXllclRyZWVBdFRpbWUodGltZXN0YW1wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFu
aW1hdGlvbkRyYXdpbmdBcmVhLm1tCmluZGV4IDJmNDViMmY0YjU5NWM1MDViODQ2Y2VhZjgyZjM4
MTY2MDFkMDQwZWQuLjY3ODM3OTc3NGFhN2M3ZWU4ZTMwNjliMzU2ZGZiMmQwNzQ5YWEwZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNDgyLDcgKzQ4
Miw3IEBAIHZvaWQgVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUxheWVySG9z
dGluZ0NvbnRleHQoKQogICAgIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IGFuZCBzZXQgaXQgdXAu
CiAgICAgc3dpdGNoIChtX3dlYlBhZ2UubGF5ZXJIb3N0aW5nTW9kZSgpKSB7CiAgICAgY2FzZSBM
YXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3M6Ci0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4
dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQoV2ViUHJvY2Vzczo6c2hhcmVk
KCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkpOworICAgICAgICBtX2xheWVySG9zdGlu
Z0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKICAgICAgICAgYnJl
YWs7CiAjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQogICAgIGNhc2UgTGF5
ZXJIb3N0aW5nTW9kZTo6T3V0T2ZQcm9jZXNzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDRkYjZhYjc3MTdkZGJjYzUz
MjQxZjczYzA4ZDdjYjk1MDYxYmJjNWYuLmUyZjY2NzViMTNhZWEyNWZiNjcwMDc5ZmRkMDhlOTEz
N2UzNDg4YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRm
b3JtSW5pdGlhbGl6ZSgpCiAgICAgV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogbW9ja0Fj
Y2Vzc2liaWxpdHlFbGVtZW50ID0gW1tbV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCBhbGxv
Y10gaW5pdF0gYXV0b3JlbGVhc2VdOwogCiAgICAgLy8gR2V0IHRoZSBwaWQgZm9yIHRoZSBzdGFy
dGluZyBwcm9jZXNzLgotICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnByZXNl
bnRlckFwcGxpY2F0aW9uUGlkKCk7ICAgIAorICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnByZXNlbnRlckFwcGxpY2F0aW9uUGlkKCk7CiAgICAgV0tBWEluaXRpYWxpemVF
bGVtZW50V2l0aFByZXNlbnRlclBpZChtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQsIHBpZCk7CiAg
ICAgW21vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCBzZXRXZWJQYWdlOnRoaXNdOwogICAgIApAQCAt
MjEyLDcgKzIxMiw3IEBAIGJvb2wgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRl
cm5hbChjb25zdCBWZWN0b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tCiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRXYXNI
YW5kbGVkQnlVSVByb2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb21tYW5kc1tpXS5jb21t
YW5kTmFtZSksIAorICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4
ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKSwKICAg
ICAgICAgICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhlY3V0ZVNhdmVkQ29t
bWFuZEJ5U2VsZWN0b3I6OlJlcGx5KGNvbW1hbmRXYXNIYW5kbGVkQnlVSVByb2Nlc3MpLCBtX3Bh
Z2VJRCk7CiAgICAgICAgICAgICAgICAgZXZlbnRXYXNIYW5kbGVkIHw9IGNvbW1hbmRXYXNIYW5k
bGVkQnlVSVByb2Nlc3M7CiAgICAgICAgICAgICB9CkBAIC04MTUsNyArODE1LDcgQEAgdm9pZCBX
ZWJQYWdlOjp1cGRhdGVIZWFkZXJBbmRGb290ZXJMYXllcnNGb3JEZXZpY2VTY2FsZUNoYW5nZShm
bG9hdCBzY2FsZUZhY3RvcikKIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdQ
REZEb2N1bWVudCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywg
VmVjdG9yPEludFJlY3Q+JiByZXN1bHRQYWdlUmVjdHMpCiB7CiAgICAgQVNTRVJUKHJlc3VsdFBh
Z2VSZWN0cy5pc0VtcHR5KCkpOwotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNo
YXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBmcmFtZSA/IGZyYW1lLT5jb3JlRnJhbWUoKSA6IDA7CiAgICAgUmV0YWluUHRyPFBERkRvY3Vt
ZW50PiBwZGZEb2N1bWVudCA9IGNvcmVGcmFtZSA/IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFt
ZShjb3JlRnJhbWUpIDogMDsKICAgICBpZiAoW3BkZkRvY3VtZW50IGFsbG93c1ByaW50aW5nXSkg
ewpAQCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtQWN0aW9uTWVudUhp
dFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb25JblYKICAgICBSZWZQ
dHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhOwogICAgIGluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVD
bGllbnQoKS5wcmVwYXJlRm9yQWN0aW9uTWVudSgqdGhpcywgaGl0VGVzdFJlc3VsdCwgdXNlckRh
dGEpOwogCi0gICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtQWN0aW9u
TWVudUhpdFRlc3QoYWN0aW9uTWVudVJlc3VsdCwgZm9ySW1tZWRpYXRlQWN0aW9uLCBVc2VyRGF0
YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBl
cmZvcm1BY3Rpb25NZW51SGl0VGVzdChhY3Rpb25NZW51UmVzdWx0LCBmb3JJbW1lZGlhdGVBY3Rp
b24sIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiBQYXNzUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiBXZWJQYWdlOjpsb29rdXBUZXh0QXRMb2NhdGlvbihGbG9hdFBvaW50IGxvY2F0aW9u
SW5WaWV3Q29vb3JkaW5hdGVzLCBOU0RpY3Rpb25hcnkgKipvcHRpb25zKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKaW5kZXggOTYxNmIwMGQ5ZjY2MTIwMDI4YzczMzc5
OTQwMGE5NGVkZGEzMDNkOS4uZjVhOTczZDhlOGJiMDRjZmViN2ExMmIyNGU4ZDk5MDBlODg1ODk2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDMsNyAr
MTQzLDcgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBub25WaXNpYmxlUHJvY2Vzc0NsZWFudXBEZWxh
eSA9IDEwOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViUHJvY2VzcyYgV2ViUHJvY2Vzczo6
c2hhcmVkKCkKK1dlYlByb2Nlc3MmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpCiB7CiAgICAgc3Rh
dGljIFdlYlByb2Nlc3MmIHByb2Nlc3MgPSAqbmV3IFdlYlByb2Nlc3M7CiAgICAgcmV0dXJuIHBy
b2Nlc3M7CkBAIC0yMzEsNyArMjMxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplQ29u
bmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAjZW5kaWYKIAogI2lmIEVOQUJM
RShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0aWFsaXplQ29u
bmVjdGlvbihjb25uZWN0aW9uKTsKKyAgICBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlh
bGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAjZW5kaWYKICAgICAKICAgICBXZWJQcm9jZXNz
U3VwcGxlbWVudE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cHBsZW1lbnRzLmJlZ2luKCk7
CkBAIC0zNTMsNyArMzUzLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2Vz
cyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQogICAgIGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgQ29va2ll
U3RvcmFnZVNoaW06OnNoYXJlZCgpLmluaXRpYWxpemUoKTsKKyAgICAgICAgQ29va2llU3RvcmFn
ZVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxpemUoKTsKICNlbmRpZgogI2VuZGlmCiAgICAgc2V0
VGVybWluYXRpb25UaW1lb3V0KHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0KTsKQEAgLTM3
Miw3ICszNzIsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlBy
b2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIGF1ZGl0X3Rva2VuX3Qg
YXVkaXRUb2tlbjsKICAgICBpZiAocGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVkaXRU
b2tlbihhdWRpdFRva2VuKSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBhdWRpdERh
dGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCAoY29uc3QgVUludDgqKSZhdWRpdFRv
a2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKLSAgICAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3I6OnNoYXJlZCgpLnNldFBhcmVudFByb2Nlc3NJbmZvcm1hdGlvbihwcmVzZW50ZXJBcHBs
aWNhdGlvblBpZCgpLCBhdWRpdERhdGEpOworICAgICAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6c2luZ2xldG9uKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKHByZXNlbnRlckFw
cGxpY2F0aW9uUGlkKCksIGF1ZGl0RGF0YSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC03MDgsNyAr
NzA4LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpjbGVhclJlc291cmNlQ2FjaGVzKFJlc291cmNlQ2Fj
aGVzVG9DbGVhciByZXNvdXJjZUNhY2hlc1RvQ2xlYXIKICAgICBtZW1vcnlDYWNoZSgpLmV2aWN0
UmVzb3VyY2VzKCk7CiAKICAgICAvLyBFbXB0eSB0aGUgY3Jvc3Mtb3JpZ2luIHByZWZsaWdodCBj
YWNoZS4KLSAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5lbXB0
eSgpOworICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmVt
cHR5KCk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlKCkKQEAg
LTk1MSw3ICs5NTEsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29s
bGVjdG9yVGltZXJFbmFibGVkKGJvb2wgZmxhZykKIAogdm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVJ
bmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNl
ckRhdGEmIG1lc3NhZ2VCb2R5KQogewotICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRs
ZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCk7CisgICAgSW5qZWN0ZWRC
dW5kbGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRC
dW5kbGUoKTsKICAgICBpZiAoIWluamVjdGVkQnVuZGxlKQogICAgICAgICByZXR1cm47CiAKQEAg
LTk2MCw3ICs5NjAsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZUluamVjdGVkQnVuZGxlTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVcwogCiB2b2lkIFdlYlByb2Nl
c3M6OnNldEluamVjdGVkQnVuZGxlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBJ
UEM6OkRhdGFSZWZlcmVuY2UmIHZhbHVlKQogewotICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3Rl
ZEJ1bmRsZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCk7CisgICAgSW5q
ZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5q
ZWN0ZWRCdW5kbGUoKTsKICAgICBpZiAoIWluamVjdGVkQnVuZGxlKQogICAgICAgICByZXR1cm47
CiAKQEAgLTEwNzksNyArMTA3OSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0RW5oYW5jZWRBY2Nl
c3NpYmlsaXR5KGJvb2wgZmxhZykKIHZvaWQgV2ViUHJvY2Vzczo6c3RhcnRNZW1vcnlTYW1wbGVy
KGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSYgc2FtcGxlTG9nRmlsZUhhbmRsZSwgY29u
c3QgU3RyaW5nJiBzYW1wbGVMb2dGaWxlUGF0aCwgY29uc3QgZG91YmxlIGludGVydmFsKQogewog
I2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikgICAgCi0gICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hh
cmVkKCktPnN0YXJ0KHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRl
cnZhbCk7CisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0YXJ0KHNhbXBsZUxv
Z0ZpbGVIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCk7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShzYW1wbGVMb2dGaWxlSGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0oc2FtcGxl
TG9nRmlsZVBhdGgpOwpAQCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzdGFy
dE1lbW9yeVNhbXBsZXIoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dG
aWwKIHZvaWQgV2ViUHJvY2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQogewogI2lmIEVOQUJMRShN
RU1PUllfU0FNUExFUikKLSAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RvcCgpOwor
ICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNpbmdsZXRvbigpLT5zdG9wKCk7CiAjZW5kaWYKIH0KIApA
QCAtMTExNiw3ICsxMTE2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRl
KGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKIHZvaWQgV2ViUHJv
Y2Vzczo6cmVsZWFzZVBhZ2VDYWNoZSgpCiB7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVu
ZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAgUGFnZUNh
Y2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQ
cmVzc3VyZSk7CiB9CiAKICNpZiAhUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCmluZGV4IGY5Y2YzN2NhYWI4MzMyNzBmOWIyY2MyZDZiNmMzM2JmN2Iw
MTkzMGQuLjViYWYwNzIxMzdkZTZhZTdkZjVjNzNmNTRiNWQzODk5ZjhmZDMyNWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIFdl
YlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjsKIGNsYXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMg
Q2hpbGRQcm9jZXNzLCBwdWJsaWMgV2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZW50LCBwcml2
YXRlIERvd25sb2FkTWFuYWdlcjo6Q2xpZW50IHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0
cm95ZWQ8RG93bmxvYWRNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2ViUHJvY2VzcyYg
c2hhcmVkKCk7CisgICAgc3RhdGljIFdlYlByb2Nlc3MmIHNpbmdsZXRvbigpOwogCiAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVCogc3VwcGxlbWVudCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4IGJjNDg2ZTcz
ZWU3ZjNiMWYzYWVlYjM2ZWM4ZDU5YmFlMDI0NDM1OTEuLjBkOGEzY2YxNTU4OGNkMDdhZmZiMzU0
MTFiMGEzYTRkMWVlYTNmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Y29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAg
bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1h
eERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNl
dERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNp
emUpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXpl
KTsKIAogICAgIE5TVVJMQ2FjaGUgKm5zdXJsQ2FjaGUgPSBbTlNVUkxDYWNoZSBzaGFyZWRVUkxD
YWNoZV07CiAKQEAgLTE0NCw3ICsxNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xl
YXJSZXNvdXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgY2FjaGVzVG9DbGVhcgogI2lm
IFVTRShBUFBLSVQpCiBzdGF0aWMgaWQgTlNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlGb2N1c2Vk
VUlFbGVtZW50KE5TQXBwbGljYXRpb24qLCBTRUwpCiB7Ci0gICAgV2ViUGFnZSogcGFnZSA9IFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmZvY3VzZWRXZWJQYWdlKCk7CisgICAgV2ViUGFnZSogcGFnZSA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmZvY3VzZWRXZWJQYWdlKCk7CiAgICAgaWYgKCFwYWdl
IHx8ICFwYWdlLT5hY2Nlc3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAw
OwogCkBAIC0yMjYsNyArMjI2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxp
emVQcm9jZXNzKGNvbnN0IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW0KICAgICBXS0FY
UmVnaXN0ZXJSZW1vdGVBcHAoKTsKIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNl
Y0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0aWFsaXplKHRoaXMpOworICAgIFNlY0l0ZW1TaGltOjpz
aW5nbGV0b24oKS5pbml0aWFsaXplKHRoaXMpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKaW5kZXgg
YjMzZTI4NmFlNDZlODJjODYzNTFjOGNkN2Q2MjAxMTE5OWY3NGU5YS4uZjBiOTYzZWIyNjc0OTlj
YjZiZGRmMjlkNTQ4ZWQ0ZGU1NGVkZTg3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAK
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUV4dGVuc2lvbk1hbmFnZXJFZmwmIEV4dGVuc2lvbk1h
bmFnZXJFZmw6OnNoYXJlZCgpCitFeHRlbnNpb25NYW5hZ2VyRWZsJiBFeHRlbnNpb25NYW5hZ2Vy
RWZsOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFeHRlbnNpb25N
YW5hZ2VyRWZsPiBleHRlbnNpb25NYW5hZ2VyOwogICAgIHJldHVybiBleHRlbnNpb25NYW5hZ2Vy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFu
YWdlckVmbC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdl
ckVmbC5oCmluZGV4IDliYTUzYjY5ODhkNDA0ZDRjNzc4MjRhYzA5N2JlMGMyNjRjY2FhYjguLjIy
ZTVlYTg2OGYwZTI3YWYwOTUzMTQ0MWI1NzhmMDU4ZjUzZjlkNDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmgKQEAgLTQwLDcg
KzQwLDcgQEAgY2xhc3MgTW9kdWxlOwogY2xhc3MgRXh0ZW5zaW9uTWFuYWdlckVmbCB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoRXh0ZW5zaW9uTWFuYWdlckVmbCk7CiBwdWJsaWM6Ci0gICAg
V0tfRVhQT1JUIHN0YXRpYyBFeHRlbnNpb25NYW5hZ2VyRWZsJiBzaGFyZWQoKTsKKyAgICBXS19F
WFBPUlQgc3RhdGljIEV4dGVuc2lvbk1hbmFnZXJFZmwmIHNpbmdsZXRvbigpOwogICAgIFdLX0VY
UE9SVCB2b2lkIGluaXRpYWxpemUoV0tCdW5kbGVSZWYsIFdLVHlwZVJlZik7CiBwcml2YXRlOgog
ICAgIEV4dGVuc2lvbk1hbmFnZXJFZmwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvZWZsL1dlYkluamVjdGVkQnVuZGxlTWFpbkVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2VmbC9XZWJJbmplY3RlZEJ1bmRsZU1haW5FZmwuY3BwCmluZGV4IDllNTBh
OGNjMWJmZDZlOGU1YmZiZGIyNzI0NWQ2ZGY4NDVjMDBhZWYuLjgyMDU5Zjk5OTg5MTA3NzljYTYy
ZGNkYTllNzg2ZGZhZmIxZjYzOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvZWZsL1dlYkluamVjdGVkQnVuZGxlTWFpbkVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvV2ViSW5qZWN0ZWRCdW5kbGVNYWluRWZsLmNwcApAQCAtMzIsNSArMzIs
NSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBleHRlcm4gIkMiIHZvaWQgV0tCdW5kbGVJ
bml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tUeXBlUmVmIHVzZXJEYXRhKQogewotICAg
IEV4dGVuc2lvbk1hbmFnZXJFZmw6OnNoYXJlZCgpLmluaXRpYWxpemUoYnVuZGxlLCB1c2VyRGF0
YSk7CisgICAgRXh0ZW5zaW9uTWFuYWdlckVmbDo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShidW5k
bGUsIHVzZXJEYXRhKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Z3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9ndGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5jcHAKaW5kZXggNThjYzc1ZDIwYzUxZDRiZmEy
OGY0MTA2ZTcwMjE2YzllNGNhYTYyYi4uZGUyNWUzZGJjMTYwYWU0ODgzNzJhMTg4MzAxYjBkZDYy
Yzg0ZGMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3Rr
RXh0ZW5zaW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsv
V2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLVdlYkd0a0V4dGVuc2lvbk1hbmFnZXImIFdlYkd0a0V4dGVuc2lvbk1hbmFn
ZXI6OnNoYXJlZCgpCitXZWJHdGtFeHRlbnNpb25NYW5hZ2VyJiBXZWJHdGtFeHRlbnNpb25NYW5h
Z2VyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJHdGtFeHRl
bnNpb25NYW5hZ2VyPiBleHRlbnNpb25NYW5hZ2VyOwogICAgIHJldHVybiBleHRlbnNpb25NYW5h
Z2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0
ZW5zaW9uTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0
ZW5zaW9uTWFuYWdlci5oCmluZGV4IGZjYzg2NmI0N2E4MTAwNmM3YjVmMTI1N2M3MDQ5ZDA2ZDdj
ZDllN2IuLjM3YzVlNjY3NjU5MWRlMzUyNjBjYWYzMGE1OWUzYTQ0MTIwM2VkYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRlbnNpb25NYW5h
Z2VyLmgKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViR3RrRXh0ZW5zaW9uTWFuYWdlcik7CiAKIHB1Ymxp
YzoKLSAgICBXS19FWFBPUlQgc3RhdGljIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXImIHNoYXJlZCgp
OworICAgIFdLX0VYUE9SVCBzdGF0aWMgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciYgc2luZ2xldG9u
KCk7CiAKICAgICBXS19FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUmVmLCBXS1R5cGVS
ZWYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtJ
bmplY3RlZEJ1bmRsZU1haW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2Vi
R3RrSW5qZWN0ZWRCdW5kbGVNYWluLmNwcAppbmRleCBmMTkyZmFhMzk2NWU5YzFkYjhkMGEyYTNl
NGJkYzA2OWY3NGQ1MTNiLi4wMDM3Y2Q0NzY5NGE3NjI5OTg4ZjFiYmIyM2E5NDY5MjQ4ODhiYmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtJbmplY3Rl
ZEJ1bmRsZU1haW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0
a0luamVjdGVkQnVuZGxlTWFpbi5jcHAKQEAgLTMxLDUgKzMxLDUgQEAgZXh0ZXJuICJDIgogI2Vu
ZGlmCiB2b2lkIFdLQnVuZGxlSW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJl
ZiB1c2VyRGF0YSkKIHsKLSAgICBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyOjpzaGFyZWQoKS5pbml0
aWFsaXplKGJ1bmRsZSwgdXNlckRhdGEpOworICAgIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXI6OnNp
bmdsZXRvbigpLmluaXRpYWxpemUoYnVuZGxlLCB1c2VyRGF0YSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1t
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
ci5tbQppbmRleCBmZmIwNGJkNWUzYTRjNjJkOTRiNzE3ZmI0ODlhZTY0ZjA4MTY0NzRjLi43NDJl
OWRiNWJmOWNmYTQyODk2YmQ4NTA1MmE2YTIyZDM4MDcxY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIu
bW0KQEAgLTczLDEyICs3MywxMiBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyKFBhc3NSZWZQdHI8V2ViUGFnZT4gcGFnZSkKICAgICAsIG1faXNG
dWxsc2NyZWVuKGZhbHNlKQogewogICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSh0
aGlzKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFn
ZS0+cGFnZUlEKCksICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAogV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9G
dWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
c3VwcG9ydHNWaWRlb0Z1bGxzY3JlZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKaW5kZXggMTE4YzcyMmY3NjI0OWE1ZTJm
ZWE0YWFlZjA1NWY4NDlmYWMwOWMwNi4uOWEyODcwODQ1N2Y0YTJjNTFjZGYwM2NkMzllM2Y1Yjgy
MzI0YzkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJv
Y2Vzc1NvdXAuY3BwCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRm
b3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgV2ViQ29yZTo6bWVt
b3J5Q2FjaGUoKS5zZXREaXNhYmxlZChjYWNoZU1vZGVsID09IENhY2hlTW9kZWxEb2N1bWVudFZp
ZXdlcik7CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWlu
RGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsK
ICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50
ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgV2ViQ29yZTo6UGFn
ZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOworICAgIFdlYkNvcmU6
OlBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lm
IFBMQVRGT1JNKEdUSykKLSAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldFNob3Vs
ZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKKyAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmds
ZXRvbigpLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKICNlbmRpZgogCiAgICAg
aWYgKCF1c2VzTmV0d29ya1Byb2Nlc3MoKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDAxZDg3NTJkMTNkNzI1NmRjMDlkODljY2M4ZTllNmRj
NzA3YzEyYzIuLmEwMTMyMjE2ZmM3Yzc2ZTQyMmM4NGY3MDVmZWE2MzdjMTE3MzQ3ZTAgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
MyBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24o
KSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMg
dG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2VzIGFzIHBlciB0aGUg
cmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKIDIwMTUtMDEtMjkgIEFsZXhleSBQcm9za3Vy
eWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgQnVpbHQgcmVzdWx0IHRha2VzIHRvbyBs
b25nIHRvIGJlIGNvbXByZXNzZWQgb24gYm90cwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNw
cAppbmRleCA0NWZiOTdhZDcxNjFmMGExZjJmNzU0ZGYwZWI3YmY4NGNhZjJlMzE1Li4zYWZjMGMy
ZTNjNjFjYzc2ZWRlMzYwYzY0N2EzNTVmOWRjZDA4MGU0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
UnVubmVyLmNwcApAQCAtMjE0NCwzNyArMjE0NCwzNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBUZXN0
UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhU
TUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCkKIHsKLSAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRl
bnQsIGJhc2VVUkwpKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgTG9h
ZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpxdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFz
ZVVSTCwgdW5yZWFjaGFibGVVUkwpKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1
ZShuZXcgTG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJM
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbihpbnQgaG93RmFy
QmFjaykKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgQmFja0l0ZW0oaG93
RmFyQmFjaykpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVlKG5ldyBCYWNrSXRl
bShob3dGYXJCYWNrKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdh
dGlvbihpbnQgaG93RmFyRm9yd2FyZCkKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1
ZShuZXcgRm9yd2FyZEl0ZW0oaG93RmFyRm9yd2FyZCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xl
dG9uKCktPnF1ZXVlKG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJkKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0
KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUobmV3IExvYWRpbmdTY3JpcHRJ
dGVtKHNjcmlwdCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTm9uTG9hZGluZ1Njcmlw
dChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUo
bmV3IE5vbkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xl
dG9uKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpxdWV1ZVJlbG9hZCgpCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
cXVldWUobmV3IFJlbG9hZEl0ZW0pOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVl
KG5ldyBSZWxvYWRJdGVtKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5j
cHAKaW5kZXggYzJmYzA0ZjEzNmM3NTExNzM0NjYxNzRjMGY3MjQ4ZDQwYzQ1ODY3OC4uZDI2ZTQw
M2RkZDg2YzBiYWRlYTAwMjM1YTk0NDRmMzc2NzhlNWQ1YiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvV29ya1F1ZXVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9Xb3Jr
UXVldWUuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHN0YXRpYyBXb3JrUXVldWVJdGVtKiB0aGVRdWV1
ZVtxdWV1ZUxlbmd0aF07CiBzdGF0aWMgdW5zaWduZWQgc3RhcnRPZlF1ZXVlOwogc3RhdGljIHVu
c2lnbmVkIGVuZE9mUXVldWU7CiAKLVdvcmtRdWV1ZSogV29ya1F1ZXVlOjpzaGFyZWQoKQorV29y
a1F1ZXVlKiBXb3JrUXVldWU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdvcmtRdWV1ZSog
c2hhcmVkSW5zdGFuY2UgPSBuZXcgV29ya1F1ZXVlOwogICAgIHJldHVybiBzaGFyZWRJbnN0YW5j
ZTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmgKaW5kZXggODM1ODVlYTY3ODNmYjdjOGJlMzQwZDQ5
ZTMxMDU0NWFkYzU4MWU0OS4uNDRlNzg2NDAxZjNmZDg0YjhiZmFjZDJhNThjYmZkNmVlOGU4NGQ4
ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmgKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmgKQEAgLTMzLDcgKzMzLDcgQEAgY2xhc3MgV29y
a1F1ZXVlSXRlbTsKIAogY2xhc3MgV29ya1F1ZXVlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV29y
a1F1ZXVlKiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV29ya1F1ZXVlKiBzaW5nbGV0b24oKTsKIAog
ICAgIHZvaWQgcXVldWUoV29ya1F1ZXVlSXRlbSopOwogICAgIFdvcmtRdWV1ZUl0ZW0qIGRlcXVl
dWUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBk
MjVlMDc4ODRkZTViYTNhMmRmNTQ1MGU3NTgzYTg5Y2NlNzYzMDFhLi5lNDU1MzM4YTliMWNmY2Jh
MzdmY2I0OGI1YzkwMTc5MDc5YTFkMWM2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIFtwcmV2VGVzdEJGSXRlbSByZWxlYXNlXTsK
ICAgICBwcmV2VGVzdEJGSXRlbSA9IFtbW1ttYWluRnJhbWUgd2ViVmlld10gYmFja0ZvcndhcmRM
aXN0XSBjdXJyZW50SXRlbV0gcmV0YWluXTsKIAotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNs
ZWFyKCk7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKGZhbHNlKTsKKyAgICBX
b3JrUXVldWU6OnNpbmdsZXRvbigpLT5jbGVhcigpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9u
KCktPnNldEZyb3plbihmYWxzZSk7CiAKICAgICBib29sIGlnbm9yZVdlYkNvcmVOb2RlTGVha3Mg
PSBzaG91bGRJZ25vcmVXZWJDb3JlTm9kZUxlYWtzKHRlc3RVUkwpOwogICAgIGlmIChpZ25vcmVX
ZWJDb3JlTm9kZUxlYWtzKQpAQCAtMTg5NSw3ICsxODk1LDcgQEAgc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKICAgICBbRXZlbnRTZW5kaW5nQ29udHJvbGxlciBj
bGVhclNhdmVkRXZlbnRzXTsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBzZXRTZWxlY3RlZERP
TVJhbmdlOm5pbCBhZmZpbml0eTpOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbV07CiAKLSAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9u
KCktPmNsZWFyKCk7CiAKICAgICBpZiAoZ1Rlc3RSdW5uZXItPmNsb3NlUmVtYWluaW5nV2luZG93
c1doZW5Db21wbGV0ZSgpKSB7CiAgICAgICAgIE5TQXJyYXkqIGFycmF5ID0gW0R1bXBSZW5kZXJU
cmVlV2luZG93IG9wZW5XaW5kb3dzXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFt
ZUxvYWREZWxlZ2F0ZS5tbQppbmRleCAwNDU3MjkzNTM2MjAxNDgwZDE5MTI2NTgyNmJmNTEzZDBj
ZjNiNzRkLi40MzBjYjA3ZWU2MjUzOTVjYzZlOGQ5ZDRiM2YwOGRkYTMzNGQwODc0IDEwMDY0NAot
LS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tCkBAIC0xNDYsNyAr
MTQ2LDcgQEAKICNlbmRpZgogCiAgICAgLy8gaWYgd2UgZmluaXNoIGFsbCB0aGUgY29tbWFuZHMs
IHdlJ3JlIHJlYWR5IHRvIGR1bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+
cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoV29y
a1F1ZXVlOjpzaW5nbGV0b24oKS0+cHJvY2Vzc1dvcmsoKSAmJiAhZ1Rlc3RSdW5uZXItPndhaXRU
b0R1bXAoKSkKICAgICAgICAgZHVtcCgpOwogfQogCkBAIC0xNTksOSArMTU5LDkgQEAKIHsKICAg
ICBpZiAoW2RhdGFTb3VyY2Ugd2ViRnJhbWVdID09IHRvcExvYWRpbmdGcmFtZSkgewogICAgICAg
ICB0b3BMb2FkaW5nRnJhbWUgPSBuaWw7Ci0gICAgICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNl
dEZyb3plbih0cnVlKTsgLy8gZmlyc3QgY29tcGxldGUgbG9hZCBmcmVlemVzIHRoZSBxdWV1ZSBm
b3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0CisgICAgICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCkt
PnNldEZyb3plbih0cnVlKTsgLy8gZmlyc3QgY29tcGxldGUgbG9hZCBmcmVlemVzIHRoZSBxdWV1
ZSBmb3IgdGhlIHJlc3Qgb2YgdGhpcyB0ZXN0CiAgICAgICAgIGlmICghZ1Rlc3RSdW5uZXItPndh
aXRUb0R1bXAoKSkgewotICAgICAgICAgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50
KCkpCisgICAgICAgICAgICBpZiAoV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+Y291bnQoKSkKICAg
ICAgICAgICAgICAgICBbc2VsZiBwZXJmb3JtU2VsZWN0b3I6QHNlbGVjdG9yKHByb2Nlc3NXb3Jr
Oikgd2l0aE9iamVjdDpuaWwgYWZ0ZXJEZWxheTowXTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBkdW1wKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
VGVzdFJ1bm5lck1hYy5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFj
Lm1tCmluZGV4IGQzMmQ5NjQ2MGQyZWI2Yjc5ZDg3NDRjOWJhMjY4NTZiMmY3MmQ3MmEuLjc3Y2Yx
MWQ1MDU1ZjVmMzZlZDkzNzFmNGIzNGU1YWUyNjFiZDZkOTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCkBAIC0yNjEsNyArMjYxLDcgQEAgc2l6ZV90IFRlc3RS
dW5uZXI6OndlYkhpc3RvcnlJdGVtQ291bnQoKQogCiB2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURv
bmUoKQogewotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29y
a1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICF0b3BM
b2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPmNvdW50KCkpCiAgICAgICAg
IGR1bXAoKTsKICAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKIH0KQEAgLTMzOSw3ICszMzksNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVm
IHRhcmdldCkKICAgICBOU1N0cmluZyAqbnN1cmxTdHJpbmcgPSBbbnN1cmwgYWJzb2x1dGVTdHJp
bmddOwogCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGFic29sdXRlVVJMKEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbbnN1cmxTdHJpbmcgVVRGOFN0cmluZ10pKTsK
LSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVUkwu
Z2V0KCksIHRhcmdldCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVlKG5ldyBM
b2FkSXRlbShhYnNvbHV0ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0QWNjZXB0c0VkaXRpbmcoYm9vbCBuZXdBY2NlcHRzRWRpdGluZykKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCmluZGV4IDNkY2VjZjc0M2RiZTQ5ZWJl
YmM4MDA3MGQwMTkxY2NiYWIwY2YyODEuLmFlYmExYmUxNTgzMWZhNTQ4Njc4ZjZiN2Q4YzdmNjVh
MjA0NmRkZjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNw
cApAQCAtMTEwNyw4ICsxMTA3LDggQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcm
IGlucHV0TGluZSkKICAgICBpZiAod2ViVmlldyAmJiBTVUNDRUVERUQod2ViVmlldy0+YmFja0Zv
cndhcmRMaXN0KCZiZkxpc3QpKSkKICAgICAgICAgYmZMaXN0LT5jdXJyZW50SXRlbSgmcHJldlRl
c3RCRkl0ZW0pOwogCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xlYXIoKTsKLSAgICBXb3Jr
UXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4oZmFsc2UpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xl
dG9uKCktPmNsZWFyKCk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+c2V0RnJvemVuKGZh
bHNlKTsKIAogICAgIE1TRyBtc2cgPSB7IDAgfTsKICAgICBIV05EIGhvc3RXaW5kb3c7CkBAIC0x
MTQwLDcgKzExNDAsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRM
aW5lKQogICAgIH0KIAogICAgIC8vIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgY2xlYXJTYXZlZEV2
ZW50cwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNsZWFyKCk7CisgICAgV29ya1F1ZXVlOjpz
aW5nbGV0b24oKS0+Y2xlYXIoKTsKIAogICAgIGlmICg6OmdUZXN0UnVubmVyLT5jbG9zZVJlbWFp
bmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoKSkgewogICAgICAgICBWZWN0b3I8SFdORD4gd2luZG93
cyA9IG9wZW5XaW5kb3dzKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RnJhbWVMb2FkRGVsZWdhdGUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9h
ZERlbGVnYXRlLmNwcAppbmRleCBhYmJhNGM4NzQ2ZTY3MmIxMTgwZDZmZTQxZjY0ODRiM2U2NjYz
NzE2Li5iNWNmODg0MDk2Y2UwMjUyNWQyN2QyYzg3YjllNzVjM2I2OWFiNzQxIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVsZWdhdGUuY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKQEAgLTE5Nyw3ICsx
OTcsNyBAQCB2b2lkIEZyYW1lTG9hZERlbGVnYXRlOjpwcm9jZXNzV29yaygpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIGlmIHdlIGZpbmlzaCBhbGwgdGhlIGNvbW1hbmRzLCB3ZSdyZSByZWFk
eSB0byBkdW1wIHN0YXRlCi0gICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3Jr
KCkgJiYgITo6Z1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkKKyAgICBpZiAoV29ya1F1ZXVlOjpz
aW5nbGV0b24oKS0+cHJvY2Vzc1dvcmsoKSAmJiAhOjpnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgp
KQogICAgICAgICBkdW1wKCk7CiB9CiAKQEAgLTIzNCwxMiArMjM0LDEyIEBAIHZvaWQgRnJhbWVM
b2FkRGVsZWdhdGU6OmxvY2F0aW9uQ2hhbmdlRG9uZShJV2ViRXJyb3IqLCBJV2ViRnJhbWUqIGZy
YW1lKQogICAgICAgICByZXR1cm47CiAKICAgICB0b3BMb2FkaW5nRnJhbWUgPSAwOwotICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbih0cnVlKTsKKyAgICBXb3JrUXVldWU6OnNpbmds
ZXRvbigpLT5zZXRGcm96ZW4odHJ1ZSk7CiAKICAgICBpZiAoOjpnVGVzdFJ1bm5lci0+d2FpdFRv
RHVtcCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+
Y291bnQoKSkgeworICAgIGlmIChXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5jb3VudCgpKSB7CiAg
ICAgICAgIGlmICghcHJvY2Vzc1dvcmtUaW1lcklEKQogICAgICAgICAgICAgcHJvY2Vzc1dvcmtU
aW1lcklEID0gOjpTZXRUaW1lcigwLCAwLCAwLCBwcm9jZXNzV29ya1RpbWVyKTsKICAgICAgICAg
ZGVsZWdhdGVzV2l0aERlbGF5ZWRXb3JrKCkuYXBwZW5kKHRoaXMpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCmluZGV4IGU0NGQ1MDhhODQ4MjA2Y2RkZmQzNmY0
Y2JmNmIwYzQ1YTNjMzUzYjguLjM1YjBjYjU2MDE2MTNmNDhlNmQxYWVkMGNkOTdmZTkxNWM1NjA1
OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNw
cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKQEAgLTI2
NSw3ICsyNjUsNyBAQCBzaXplX3QgVGVzdFJ1bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiB2
b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUoKQogewogICAgIC8vIFNhbWUgYXMgb24gbWFjLiAg
VGhpcyBjYW4gYmUgc2hhcmVkLgotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExvYWRpbmdG
cmFtZSAmJiAhV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQoKSkKKyAgICBpZiAobV93YWl0VG9E
dW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPmNvdW50
KCkpCiAgICAgICAgIGR1bXAoKTsKICAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsKIH0KQEAgLTMx
Nyw3ICszMTcsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmluZ1JlZiB1cmws
IEpTU3RyaW5nUmVmIHRhcmdldCkKICAgICB3c3RyaW5nIHdBYnNvbHV0ZVVSTCA9IHJlc3BvbnNl
VVJMICsgVEVYVCgiLyIpICsgd1VSTDsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4ganNB
YnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyh3QWJzb2x1dGVV
UkwuZGF0YSgpLCB3QWJzb2x1dGVVUkwubGVuZ3RoKCkpKTsKIAotICAgIFdvcmtRdWV1ZTo6c2hh
cmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsK
KyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0
ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWNjZXB0c0Vk
aXRpbmcoYm9vbCBhY2NlcHRzRWRpdGluZykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkKaW5kZXggNDUzMTk5NWE5YjQyZGZm
MTgyMGViNzhhYWIwZDFlOWJmN2VlODVlMy4uOGZlNTY5MzliY2Q1MTdiOWYyODYxZTJiN2Q2Yjg2
MmJmYmFkYjFjMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2Vycy9jcHBfdW5pdHRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9j
aGVja2Vycy9jcHBfdW5pdHRlc3QucHkKQEAgLTQwOTMsMTQgKzQwOTMsMTQgQEAgY2xhc3MgV2Vi
S2l0U3R5bGVUZXN0KENwcFN0eWxlVGVzdEJhc2UpOgogICAgICAgICAgICAgJ31cbicsCiAgICAg
ICAgICAgICAnJykKICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAg
ICAgICAgJyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoIShleHByZXNz
aW9uKSkgeyBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9f
TElORV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKKyAgICAgICAg
ICAgICcjZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCEoZXhwcmVzc2lv
bikpIHsgVGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS50ZXN0RmFpbGVkKF9fRklMRV9fLCBf
X0xJTkVfXywgI2V4cHJlc3Npb24pOyByZXR1cm47IH0gfSB3aGlsZSAoMClcbicsCiAgICAgICAg
ICAgICAnJykKICAgICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAg
ICAgJyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoICEoZXhwcmVzc2lv
bikpIHsgVGVzdHNDb250cm9sbGVyOjpzaGFyZWQoKS50ZXN0RmFpbGVkKF9fRklMRV9fLCBfX0xJ
TkVfXywgI2V4cHJlc3Npb24pOyByZXR1cm47IH0gfSB3aGlsZSAoMClcbicsCisgICAgICAgICAg
ICAnI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICggIShleHByZXNzaW9u
KSkgeyBUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9f
TElORV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKICAgICAgICAg
ICAgICdFeHRyYSBzcGFjZSBhZnRlciAoIGluIGlmICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs1XScp
CiAgICAgICAgICMgRklYTUU6IGN1cnJlbnRseSB3ZSBvbmx5IGNoZWNrIGZpcnN0IGNvbmRpdGlv
bmFsLCBzbyB3ZSBjYW5ub3QgZGV0ZWN0IGVycm9ycyBpbiBuZXh0IG9uZXMuCiAgICAgICAgICMg
c2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAotICAgICAgICAjICAgICAnI2RlZmluZSBURVNU
X0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICghKGV4cHJlc3Npb24pKSB7IFRlc3RzQ29udHJv
bGxlcjo6c2hhcmVkKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICNleHByZXNzaW9u
KTsgcmV0dXJuOyB9IH0gd2hpbGUgKDAgKVxuJywKKyAgICAgICAgIyAgICAgJyNkZWZpbmUgVEVT
VF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoIShleHByZXNzaW9uKSkgeyBUZXN0c0NvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9fTElORV9fLCAjZXhwcmVz
c2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwIClcbicsCiAgICAgICAgICMgICAgICdNaXNtYXRj
aGluZyBzcGFjZXMgaW5zaWRlICgpIGluIGlmICBbd2hpdGVzcGFjZS9wYXJlbnNdIFs1XScpCiAg
ICAgICAgIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKICAgICAgICAgICAgICdXVEZfTUFL
RV9OT05DT1BZQUJMRShDbGFzc05hbWUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDtcbicsCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAKaW5k
ZXggNzJlZmVmMWFjODZhYTQ0ZjlmMjE3MzI3NjhlYjAzODZiMGIxMmI3YS4uNTNmMzlhODc0M2Mz
NDM1ODhmZGFlMTFmMDllNDUwYzNkZjFjMjg5MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcApAQCAtMzYsNyArMzYsNyBAQAogCiBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKLUluamVjdGVkQnVuZGxlQ29udHJvbGxlciYgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKQorSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyJiBJ
bmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIEluamVj
dGVkQnVuZGxlQ29udHJvbGxlciYgc2hhcmVkID0gKm5ldyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXI7CiAgICAgcmV0dXJuIHNoYXJlZDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVk
QnVuZGxlQ29udHJvbGxlci5oCmluZGV4IDYxYTA5NmM2MDNjYjY4ZDgwNjNmNzU4YzM4YWE3ZDli
MTM0NjY1OTQuLmVhYTdmMGQxNzhkNDM2ODM2NmY1ZDI2ZTFlOTE2YmFiNWU4M2VmMTMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmgKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaApAQCAtMzYs
NyArMzYsNyBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZVRlc3Q7CiAKIGNsYXNzIEluamVjdGVkQnVu
ZGxlQ29udHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIEluamVjdGVkQnVuZGxlQ29udHJv
bGxlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIEluamVjdGVkQnVuZGxlQ29udHJvbGxlciYgc2lu
Z2xldG9uKCk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoV0tCdW5kbGVSZWYsIFdLVHlwZVJlZik7
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVNYWluLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcAppbmRleCA2ODQw
MmNhMmExNDc0ZDBjOTNmOTJlMDY4MWI1MGY4MDlkYzE5NTM3Li5iMjUzN2Y3MzdkNTFlODllZTRi
MWI1NWFjNWQ1ZDE1ZjQwZGRkOGNkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0lu
amVjdGVkQnVuZGxlTWFpbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1
bmRsZU1haW4uY3BwCkBAIC0zNyw3ICszNyw3IEBAIGV4dGVybiAiQyIKICNlbmRpZgogdm9pZCBX
S0J1bmRsZUluaXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6
YXRpb25Vc2VyRGF0YSkKIHsKLSAgICBUZXN0V2ViS2l0QVBJOjpJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXI6OnNoYXJlZCgpLmluaXRpYWxpemUoYnVuZGxlLCBpbml0aWFsaXphdGlvblVzZXJEYXRh
KTsKKyAgICBUZXN0V2ViS2l0QVBJOjpJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmluaXRpYWxpemUoYnVuZGxlLCBpbml0aWFsaXphdGlvblVzZXJEYXRhKTsKIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5o
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRlc3QuaAppbmRleCBkMGY5OTZh
ZmZlOTFlNzVmMTg3MGQxMDUwNTNhYjk1OWNlMDI4MzQzLi5hZDJjYjk1ODExNWY5ZDBjNTk4YWNk
MmE4YjNmOWNlYzUxM2MwMGVjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVj
dGVkQnVuZGxlVGVzdC5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVU
ZXN0LmgKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHB1YmxpYzoKICAgICAgICAgUmVn
aXN0ZXIoY29uc3Qgc3RkOjpzdHJpbmcmIHRlc3QpCiAgICAgICAgIHsKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkucmVnaXN0ZXJDcmVhdGVJbmplY3RlZEJ1
bmRsZVRlc3RGdW5jdGlvbih0ZXN0LCBSZWdpc3Rlcjo6Y3JlYXRlKTsKKyAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJDcmVhdGVJbmplY3Rl
ZEJ1bmRsZVRlc3RGdW5jdGlvbih0ZXN0LCBSZWdpc3Rlcjo6Y3JlYXRlKTsKICAgICAgICAgfQog
CiAgICAgcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcApp
bmRleCBjOTViNDY5MjQ5MzY1OTFkZWEyNDVhYWQ4OWUyZWI0MjlhZDI5ZjY4Li41ZGNkOTFkYTg0
YWJjNTAxMmRjZWUxOTZiYTQ2MjA3ZmU2MzZjNmZiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRsZS5jcHAK
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1D
b250cm9sc19CdW5kbGUuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyB2b2lkIGRpZEFzc29j
aWF0ZUZvcm1Db250cm9scyhXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tBcnJheVJlZiBlbGVtZW50
SGFuCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG51bWJlck9mRWxlbWVudHMgPSBhZG9w
dFdLKFdLVUludDY0Q3JlYXRlKFdLQXJyYXlHZXRTaXplKGVsZW1lbnRIYW5kbGVzKSkpOwogICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIFV0aWw6OnRvV0soIk51bWJl
ck9mQ29udHJvbHMiKS5nZXQoKSwgbnVtYmVyT2ZFbGVtZW50cy5nZXQoKSk7CiAKLSAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkuYnVuZGxl
KCksIFV0aWw6OnRvV0soIkRpZFJlY2VpdmVEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMiKS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiRGlkUmVj
ZWl2ZURpZEFzc29jaWF0ZUZvcm1Db250cm9scyIpLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CiB9CiAKIERpZEFzc29jaWF0ZUZvcm1Db250cm9sc1Rlc3Q6OkRpZEFzc29jaWF0ZUZvcm1Db250
cm9sc1Rlc3QoY29uc3Qgc3RkOjpzdHJpbmcmIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVu
ZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9IaXRUZXN0UmVzdWx0
Tm9kZUhhbmRsZV9CdW5kbGUuY3BwCmluZGV4IGZiOTRiZjgyZTlkMWJhNDRjOWMyMjVjMzQ4MjM2
N2E2ZGUwYTc1ZTUuLmQ2OGZmMjE5M2Q3OGEzN2I1ZTJkZDcyOGMzNTk4NWJiZmM0N2EwNzEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9IaXRUZXN0UmVzdWx0
Tm9kZUhhbmRsZV9CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9IaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUuY3BwCkBAIC00OSw3ICs0OSw3IEBA
IHB1YmxpYzoKICAgICAgICAgaWYgKCFub2RlSGFuZGxlKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKLSAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJIaXRUZXN0UmVzdWx0Tm9kZUhh
bmRsZVRlc3REb25lTWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygiSGl0VGVzdFJlc3Vs
dE5vZGVIYW5kbGVUZXN0RG9uZU1lc3NhZ2VCb2R5IikuZ2V0KCkpOworICAgICAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIFV0aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFuZGxlVGVzdERvbmVNZXNzYWdlTmFt
ZSIpLmdldCgpLCBVdGlsOjp0b1dLKCJIaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZVRlc3REb25lTWVz
c2FnZUJvZHkiKS5nZXQoKSk7CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIGRpZENyZWF0ZVBh
Z2UoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS0J1bmRsZVBhZ2VSZWYgcGFnZSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9QYXN0ZWJvYXJkTm90aWZpY2F0aW9u
c19CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1Bhc3RlYm9h
cmROb3RpZmljYXRpb25zX0J1bmRsZS5jcHAKaW5kZXggYzk4NTUyMDQxOWVjZGMzNzAxMDBiZjk3
YTJkZTdkNmM3NDFlYmI2MC4uOGMxNDA0ZTdhNzkxZGVmZTllMDI3MTFiZDczYTkzZTQxODQ2ZmYw
YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1Bhc3RlYm9h
cmROb3RpZmljYXRpb25zX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyL1Bhc3RlYm9hcmROb3RpZmljYXRpb25zX0J1bmRsZS5jcHAKQEAgLTQ5LDcgKzQ5
LDcgQEAgc3RhdGljIEluamVjdGVkQnVuZGxlVGVzdDo6UmVnaXN0ZXI8UGFzdGVib2FyZE5vdGlm
aWNhdGlvbnNUZXN0PiByZWdpc3RyYXIoIlBhc3QKIHN0YXRpYyB2b2lkIHdpbGxXcml0ZVRvUGFz
dGVib2FyZChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5n
ZSwgIGNvbnN0IHZvaWQqKQogewogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwgVXRp
bDo6dG9XSygiUGFzdGVib2FyZE5vdGlmaWNhdGlvblRlc3REb25lTWVzc2FnZU5hbWUiKS5nZXQo
KSwgVXRpbDo6dG9XSygid2lsbFdyaXRldG9QYXN0ZWJvYXJkRmFpbCIpLmdldCgpKTsKKyAgICAg
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJQYXN0ZWJvYXJkTm90aWZpY2F0aW9uVGVzdERvbmVN
ZXNzYWdlTmFtZSIpLmdldCgpLCBVdGlsOjp0b1dLKCJ3aWxsV3JpdGV0b1Bhc3RlYm9hcmRGYWls
IikuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBnZXRQYXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdL
QnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSwgV0tBcnJheVJlZiog
cGFzdGVib2FyZFR5cGVzLCBXS0FycmF5UmVmKiBwYXN0ZWJvYXJkRGF0YSwgY29uc3Qgdm9pZCop
CkBAIC02Miw3ICs2Miw3IEBAIHN0YXRpYyB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2Uo
V0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhCiAKIHN0YXRpYyB2b2lk
IGRpZFdyaXRlVG9QYXN0ZWJvYXJkKFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopCiB7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJQYXN0ZWJvYXJkTm90aWZpY2F0aW9uVGVzdERvbmVNZXNz
YWdlTmFtZSIpLmdldCgpLCBVdGlsOjp0b1dLKCJkaWRXcml0ZVRvUGFzdGVib2FyZCIpLmdldCgp
KTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0
RG9uZU1lc3NhZ2VOYW1lIikuZ2V0KCksIFV0aWw6OnRvV0soImRpZFdyaXRlVG9QYXN0ZWJvYXJk
IikuZ2V0KCkpOwogfQogCiBQYXN0ZWJvYXJkTm90aWZpY2F0aW9uc1Rlc3Q6OlBhc3RlYm9hcmRO
b3RpZmljYXRpb25zVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XaWxsTG9hZF9CdW5kbGUuY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxMb2FkX0J1bmRsZS5jcHAK
aW5kZXggMmNiMDY4NmJhOTY4ZDRkNDdhODgwNThkMmIzMDkyNzQxZmFhZTY3My4uMDkxZTVhOTQy
YTFlODkxZmRhN2MxODM2YmRiYjJlZThhZGE2MDRiNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxMb2FkX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxMb2FkX0J1bmRsZS5jcHAKQEAgLTUwLDcgKzUw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5n
ZXQoKSwgVXRpbDo6dG9XSygiVVJMUmVxdWVzdFJldHVybiIpLmdldCgpLCByZXF1ZXN0KTsKICAg
ICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgVXRpbDo6dG9XSygi
VXNlckRhdGFSZXR1cm4iKS5nZXQoKSwgdXNlckRhdGEpOwogCi0gICAgICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwgVXRp
bDo6dG9XSygiV2lsbExvYWRVUkxSZXF1ZXN0UmV0dXJuIikuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJXaWxsTG9hZFVSTFJlcXVlc3RS
ZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyB2
b2lkIHdpbGxMb2FkRGF0YVJlcXVlc3QoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0LCBXS0RhdGFSZWYgZGF0YSwgV0tTdHJpbmdSZWYgTUlNRVR5cGUsIFdLU3Ry
aW5nUmVmIGVuY29kaW5nTmFtZSwgV0tVUkxSZWYgdW5yZWFjaGFibGVVUkwsIFdLVHlwZVJlZiB1
c2VyRGF0YSwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgVXRpbDo6
dG9XSygiVW5yZWFjaGFibGVVUkxSZXR1cm4iKS5nZXQoKSwgdW5yZWFjaGFibGVVUkwpOwogICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dLKCJV
c2VyRGF0YVJldHVybiIpLmdldCgpLCB1c2VyRGF0YSk7CiAKLSAgICAgICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGls
Ojp0b1dLKCJXaWxsTG9hZERhdGFSZXF1ZXN0UmV0dXJuIikuZ2V0KCksIG1lc3NhZ2VCb2R5Lmdl
dCgpKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJXaWxsTG9hZERhdGFSZXF1ZXN0
UmV0dXJuIikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIH0KIApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxTZW5kU3VibWl0RXZlbnRf
QnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XaWxsU2VuZFN1
Ym1pdEV2ZW50X0J1bmRsZS5jcHAKaW5kZXggZmM3Y2E4YWNlOGEzMzkyZTViYzY2NDJhODlmNjgz
ZGZkOGEzMWY2ZS4uZmE3ZDJhOWE3ZjgwODRkZmFlZGExOGNiODA2NWJmZjA2Yjg3MmJiMiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxTZW5kU3VibWl0
RXZlbnRfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
V2lsbFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyBJ
bmplY3RlZEJ1bmRsZVRlc3Q6OlJlZ2lzdGVyPFdpbGxTZW5kU3VibWl0RXZlbnRUZXN0PiByZWdp
c3RyYXIoIldpbGxTZW5kCiAKIHN0YXRpYyB2b2lkIHdpbGxTZW5kU3VibWl0RXZlbnQoV0tCdW5k
bGVQYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIFdLQnVu
ZGxlRnJhbWVSZWYsIFdLRGljdGlvbmFyeVJlZiB2YWx1ZXMsIGNvbnN0IHZvaWQqKQogewotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5i
dW5kbGUoKSwgVXRpbDo6dG9XSygiRGlkUmVjZWl2ZVdpbGxTZW5kU3VibWl0RXZlbnQiKS5nZXQo
KSwgdmFsdWVzKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJv
bGxlcjo6c2luZ2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIkRpZFJlY2VpdmVXaWxsU2Vu
ZFN1Ym1pdEV2ZW50IikuZ2V0KCksIHZhbHVlcyk7CiB9CiAKIFdpbGxTZW5kU3VibWl0RXZlbnRU
ZXN0OjpXaWxsU2VuZFN1Ym1pdEV2ZW50VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmll
cikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmNwcAppbmRleCA1YmJiZWVlYzJh
NWNkNDgzZGY3Mzk2NzdkOGE3NGE2N2UzNzhiYTQzLi45MTMzMDVkN2JlZjA4OGExOThkMTZkYWEx
Yzk2YzY1YTIzNDMxMjQwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3Bw
CkBAIC01NCw3ICs1NCw3IEBAIGNsYXNzIFByaW50ZXIgOiBwdWJsaWMgOjp0ZXN0aW5nOjpFbXB0
eVRlc3RFdmVudExpc3RlbmVyIHsKICAgICBzdGQ6OnN0cmluZyBmYWlsdXJlczsKIH07CiAKLVRl
c3RzQ29udHJvbGxlciYgVGVzdHNDb250cm9sbGVyOjpzaGFyZWQoKQorVGVzdHNDb250cm9sbGVy
JiBUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFRlc3RzQ29udHJvbGxlcj4gc2hhcmVkOwogICAgIHJldHVybiBzaGFyZWQ7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxlci5oIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuaAppbmRleCBmNTVhZWFhZjNiYjZjNzI3ZDAzZWM3MGFh
ZDViYjc4MTQxYjc3Yjc5Li5lYTg0OTY4NTNiOWQ1NDNjZTlmZDI2MTIyZWNhOTkxNDhiNTY5Yjk2
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxlci5oCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAg
bmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCiBjbGFzcyBUZXN0c0NvbnRyb2xsZXIgewogcHVi
bGljOgotICAgIHN0YXRpYyBUZXN0c0NvbnRyb2xsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBU
ZXN0c0NvbnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgYm9vbCBydW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvbWFpbi5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNwcAppbmRleCBmYzI5YjFlMGUzOWJm
OTNiYTJlZjA1NGRiNzg1MWQyM2EzMjZjMTYxLi45MDAyYmM3YjVmODExZTQ0MjEyN2Q4MmRiZDBl
ODI2NzA3YTgyMTZhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNwcApAQCAtNTYsNyArNTYsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAKICAgICB1c2VYMTFXaW5kb3cgPSBj
aGVja0ZvclVzZVgxMVdpbmRvd0FyZ3VtZW50KGFyZ2MsIGFyZ3YpOwogCi0gICAgaW50IHJldHVy
bkNvZGUgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1bihhcmdj
LCBhcmd2KSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKKyAgICBpbnQgcmV0dXJuQ29k
ZSA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2Ms
IGFyZ3YpID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOwogCiAgICAgZXdrX3NodXRkb3du
KCk7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL21haW4uY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9ndGsvbWFpbi5jcHAKaW5kZXggMWI3ZmVmNjRmZDA0MjBiOTg2ZWVl
YzhmYThhZjI3Y2Y5NWZlYjVlNC4uMmM2ODU2NTk1YWUzMjdjOThhZTAwMmUyMzU2NWRlNmEwM2E3
OTRhZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvbWFpbi5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvbWFpbi5jcHAKQEAgLTMyLDUgKzMyLDUgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewogICAgIGd0a19pbml0KCZhcmdjLCAmYXJndik7
CiAKLSAgICByZXR1cm4gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaGFyZWQoKS5y
dW4oYXJnYywgYXJndikgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7CisgICAgcmV0dXJu
IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2MsIGFy
Z3YpID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9pb3MvbWFpbklPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL21h
aW5JT1MubW0KaW5kZXggZWIxY2RmNGUzZDgyNThkN2U3MzBhMGJhNmNjZjRjZDA4OGMwYmU1My4u
ZmEyYmUyZWFjMjVjYTQ1YmIxNDFmMjYwOThjNWY2MmY5ZGEyNjQ4MCAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9pb3MvbWFpbklPUy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2lvcy9tYWluSU9TLm1tCkBAIC0zMSw3ICszMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKICAgICBOU0F1dG9yZWxlYXNlUG9vbCAqcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBv
b2wgYWxsb2NdIGluaXRdOwogCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZh
dWx0c10gcmVtb3ZlUGVyc2lzdGVudERvbWFpbkZvck5hbWU6QCJUZXN0V2ViS2l0QVBJIl07Ci0g
ICAgYm9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgp
LnJ1bihhcmdjLCBhcmd2KTsKKyAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3Rz
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2MsIGFyZ3YpOwogCiAgICAgW3Bvb2wgZHJh
aW5dOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9tYWluTWFjLm1tIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvbWFpbk1hYy5tbQppbmRleCAwOTgwNGNlODA0N2I2Zjll
ZmY0NTNiNzVhYzdkZWNlNDY2NzlkNDgxLi4wZjBmZjhkZTdlMGFkYWUzYTBkYmVmN2JjMDVmNTY2
NDNlMmUyNWUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9tYWluTWFjLm1t
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0KQEAgLTMzLDcgKzMzLDcg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFtbTlNVc2VyRGVmYXVsdHMg
c3RhbmRhcmRVc2VyRGVmYXVsdHNdIHJlbW92ZVBlcnNpc3RlbnREb21haW5Gb3JOYW1lOkAiVGVz
dFdlYktpdEFQSSJdOwogICAgIFtOU0FwcGxpY2F0aW9uIHNoYXJlZEFwcGxpY2F0aW9uXTsKIAot
ICAgIGJvb2wgcGFzc2VkID0gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaGFyZWQo
KS5ydW4oYXJnYywgYXJndik7CisgICAgYm9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0
c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1bihhcmdjLCBhcmd2KTsKIAogICAgIFtwb29sIGRy
YWluXTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vbWFpbi5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL3dpbi9tYWluLmNwcAppbmRleCBkOTQ5OWM1MjRjMzNkYTZmODY1
ZjI1MThkZGI3ZmQzMDUzM2E2NjQ5Li43MGI2YTA5ODc5Y2M4Y2E1NWZkNjA2MzA5YTkzNDk0YzYz
OGE0YTg4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9tYWluLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9tYWluLmNwcApAQCAtNTAsNyArNTAsNyBAQCBpbnQg
bWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGxp
bmUgb25jZSA8aHR0cDovL3dlYmtpdC5vcmcvYi8zMjg2Nz4gaXMgZml4ZWQuCiAgICAgOjpPbGVJ
bml0aWFsaXplKDApOwogCi0gICAgYm9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0Nv
bnRyb2xsZXI6OnNoYXJlZCgpLnJ1bihhcmdjLCBhcmd2KTsKKyAgICBib29sIHBhc3NlZCA9IFRl
c3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2MsIGFyZ3Yp
OwogCiAgICAgcmV0dXJuIHBhc3NlZCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKIH0K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKaW5kZXggMzQ4ZDY5MTcyZjUyMTA1MzBm
YzE1ZmIyMGQxYWJmZjYwNDQxMDJjYi4uOGIyMjNmZTRjOTkwYjMzMWU4MmRiMzRjZDhiZDU4YTEy
OTVmNTJiYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5jcHAKQEAgLTc0LDcgKzc0
LDcgQEAgYm9vbCBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6ZW5oYW5jZWRBY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpCiAjaWYgIVBMQVRGT1JNKEdUSykgJiYgIVBMQVRGT1JNKEVGTCkKIFBhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RF
bGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICB2b2lkKiByb290ID0g
V0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKTsKICAgICAKICAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVtZW50Pihy
b290KSk7ICAgIApAQCAtODIsNyArODIsNyBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiAKIFBhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3Vz
ZWRFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICB2b2lkKiByb290
ID0gV0tBY2Nlc3NpYmlsaXR5Rm9jdXNlZE9iamVjdChwYWdlKTsKICAgICAKICAgICByZXR1cm4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PFBsYXRmb3JtVUlFbGVt
ZW50Pihyb290KSk7ICAgIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKaW5kZXggOTBk
NGYxNTM5YzJmYmVkZjE5MThkOGM2MGUyMjdmYmZjNzY4YjhiNi4uZjAxYTc4MGI3OWRkZDI5ODAz
YjNmMjRhMWI1OGQ3MWM4ZjMwZTJkNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3Bw
CkBAIC0yMDgsNyArMjA4LDcgQEAgc3RhdGljIFdLTXV0YWJsZURpY3Rpb25hcnlSZWYgY3JlYXRl
TW91c2VNZXNzYWdlQm9keShNb3VzZVN0YXRlIHN0YXRlLCBpbnQgYnV0dG8KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjptb3VzZURvd24oaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2Rp
ZmllckFycmF5KSAKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZy
YW1lUmVmIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1l
KTsKICAgICBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShj
b250ZXh0LCBtb2RpZmllckFycmF5KTsKQEAgLTIxNiwxMiArMjE2LDEyIEBAIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZp
ZXJBcnJheSkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7CiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keShBZG9wdFdLLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0
dG9uLCBtb2RpZmllcnMpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1
dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQoZnJhbWUpOwogICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0g
cGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwpAQCAtMjI5LDcgKzIy
OSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VVcChpbnQgYnV0dG9uLCBK
U1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkoQWRvcHRXSywgY3JlYXRlTW91c2VNZXNzYWdlQm9k
eShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7Cisg
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQogICAgIFdLUmV0YWlu
UHRyPFdLRG91YmxlUmVmPiB5UmVmKEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKHkpKTsKICAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0
KCksIHlSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bGVhcEZvcndhcmQoaW50
IG1pbGxpc2Vjb25kcykKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCiAgICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IHRpbWVSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUobWlsbGlzZWNvbmRzKSk7
CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB0
aW1lS2V5LmdldCgpLCB0aW1lUmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNj
aGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soKQpAQCAtMjc3LDExICsyNzcsMTEgQEAgdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrKCkKIAogICAgIC8v
IEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5KEFkb3B0V0ssIGNyZWF0ZU1vdXNlTWVzc2Fn
ZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlmaWVycykpOwotICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBtb3VzZURvd25NZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQ
b3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAg
IC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KICAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHkoQWRvcHRXSywgY3JlYXRlTW91c2VNZXNzYWdl
Qm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lLmdldCgpLCBtb3VzZVVwTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBtb3VzZVVwTWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiBzdGF0aWMg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlS2V5RG93bk1lc3NhZ2VC
b2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMsIGludCBsb2Nh
dGlvbikKQEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGlj
dGlvbmFyeVJlZj4gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmCiAKIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVS
ZWYgbW9kaWZpZXJBcnJheSwgaW50IGxvY2F0aW9uKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBw
YWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVu
ZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQoZnJhbWUpOwogICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0g
cGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1vZGlmaWVyQXJyYXkpOwpAQCAtMzE2LDcgKzMx
Niw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBr
ZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4ga2V5RG93bk1lc3NhZ2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtl
eSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBrZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxl
UG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkKQEAgLTMyNCw3ICszMjQsNyBAQCB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmlu
Z1JlZiBrZXkpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVy
IikpOwogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNz
YWdlQm9keSA9IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShrZXksIDAgLyogbW9kaWZpZXJzICov
LCAwIC8qIGxvY2F0aW9uICovKTsKIAotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBr
ZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBrZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5KQpAQCAtMzQ0LDcgKzM0NCw3IEBA
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkp
CiAgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+IHlSZWYoQWRvcHRXSywgV0tEb3VibGVDcmVh
dGUoeSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludCB5LCBKU1N0
cmluZ1JlZiBwaGFzZVN0ciwgSlNTdHJpbmdSZWYgbW9tZW50dW1TdHIsIGJvb2wgYXN5bmNTY3Jv
bGxpbmcpCkBAIC0zOTcsOSArMzk3LDkgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoaW50IHgsIGludAogICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgbW9tZW50dW1L
ZXkuZ2V0KCksIG1vbWVudHVtUmVmLmdldCgpKTsKIAogICAgIGlmIChhc3luY1Njcm9sbGluZykK
LSAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCkpOworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CiAgICAgZWxzZQotICAgICAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBib29sIHBhZ2Vk
KQpAQCAtNDIzLDEyICs0MjMsMTIgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250
aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQpCiAgICAgV0tSZXRh
aW5QdHI8V0tVSW50NjRSZWY+IHBhZ2VkUmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKHBhZ2Vk
KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBwYWdlZEtleS5nZXQoKSwgcGFnZWRSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIEpTVmFsdWVSZWYgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y29udGV4dENsaWNrKCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShw
YWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQpAQCAtNDU3
LDQzICs0NTcsNDMgQEAgSlNWYWx1ZVJlZiBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0
Q2xpY2soKQogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0ZXh0Wm9vbUluKCkKIHsKICAg
ICAvLyBFbnN1cmUgcGFnZSB6b29tIGlzIHJlc2V0LgotICAgIFdLQnVuZGxlUGFnZVNldFBhZ2Va
b29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgMSk7Cisg
ICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKIAotICAgIGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5k
bGVQYWdlR2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpKTsKLSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgKiBab29tTXVsdGlwbGllclJh
dGlvKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFRleHRab29tRmFj
dG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tC
dW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB6b29tRmFjdG9yICogWm9vbU11bHRpcGxpZXJSYXRpbyk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dGV4dFpvb21PdXQoKQogewogICAgIC8vIEVuc3Vy
ZSBwYWdlIHpvb20gaXMgcmVzZXQuCi0gICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3Io
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAgICBXS0J1bmRs
ZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCksIDEpOwogCi0gICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBhZ2VHZXRU
ZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwot
ICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAvIFpvb21NdWx0aXBsaWVyUmF0aW8pOworICAg
IGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VT
ZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCksIHpvb21GYWN0b3IgLyBab29tTXVsdGlwbGllclJhdGlvKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjp6b29tUGFnZUluKCkKIHsKICAgICAvLyBFbnN1cmUgdGV4dCB6b29t
IGlzIHJlc2V0LgotICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgMSk7CisgICAgV0tCdW5kbGVQYWdlU2V0VGV4
dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCAx
KTsKIAotICAgIGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0UGFnZVpvb21GYWN0
b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBXS0J1bmRs
ZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCksIHpvb21GYWN0b3IgKiBab29tTXVsdGlwbGllclJhdGlvKTsKKyAgICBkb3VibGUgem9v
bUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21G
YWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFj
dG9yICogWm9vbU11bHRpcGxpZXJSYXRpbyk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6em9vbVBhZ2VPdXQoKQogewogICAgIC8vIEVuc3VyZSB0ZXh0IHpvb20gaXMgcmVzZXQu
Ci0gICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3Rv
cihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIDEpOwogCi0gICAg
ZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBhZ2VHZXRQYWdlWm9vbUZhY3RvcihJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIFdLQnVuZGxlUGFnZVNldFBh
Z2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgem9v
bUZhY3RvciAvIFpvb21NdWx0aXBsaWVyUmF0aW8pOworICAgIGRvdWJsZSB6b29tRmFjdG9yID0g
V0tCdW5kbGVQYWdlR2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgLyBab29t
TXVsdGlwbGllclJhdGlvKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2Fs
ZVBhZ2VCeShkb3VibGUgc2NhbGUsIGRvdWJsZSB4LCBkb3VibGUgeSkKIHsKICAgICBXS1BvaW50
IG9yaWdpbiA9IHsgeCwgeSB9OwotICAgIFdLQnVuZGxlUGFnZVNldFNjYWxlQXRPcmlnaW4oSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBzY2FsZSwgb3JpZ2luKTsKKyAg
ICBXS0J1bmRsZVBhZ2VTZXRTY2FsZUF0T3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgc2NhbGUsIG9yaWdpbik7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpAQCAtNTE0LDcgKzUxNCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
YWRkVG91Y2hQb2ludChpbnQgeCwgaW50IHkpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+
IHlSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoeSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7
CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50
IHgsIGludCB5KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dXBkYXRlVG91Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKICAgICBXS1JldGFp
blB0cjxXS1VJbnQ2NFJlZj4geVJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZSh5KSk7CiAgICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5Lmdl
dCgpLCB5UmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZp
ZXIoY29uc3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sIGVuYWJsZSkKQEAgLTU2OCw3ICs1
NjgsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNldFRvdWNoTW9kaWZpZXIoY29u
c3QgSlNTdHJpbmdSZWYgJm1vZGlmaWVyLCBib29sCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRS
ZWY+IGVuYWJsZVJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShlbmFibGUpKTsKICAgICBXS0Rp
Y3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGVuYWJsZUtleS5n
ZXQoKSwgZW5hYmxlUmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOwogfQogCiAKQEAgLTU4OSw3ICs1ODksNyBAQCB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OnNldFRvdWNoUG9pbnRSYWRpdXMoaW50IHJhZGl1c1gsIGludCByYWRpdXNZ
KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmKEFkb3B0V0ssIFdLVUludDY0Q3Jl
YXRlKHJhZGl1c1kpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
MCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6dG91Y2hTdGFydCgpCkBAIC02MDEsNyArNjAxLDcgQEAgdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp0b3VjaFN0YXJ0KCkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNo
U3RhcnQiKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7CiAKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
LmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1vdmUoKQpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hNb3ZlKCkKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIlRvdWNoTW92ZSIpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKQEAgLTYyNSw3ICs2MjUs
NyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoRW5kKCkKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlRvdWNoRW5kIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZl
bnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2Fn
ZU5hbWUuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
MCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hDYW5jZWwoKQpAQCAt
NjM3LDcgKzYzNyw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hDYW5jZWwo
KQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hDYW5jZWwiKSk7CiAgICAgV0tEaWN0
aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5
LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpj
bGVhclRvdWNoUG9pbnRzKCkKQEAgLTY0OSw3ICs2NDksNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OmNsZWFyVG91Y2hQb2ludHMoKQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
Q2xlYXJUb3VjaFBvaW50cyIpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdl
dCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVhc2VUb3VjaFBvaW50KGludCBpbmRl
eCkKQEAgLTY2NSw3ICs2NjUsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnJlbGVh
c2VUb3VjaFBvaW50KGludCBpbmRleCkKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5k
ZXhSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUoaW5kZXgpKTsKICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRl
eFJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGlu
dCBpbmRleCkKQEAgLTY4MSw3ICs2ODEsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVm
PiBpbmRleFJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwogICAgIFdLRGljdGlv
bmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCks
IGluZGV4UmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIDApOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcAppbmRleCAxODNmZjVlZDAzYTkwNmQ0Nzc1
NGU2YzI4M2Q2MWQyYjY4MDRhZjExLi5mZDBjYzNhNzhhYTQ5YzhhNmZmNDg1ZjZhOTkwMzZmMDJm
MmYyYzkyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0dDQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCkBAIC01MiwxNyArNTIsMTcgQEAgSlNDbGFzc1JlZiBHQ0Nv
bnRyb2xsZXI6OndyYXBwZXJDbGFzcygpCiAKIHZvaWQgR0NDb250cm9sbGVyOjpjb2xsZWN0KCkK
IHsKLSAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHMoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKKyAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2
YVNjcmlwdE9iamVjdHMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0K
IAogdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3RPbkFsdGVybmF0ZVRocmVhZChib29sIHdhaXRV
bnRpbERvbmUpCiB7Ci0gICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3Rz
T25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1Z2dpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCB3YWl0VW50aWxEb25lKTsKKyAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNj
cmlwdE9iamVjdHNPbkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIHdhaXRVbnRpbERvbmUpOwogfQogCiBzaXplX3QgR0NDb250
cm9sbGVyOjpnZXRKU09iamVjdENvdW50KCkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVHZXRKYXZh
U2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7Cisg
ICAgcmV0dXJuIFdLQnVuZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiAvLyBPYmplY3QgQ3JlYXRpb24KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAKaW5kZXggZDI2ZWQ5NGJmMDE1Y2UzMTNmODViNjNhMTZiMTg4NGU3NGUxN2E2NS4u
NDRlYTM5MTUwY2JkODJhMjU3MDNjMzZjZmI5MDI4MTNkMmZjNzdlMiAxMDA2NDQKLS0tIGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKLUluamVjdGVkQnVuZGxl
JiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkKK0luamVjdGVkQnVuZGxlJiBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGUmIHNoYXJlZCA9ICpu
ZXcgSW5qZWN0ZWRCdW5kbGU7CiAgICAgcmV0dXJuIHNoYXJlZDsKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaCBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCA4
ZjBhODQwNDgwOTU4OGE5ZjNiNGQwODJmYjk3MzliMmVlNWM3OTNkLi42MDM1NDM0YzliNDMyY2Ex
MjkxMjM4OWVlMTFmZmY1ZjI1MmU0MWM1IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIEluamVjdGVkQnVuZGxlUGFnZTsKIAogY2xhc3MgSW5qZWN0ZWRCdW5kbGUgewogcHVi
bGljOgotICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZSYgc2hhcmVkKCk7CisgICAgc3RhdGljIElu
amVjdGVkQnVuZGxlJiBzaW5nbGV0b24oKTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIEluamVj
dGVkQnVuZGxlLgogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmIGlu
aXRpYWxpemF0aW9uVXNlckRhdGEpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCmluZGV4IDljNGIw
M2VjZTZiYzUwYTNlZjYxNjU2MTc0ODMzNTg5NDY3MzQyMmYuLjRmMTI3MjIxNDc4ZmQwNTQ3Y2Q3
NWQ4MmQ2ZDBhODEyOGFmMDRhNjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlTWFpbi5jcHAKQEAgLTMxLDUg
KzMxLDUgQEAKIGV4dGVybiAiQyIKIHZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVuZGxlUmVm
IGJ1bmRsZSwgV0tUeXBlUmVmIGluaXRpYWxpemF0aW9uVXNlckRhdGEpCiB7Ci0gICAgV1RSOjpJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaW5pdGlhbGl6ZShidW5kbGUsIGluaXRpYWxpemF0aW9u
VXNlckRhdGEpOworICAgIFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmluaXRpYWxp
emUoYnVuZGxlLCBpbml0aWFsaXphdGlvblVzZXJEYXRhKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcCBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdl
LmNwcAppbmRleCAwOGY4MTE1OWU0N2I3YTBhY2YzOTFjMjZlNTk4MjA1ZGU1MGQ0NTUwLi4zYmEy
OGE2ODljMzc3MWU2NTBlZDkxMDdiMDY5MzE3YzBkM2Q1YTU1IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBh
Z2UuY3BwCkBAIC0yNDAsNyArMjQwLDcgQEAgc3RhdGljIGlubGluZSBXVEY6OlN0cmluZyBwYXRo
U3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVmIGZpbGVVcmwpCiAgICAgaWYgKCFpc0xvY2Fs
RmlsZVNjaGVtZShzY2hlbWVTdHJpbmcuZ2V0KCkpKQogICAgICAgICByZXR1cm4gdG9XVEZTdHJp
bmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcoZmlsZVVybCkpKTsKIAotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpKTsKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFpbkZyYW1lVVJM
ID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAgICBpZiAoIW1h
aW5GcmFtZVVSTCkKICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1l
Q29weVByb3Zpc2lvbmFsVVJMKG1haW5GcmFtZSkpOwpAQCAtNDYzLDcgKzQ2Myw3IEBAIHN0YXRp
YyB2b2lkIGR1bXBMb2FkRXZlbnQoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgY29uc3QgY2hhciog
ZXZlbnROYW1lKQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gIik7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoZXZlbnROYW1lKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9p
ZCBkdW1wUmVxdWVzdERlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KFdLVVJMUmVxdWVz
dFJlZiByZXF1ZXN0LCBTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyKQpAQCAtNjUyLDMyICs2
NTIsMzIgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9uc2UoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnRlc3RVUkwoKSkgeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+dGVzdFVSTCgpKSB7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVmPiB0ZXN0VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lvbmFsVVJMKGZy
YW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNl
dFRlc3RVUkwodGVzdFVSTC5nZXQoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPnNldFRlc3RVUkwodGVzdFVSTC5nZXQoKSk7CiAgICAgfQogCiAg
ICAgcGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKGZyYW1lKTsKIAotICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVt
cExvYWRFdmVudChmcmFtZSwgImRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUiKTsKIAot
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdGcmFtZSgpKQotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0VG9wTG9hZGluZ0ZyYW1lKGZyYW1lKTsK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50b3BMb2FkaW5nRnJhbWUoKSkK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFRvcExvYWRpbmdGcmFtZShm
cmFtZSk7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkU3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKQorICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRTdG9wUHJvdmlzaW9uYWxGcmFtZUxv
YWRzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJzdG9wcGluZyBsb2FkIGluIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUgY2FsbGJhY2siKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSIpOwpAQCAtNjg1LDEwICs2ODUsMTAgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKFdLQnUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0Vy
cm9yUmVmKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5p
bmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5n
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZhaWxQcm92
aXNpb25hbExvYWRXaXRoRXJyb3IiKTsKIAogICAgIGZyYW1lRGlkQ2hhbmdlTG9jYXRpb24oZnJh
bWUpOwpAQCAtNjk2LDEwICs2OTYsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZh
aWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmUKIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENvbW1pdExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZy
YW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBkdW1wTG9hZEV2ZW50
KGZyYW1lLCAiZGlkQ29tbWl0TG9hZEZvckZyYW1lIik7CkBAIC03MDcsMTMgKzcwNywxMyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hQcm9ncmVz
cygpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUHJvZ3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCisgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNh
dGlvblxuIik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoInBv
c3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKIH0KIAogZW51bSBGcmFtZU5hbWVQ
b2xpY3kgeyBTaG91bGROb3RJbmNsdWRlRnJhbWVOYW1lLCBTaG91bGRJbmNsdWRlRnJhbWVOYW1l
IH07CkBAIC04MzQsNyArODM0LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXBET01B
c1dlYkFyY2hpdmUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgU3RyaW5nQnVpbGQKIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogewotICAgIEFTU0VSVChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKTsKKyAgICBBU1NFUlQoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSk7CiAKICAgICAvLyBGb3JjZSBhIHBhaW50IGJlZm9y
ZSBkdW1waW5nLiBUaGlzIG1hdGNoZXMgRHVtcFJlbmRlclRyZWUgb24gV2luZG93cy4gKER1bXBS
ZW5kZXJUcmVlIG9uIE1hYwogICAgIC8vIGRvZXMgdGhpcyBhdCBhIHNsaWdodGx5IGRpZmZlcmVu
dCB0aW1lLikgU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1NDY5PiBmb3IgZGV0YWlscy4KQEAg
LTg0NSwxMyArODQ1LDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBT
dHJpbmcgdXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsUmVmLmdl
dCgpKSkpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0V0so
V0tCdW5kbGVGcmFtZUNvcHlNSU1FVHlwZUZvclJlc291cmNlV2l0aFVSTChmcmFtZSwgdXJsUmVm
LmdldCgpKSk7CiAgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IG5vdEZvdW5kIHx8
IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWltZVR5cGUuZ2V0KCksICJ0ZXh0L3BsYWlu
IikpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmR1bXBB
c1RleHQoZmFsc2UpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVp
bGRlcjsKIAotICAgIHN3aXRjaCAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+d2hhdFRvRHVtcCgpKSB7CisgICAgc3dpdGNoIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT53aGF0VG9EdW1wKCkpIHsKICAgICBjYXNlIFRlc3RSdW5uZXI6OlJl
bmRlclRyZWU6IHsKLSAgICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPmlzUHJpbnRpbmcoKSkKKyAgICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkKICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVF
eHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0KCkpKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoYWRv
cHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVzZW50YXRpb24obV9w
YWdlKSkuZ2V0KCkpKTsKQEAgLTg3MCwzNCArODcwLDM0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkdW1wKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0
aW9ucygpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkKICAgICAgICAgZHVtcEFsbEZy
YW1lU2Nyb2xsUG9zaXRpb25zKHN0cmluZ0J1aWxkZXIpOwotICAgIGVsc2UgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBNYWluRnJhbWVTY3JvbGxQ
b3NpdGlvbigpKQorICAgIGVsc2UgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBNYWluRnJhbWVTY3JvbGxQb3NpdGlvbigpKQogICAgICAgICBk
dW1wRnJhbWVTY3JvbGxQb3NpdGlvbihXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSwg
c3RyaW5nQnVpbGRlcik7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxXaW5kb3dzKCkpCi0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFBh
Z2VzKHN0cmluZ0J1aWxkZXIpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoKSkK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmR1bXBCYWNrRm9yd2FyZExpc3Rz
Rm9yQWxsUGFnZXMoc3RyaW5nQnVpbGRlcik7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnNob3VsZER1bXBQaXhlbHMoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUGl4ZWxzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnNob3VsZER1bXBQaXhlbHMoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUGl4ZWxzKCkpIHsKICAgICAgICAgV0tTbmFw
c2hvdE9wdGlvbnMgb3B0aW9ucyA9IGtXS1NuYXBzaG90T3B0aW9uc1NoYXJlYWJsZSB8IGtXS1Nu
YXBzaG90T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSkKKyAg
ICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBTZWxlY3Rpb25SZWN0KCkpCiAgICAgICAgICAgICBvcHRpb25zIHw9IGtXS1NuYXBzaG90
T3B0aW9uc1BhaW50U2VsZWN0aW9uUmVjdGFuZ2xlOwogCi0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5zZXRQaXhlbFJlc3VsdChhZG9wdFdLKFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBz
aG90V2l0aE9wdGlvbnMobV9wYWdlLCBXS0J1bmRsZUZyYW1lR2V0VmlzaWJsZUNvbnRlbnRCb3Vu
ZHMoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSkpLCBvcHRpb25zKSkuZ2V0KCkpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0UGl4ZWxSZXN1bHQoYWRvcHRX
SyhXS0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKG1fcGFnZSwgV0tCdW5kbGVG
cmFtZUdldFZpc2libGVDb250ZW50Qm91bmRzKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3Bh
Z2UpKSwgb3B0aW9ucykpLmdldCgpKTsKICAgICAgICAgaWYgKFdLQnVuZGxlUGFnZUlzVHJhY2tp
bmdSZXBhaW50cyhtX3BhZ2UpKQotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnNldFJlcGFpbnRSZWN0cyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlUcmFja2VkUmVwYWludFJl
Y3RzKG1fcGFnZSkpLmdldCgpKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5zZXRSZXBhaW50UmVjdHMoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5VHJhY2tlZFJlcGFp
bnRSZWN0cyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgfQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuZG9uZSgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmRvbmUoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRp
ZEZpbmlzaExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAg
ICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaExvYWRGb3JGcmFtZSIpOwogCiAgICAg
ZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihmcmFtZSwgLypzaG91bGREdW1wKi8gdHJ1ZSk7CkBAIC05
MDUsMTAgKzkwNSwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdL
RXJyb3JSZWYpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmFpbExv
YWRXaXRoRXJyb3IiKTsKIAogICAgIGZyYW1lRGlkQ2hhbmdlTG9jYXRpb24oZnJhbWUpOwpAQCAt
OTE2LDI5ICs5MTYsMjkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkV2l0
aEVycm9yRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0sKIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxlLCBX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIg
c3RyaW5nQnVpbGRlcjsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkgewogICAgICAgICBkdW1wRnJhbWVEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJl
c3VsdChmcmFtZSwgc3RyaW5nQnVpbGRlcik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiIC0gZGlkUmVjZWl2ZVRpdGxlOiAiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7CiAgICAgfQogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VEOiAnIik7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuIik7CiAgICAgfQogCi0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJX
aW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxk
UmVmIHdvcmxkKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUsIHdvcmxk
KTsKQEAgLTk1MCwyMSArOTUwLDIxIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVh
cldpbmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlCiAgICAgfQog
CiAgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhj
ZXB0aW9uKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZ2NDb250cm9sbGVyKCktPm1h
a2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2Jq
ZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3
aW5kb3csICZleGNlcHRpb24pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4
Y2VwdGlvbik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+
bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5nY0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChj
b250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwg
d2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGV4
dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4
Y2VwdGlvbik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9u
KTsKIAogICAgIFdlYkNvcmVUZXN0U3VwcG9ydDo6aW5qZWN0SW50ZXJuYWxzT2JqZWN0KGNvbnRl
eHQpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3RGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RG
b3JGcmFtZSIpOwpAQCAtOTcyLDEwICs5NzIsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkK
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JG
cmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLVVJMUmVmIHVy
bCwgZG91YmxlIGRlbGF5LCBkb3VibGUgZGF0ZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwpAQCAtOTgzLDcgKzk4Myw3IEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0Rm9yRnJhbWUo
V0tCdW5kbGVQYWdlUmVmLCBXS0J1CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIg
LSB3aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkw6ICIpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHBhdGhTdWl0YWJsZUZvclRlc3RSZXN1bHQodXJsKSk7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIgXG4iKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1lbnROYXZpZ2F0aW9uVHlwZSB0eXBl
KQpAQCAtOTkyLDEwICs5OTIsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFNhbWVE
b2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVz
dFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlk
RmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUiKTsKIAogICAgIHVuc2lnbmVkIHBlbmRpbmdGcmFt
ZVVubG9hZEV2ZW50cyA9IFdLQnVuZGxlRnJhbWVHZXRQZW5kaW5nVW5sb2FkQ291bnQoZnJhbWUp
OwpAQCAtMTAwNSw0MCArMTAwNSw0MCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmlu
aXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBoYXMgIik7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTnVtYmVyKHBlbmRpbmdGcmFtZVVubG9hZEV2ZW50cyk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIG9udW5sb2FkIGhhbmRsZXIocylcbiIpOwotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIH0KIAogdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmlu
ZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkSGFuZGxlT25s
b2FkRXZlbnRzRm9yRnJhbWUiKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZERp
c3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewot
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
dXRwdXRUZXh0KCJkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKKyAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4
dCgiZGlkRGlzcGxheUluc2VjdXJlQ29udGVudFxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOworICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkRGV0ZWN0WFNTRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsK
LSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dCgiZGlkRGV0ZWN0WFNTXG4iKTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiZGlkRGV0ZWN0
WFNTXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRpYXRlTG9hZEZv
clJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRf
dCBpZGVudGlmaWVyLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgYm9vbCkKIHsKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RD
b3B5VVJMKHJlcXVlc3QpKTsKQEAgLTEwNTksOCArMTA1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9v
bCBpc0hUVFBPckhUVFBTU2NoZW1lKFdLU3RyaW5nUmVmIHNjaGVtZSkKIAogV0tVUkxSZXF1ZXN0
UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIHVpbnQ2NF90IGlkZW50aWZpZXIs
IFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogewot
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpCi0gICAgICAg
ICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpCisgICAgICAgICYmIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIGR1bXBSZXNvdXJjZVVS
TChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmRMaXRlcmFsKCIgLSB3aWxsU2VuZFJlcXVlc3QgIik7CkBAIC0xMDY4LDE1ICsxMDY4LDE1IEBA
IFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZvckZy
YW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiIHJlZGlyZWN0UmVzcG9uc2UgIik7CiAgICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0
aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiAgICAgfQogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RS
dW5uaW5nKCkgJiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2lsbFNl
bmRSZXF1ZXN0UmV0dXJuc051bGwoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiByZWRpcmVjdFVSTCA9IGFkb3B0V0soV0tVUkxS
ZXNwb25zZUNvcHlVUkwocmVzcG9uc2UpKTsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmlzVGVzdFJ1bm5pbmcoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVS
TCkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiUmV0dXJu
aW5nIG51bGwgZm9yIHRoaXMgcmVkaXJlY3RcbiIpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYm
IHJlZGlyZWN0VVJMKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KCJSZXR1cm5pbmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIApAQCAtMTA4OSw4ICsxMDg5LDggQEAgV0tVUkxSZXF1ZXN0UmVmIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVm
IHBhZ2UKICAgICAgICAgJiYgIVdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoaG9zdC5nZXQo
KSwgIjI1NS4yNTUuMjU1LjI1NSIpIC8vIFVzZWQgaW4gc29tZSB0ZXN0cyB0aGF0IGV4cGVjdCB0
byBnZXQgYmFjayBhbiBlcnJvci4KICAgICAgICAgJiYgIWlzTG9jYWxIb3N0KGhvc3QuZ2V0KCkp
KSB7CiAgICAgICAgIGJvb2wgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwotICAgICAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkgewotICAgICAgICAg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dG9wTG9hZGluZ0ZyYW1lKCk7CisgICAgICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKSB7CisgICAgICAgICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50b3BMb2FkaW5nRnJhbWUoKTsKICAg
ICAgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgICAgICAgICAgaWYgKCFtYWluRnJh
bWVVUkwgfHwgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0
cmluZyhtYWluRnJhbWVVUkwuZ2V0KCkpKS5nZXQoKSwgImFib3V0OmJsYW5rIikpCiAgICAgICAg
ICAgICAgICAgbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVByb3Zpc2lv
bmFsVVJMKG1haW5GcmFtZSkpOwpAQCAtMTEwNCw3ICsxMTA0LDcgQEAgV0tVUkxSZXF1ZXN0UmVm
IEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiQmxvY2tl
ZCBhY2Nlc3MgdG8gZXh0ZXJuYWwgVVJMICIpOwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcodXJsU3RyaW5nKSk7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTE1LDIwICsxMTE1
LDIwIEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVz
dEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllciwgV0tVUkxSZXNwb25zZVJlZiByZXNw
b25zZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNv
dXJjZUxvYWRDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CiAgICAgICAgIGR1bXBSZXNvdXJjZVVSTChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRSZWNlaXZlUmVzcG9u
c2UgIik7CiAgICAgICAgIGR1bXBSZXNwb25zZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KHJlc3BvbnNlLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAKLSAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBS
ZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBl
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0g
YWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwpAQCAtMTE0OCw3ICsxMTQ4
LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291
cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0IKIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VS
ZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90LCB1aW50NjRfdCkKQEAgLTExNTcsMjQgKzEx
NTcsMjQgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
Rm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0IKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmRpZEZpbmlzaExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJh
bWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2Fk
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBkdW1wUmVzb3VyY2VV
UkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291cmNlKFdL
QnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllciwgV0tF
cnJvclJlZiBlcnJvcikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rl
c3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwpAQCAtMTE4MywyMSArMTE4MywyMSBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYs
IFdLQnVuZGxlRnJhbWVSZQogCiAgICAgZHVtcEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRl
c3RSZXN1bHQoZXJyb3IsIHN0cmluZ0J1aWxkZXIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OnNob3VsZENhY2hlUmVzcG9uc2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1l
UmVmLCB1aW50NjRfdCBpZGVudGlmaWVyKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wV2lsbENhY2hl
UmVzcG9uc2UoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBXaWxsQ2FjaGVSZXNwb25zZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZE51bWJlcihpZGVudGlmaWVyKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiAtIHdpbGxDYWNoZVJlc3BvbnNlOiBjYWxsZWRcbiIpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKIAogICAgIC8vIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRoZSBjYWNoZSB0aGUgcmVz
cG9uc2UuCiAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjI4LDEwICsxMjI4LDEwIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp1bmFibGVUb0ltcGxlbWVudFBvbGljeShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tCdW5kbGVGCiAKIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlTmF2aWdhdGlvbkFjdGlvblJlZiBu
YXZpZ2F0aW9uQWN0aW9uLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tUeXBlUmVmKiB1c2Vy
RGF0YSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygp
KQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uVXNlOwogCi0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRl
RW5hYmxlZCgpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvblVzZTsKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBh
ZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwpAQCAtMTI1NiwxMCArMTI1Niwx
MCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIH0KIAogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+bm90aWZ5RG9uZSgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+bm90aWZ5RG9uZSgpOwogCi0gICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVQZXJt
aXNzaXZlKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVy
KCktPmlzUG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlKCkpCiAgICAgICAgIHJldHVybiBXS0J1bmRs
ZVBhZ2VQb2xpY3lBY3Rpb25Vc2U7CiAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlv
blBhc3NUaHJvdWdoOwogfQpAQCAtMTI3Nyw3ICsxMjc3LDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5
QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5k
bGVQYWcKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdh
dGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQsIHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJcJ1xuIik7Ci0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1pbWVUeXBlID0gYWRvcHRXSyhXS1VSTFJlc3BvbnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7
CkBAIC0xMzQ3LDcgKzEzNDcsNyBAQCBzdGF0aWMgV1RGOjpTdHJpbmcgbGFzdEZpbGVVUkxQYXRo
Q29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBwYXRoKQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSwgdWludDMy
X3QgbGluZU51bWJlcikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rl
c3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBXVEY6OlN0cmluZyBtZXNzYWdlU3Ry
aW5nID0gdG9XVEZTdHJpbmcobWVzc2FnZSk7CkBAIC0xMzY5LDQ2ICsxMzY5LDQ2IEBAIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29uc29sZShXS1N0cmluZ1JlZiBt
ZXNzYWdlLCB1aW50MzJfdCBsCiAgICAgfQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1lc3Nh
Z2VTdHJpbmcpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZXRTdGF0dXNi
YXJUZXh0KFdLU3RyaW5nUmVmIHN0YXR1c2JhclRleHQpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVz
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIlVJIERFTEVHQVRFIFNUQVRVUyBDQUxMQkFDSzogc2V0U3RhdHVzVGV4dDoiKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhzdGF0dXNiYXJUZXh0KSk7CiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRBbGVydChXS1N0
cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRsZUZyYW1lUmVmKQogewotICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0
cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIkFMRVJUOiAiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhtZXNz
YWdlKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRD
b25maXJtKFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiQ09ORklSTTogIik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcobWVzc2FnZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxS
dW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1
bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE0MTksMTIgKzE0MTksMTIgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1l
c3NhZ2UsIFdLU3RyaW5nUmUKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiwgZGVm
YXVsdCB0ZXh0OiAiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhkZWZh
dWx0VmFsdWUpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxp
Y2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgaW50NjRf
dCB0b3RhbEJ5dGVzTmVlZGVkKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tz
KCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcEFwcGxpY2F0aW9uQ2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7CiAgICAgICAg
IC8vIEZvciBleGFtcGxlLCBudW1iZXJzIGZyb20gMzAwMDAgLSAzOTk5OSB3aWxsIG91dHB1dCBh
cyAzMDAwMC4KICAgICAgICAgLy8gUm91bmRpbmcgdXAgb3IgZG93biBkb2VzIG5vdCByZWFsbHkg
bWF0dGVyIGZvciB0aGVzZSB0ZXN0cy4gSXQncwogICAgICAgICAvLyBzdWZmaWNpZW50IHRvIGp1
c3QgZ2V0IGEgcmFuZ2Ugb2YgMTAwMDAgdG8gZGV0ZXJtaW5lIGlmIHdlIHdlcmUKQEAgLTE0Mzcs
MzYgKzE0MzcsMzYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGljYXRp
b25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgdG90YWxTcGFjZU5lZWRlZDp+Iik7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTnVtYmVyKHRydW5jYXRlZFNwYWNlTmVlZGVkKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiAgICAgfQogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKSkKKyAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBSZXNldCBkZWZhdWx0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3RhLgotICAgIFdLQnVu
ZGxlUmVzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmJ1bmRsZSgpLCBhZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5VG9TdHJpbmcob3JpZ2lu
KSkuZ2V0KCkpOworICAgIFdLQnVuZGxlUmVzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBhZG9wdFdLKFdLU2VjdXJpdHlP
cmlnaW5Db3B5VG9TdHJpbmcob3JpZ2luKSkuZ2V0KCkpOwogfQogCiB1aW50NjRfdCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBv
cmlnaW4sIFdLU3RyaW5nUmVmIGRhdGFiYXNlTmFtZSwgV0tTdHJpbmdSZWYgZGF0YWJhc2VEaXNw
bGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnRPcmln
aW5Vc2FnZUJ5dGVzLCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZUJ5dGVzLCB1aW50NjRf
dCBleHBlY3RlZFVzYWdlQnl0ZXMpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRhYmFzZUNhbGxiYWNrcygpKSB7CisgICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBEYXRh
YmFzZUNhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBEQVRBQkFT
RSBDQUxMQkFDSzogZXhjZWVkZWREYXRhYmFzZVF1b3RhRm9yU2VjdXJpdHlPcmlnaW46Iik7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHNlY3VyaXR5T3JpZ2luVG9TdHIob3JpZ2luKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGRhdGFiYXNlOiIpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhkYXRhYmFzZU5hbWUpKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CiAgICAgfQogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQg
KiAxMDI0OwotICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKKyAgICBkb3VibGUg
dGVzdERlZmF1bHRRdW90YSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVy
KCktPmRhdGFiYXNlRGVmYXVsdFF1b3RhKCk7CiAgICAgaWYgKHRlc3REZWZhdWx0UXVvdGEgPj0g
MCkKICAgICAgICAgZGVmYXVsdFF1b3RhID0gdGVzdERlZmF1bHRRdW90YTsKIAogICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBuZXdRdW90YSA9IGRlZmF1bHRRdW90YTsKIAotICAgIGRvdWJsZSBtYXhR
dW90YSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmRhdGFiYXNlTWF4
UXVvdGEoKTsKKyAgICBkb3VibGUgbWF4UXVvdGEgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT5kYXRhYmFzZU1heFF1b3RhKCk7CiAgICAgaWYgKG1heFF1b3RhID49
IDApIHsKICAgICAgICAgaWYgKGRlZmF1bHRRdW90YSA8IGV4cGVjdGVkVXNhZ2VCeXRlcyAmJiBl
eHBlY3RlZFVzYWdlQnl0ZXMgPD0gbWF4UXVvdGEpIHsKICAgICAgICAgICAgIG5ld1F1b3RhID0g
ZXhwZWN0ZWRVc2FnZUJ5dGVzOwpAQCAtMTQ3NSw3ICsxNDc1LDcgQEAgdWludDY0X3QgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYg
b3JpZ2luLAogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxF
R0FURSBEQVRBQkFTRSBDQUxMQkFDSzogaW5jcmVhc2VkIHF1b3RhIHRvICIpOwogICAgICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIobmV3UXVvdGEpOwogICAgICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmV3UXVvdGE7CkBAIC0xNTQw
LDM3ICsxNTQwLDM3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFuZ2VTZWxlY3Rp
b24oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG5vCiAKIGJvb2wgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5n
ZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEJlZ2luRWRpdGluZ0luRE9NUmFuZ2U6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEVuZEVkaXRpbmcoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBy
YW5nZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKIGJvb2wgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBu
b2RlLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlv
blR5cGUgYWN0aW9uKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IGluc2VydGFjdGlvbnN0cmluZ1tdID0gewpAQCAtMTU3OSw3ICsxNTc5LDcgQEAgYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5v
ZGUsIFdLQnVuZGxlUmEKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVkIiwKICAg
ICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewog
ICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0Tm9kZToiKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoZHVtcFBhdGgobV9wYWdlLCBtX3dvcmxkLmdl
dCgpLCBub2RlKSk7CkBAIC0xNTg4LDE0ICsxNTg4LDE0IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpzaG91bGRJbnNlcnROb2RlKFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlLCBXS0J1bmRs
ZVJhCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIp
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9u
XSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJuIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygp
OwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmlu
Z1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2Vy
dEFjdGlvblR5cGUgYWN0aW9uKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgc3RhdGljIGNvbnN0
IGNoYXIgKmluc2VydGFjdGlvbnN0cmluZ1tdID0gewpAQCAtMTYwNCw3ICsxNjA0LDcgQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwg
V0tCdW5kbGVSYW5nZUhhbmRsZVIKICAgICAgICAgIldlYlZpZXdJbnNlcnRBY3Rpb25Ecm9wcGVk
IiwKICAgICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkSW5zZXJ0VGV4
dDoiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGV4dCkpOwpA
QCAtMTYxMywyOSArMTYxMywyOSBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5z
ZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoaW5zZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZERlbGV0ZVJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRF
OiBzaG91bGREZWxldGVET01SYW5nZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVj
dGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIGZyb21SYW5nZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiB0b1JhbmdlLCBXS0FmZmlu
aXR5VHlwZSBhZmZpbml0eSwgYm9vbCBzdGlsbFNlbGVjdGluZykKIHsKLSAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIHN0YXRpYyBjb25zdCBjaGFyICphZmZpbml0eXN0cmluZ1tdID0gewpAQCAtMTY0Nyw3
ICsxNjQ3LDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBmcm9tUmEKICAgICAgICAgIlRSVUUiCiAgICAg
fTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZENoYW5nZVNlbGVjdGVkRE9N
UmFuZ2U6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCBmcm9tUmFuZ2UpKTsKQEAgLTE2NTgsOTggKzE2NTgsOTggQEAgYm9v
bCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVS
YW5nZUhhbmRsZVJlZiBmcm9tUmEKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCIgc3RpbGxTZWxlY3Rpbmc6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGJvb2xz
dHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5n
KCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCkt
PnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hv
dWxkQXBwbHlTdHlsZShXS0J1bmRsZUNTU1N0eWxlRGVjbGFyYXRpb25SZWYgc3R5bGUsIFdLQnVu
ZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRBcHBseVN0eWxlOiIpOwogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChzdHlsZURlY1RvU3RyKHN0eWxlKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiIHRvRWxlbWVudHNJbkRPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
dGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcoV0tTdHJpbmdSZWYg
bm90aWZpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNU
ZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElO
RyBERUxFR0FURTogd2ViVmlld0RpZEJlZ2luRWRpdGluZzoiKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQo
c3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1l
KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkRW5kRWRpdGluZzoiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
Zyhub3RpZmljYXRpb25OYW1lKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
Q2hhbmdlKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2U6Iik7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5p
c1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWls
ZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElU
SU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdlU2VsZWN0aW9uOiIpOwogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c3VwcG9ydHNG
dWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0Z1bGxTY3JlZW5LZXlib2FyZFJl
cXVlc3RUeXBlIHJlcXVlc3RUeXBlKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgic3VwcG9ydHNGdWxsU2NyZWVu
KCkgPT0gdHJ1ZVxuIik7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJzdXBwb3J0c0Z1bGxTY3JlZW4oKSA9
PSB0cnVlXG4iKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdL
QnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50UmVmKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygp
KQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiZW50ZXJGdWxs
U2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoImVudGVyRnVsbFNjcmVl
bkZvckVsZW1lbnQoKVxuIik7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CisgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2Ny
ZWVuQmVoYXZpb3IoKSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRW50ZXJGdWxsU2NyZWVu
KHBhZ2VSZWYpOwogICAgICAgICBXS0J1bmRsZVBhZ2VEaWRFbnRlckZ1bGxTY3JlZW4ocGFnZVJl
Zik7CiAgICAgfQpAQCAtMTc1NywxMCArMTc1NywxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdL
QnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudFJlZikK
IHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoImV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxT
Y3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91
dHB1dFRleHQoImV4aXRGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKIAotICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJl
aGF2aW9yKCkpIHsKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVuZGxl
UGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAgV0tCdW5kbGVQYWdlRGlk
RXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgfQpAQCAtMTc2OCwyMiArMTc2OCwyMiBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxl
UGFnZVJlZiBwYWdlUmVmLCBXS0J1bgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5F
bnRlckZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVjdCkKIHsKLSAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxT
Y3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoImJlZ2FuRW50ZXJGdWxsU2NyZWVuKClcbiIpOworICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNr
cygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiYmVn
YW5FbnRlckZ1bGxTY3JlZW4oKVxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpi
ZWdhbkV4aXRGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwgV0tSZWN0LCBXS1JlY3QpCiB7Ci0g
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
dWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
dXRwdXRUZXh0KCJiZWdhbkV4aXRGdWxsU2NyZWVuKClcbiIpOworICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxi
YWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgi
YmVnYW5FeGl0RnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmNsb3NlRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZikKIHsKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5D
YWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQo
ImNsb3NlRnVsbFNjcmVlbigpXG4iKTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoImNsb3NlRnVsbFNjcmVl
bigpXG4iKTsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKKyAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlv
cigpKSB7CiAgICAgICAgIFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsK
ICAgICAgICAgV0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgfQpA
QCAtMTg5MiwyMyArMTg5MiwyMyBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9y
bVJlc3BvbnNlTWltZVR5cGUoV0tVUkxSZXNwb25zZVJlZikKIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmZyYW1lRGlkQ2hhbmdlTG9jYXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgYm9v
bCBzaG91bGREdW1wKQogewotICAgIGlmIChmcmFtZSAhPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudG9wTG9hZGluZ0ZyYW1lKCkpCisgICAgaWYgKGZyYW1lICE9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS50b3BMb2FkaW5nRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFRvcExvYWRpbmdGcmFtZSgwKTsKKyAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0VG9wTG9hZGluZ0ZyYW1lKDApOwogCi0gICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXAoKSkKKyAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNo
b3VsZFByb2Nlc3NXb3JrUXVldWUoKSkgewotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucHJvY2Vzc1dvcmtRdWV1ZSgpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuc2hvdWxkUHJvY2Vzc1dvcmtRdWV1ZSgpKSB7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wcm9jZXNzV29ya1F1ZXVlKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoc2hvdWxkRHVtcCkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+ZHVtcCgpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5kdW1wKCk7CiAgICAgZWxzZQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZG9u
ZSgpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuZG9uZSgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IGI0YjU1YmI5MDY4NmE4YWFkMTQ1YzljZGQ4
MzE4MjYwYzZhMjdkYTcuLjQyODgzYjE4MzhhZTMyZTBjNzQwNGEwNmQwOWE2YmQ0ZmY3MDUxZWIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIEpTQ2xhc3NSZWYgVGVzdFJ1bm5lcjo6d3Jh
cHBlckNsYXNzKCkKIAogdm9pZCBUZXN0UnVubmVyOjpkaXNwbGF5KCkKIHsKLSAgICBXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsK
KyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZVBhZ2VGb3JjZVJlcGFpbnQocGFnZSk7CiAgICAg
V0tCdW5kbGVQYWdlU2V0VHJhY2tzUmVwYWludHMocGFnZSwgdHJ1ZSk7CiAgICAgV0tCdW5kbGVQ
YWdlUmVzZXRUcmFja2VkUmVwYWludHMocGFnZSk7CkBAIC0xMjksNyArMTI5LDcgQEAgdm9pZCBU
ZXN0UnVubmVyOjpzZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShib29sIGVuYWJsZWQsIGJvb2wgcGVy
bWlzc2l2ZSkKICAgICBtX3BvbGljeURlbGVnYXRlRW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgbV9w
b2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUgPSBwZXJtaXNzaXZlOwogCi0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0Rm9yUG9s
aWN5RGVsZWdhdGUoKQpAQCAtMTQxLDI0ICsxNDEsMjQgQEAgdm9pZCBUZXN0UnVubmVyOjp3YWl0
Rm9yUG9saWN5RGVsZWdhdGUoKQogdm9pZCBUZXN0UnVubmVyOjp3YWl0VW50aWxEb25lKCkKIHsK
ICAgICBtX3dhaXRUb0R1bXAgPSB0cnVlOwotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCiAgICAgICAgIGluaXRp
YWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpCiB7CiAgICAgaW52YWxpZGF0ZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoIkZBSUw6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNh
bGxlZFxuXG4iKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZG9uZSgpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJGQUlMOiBUaW1lZCBvdXQgd2Fp
dGluZyBmb3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcblxuIik7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmRvbmUoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25l
KCkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93YWl0VG9EdW1wICYmICFJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudG9wTG9hZGluZ0ZyYW1lKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPmR1bXAoKTsKKyAgICBpZiAobV93YWl0VG9EdW1wICYmICFJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkudG9wTG9hZGluZ0ZyYW1lKCkpCisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPmR1bXAoKTsKIAogICAgIC8vIFdlIGRvbid0IGNh
bGwgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgaGVyZSwgZXZlbiBpZiB3ZSBj
b250aW51ZSB0byB3YWl0IGZvciBhIGxvYWQgdG8gZmluaXNoLgogICAgIC8vIFRoZSB0ZXN0IGlz
IHN0aWxsIHN1YmplY3QgdG8gdGltZW91dCBjaGVja2luZyAtIGl0IGlzIGJldHRlciB0byBkZXRl
Y3QgYW4gYXN5bmMgdGltZW91dCBpbnNpZGUgV2ViS2l0VGVzdFJ1bm5lcgpAQCAtMTcyLDcgKzE3
Miw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2Us
IGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwogICAgIFdLUmV0YWluUHRyPFdLQnVuZGxlU2Ny
aXB0V29ybGRSZWY+IHNjcmlwdFdvcmxkKEFkb3B0V0ssIFdLQnVuZGxlU2NyaXB0V29ybGRDcmVh
dGVXb3JsZCgpKTsKIAotICAgIFdLQnVuZGxlQWRkVXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwg
c2NyaXB0V29ybGQuZ2V0KCksIHNvdXJjZVdLLmdldCgpLCAwLCAwLCAwLAorICAgIFdLQnVuZGxl
QWRkVXNlclNjcmlwdChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwgc2NyaXB0V29ybGQuZ2V0KCksIHNv
dXJjZVdLLmdldCgpLCAwLCAwLCAwLAogICAgICAgICAocnVuQXRTdGFydCA/IGtXS0luamVjdEF0
RG9jdW1lbnRTdGFydCA6IGtXS0luamVjdEF0RG9jdW1lbnRFbmQpLAogICAgICAgICAoYWxsRnJh
bWVzID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkpOwog
fQpAQCAtMTgyLDI1ICsxODIsMjUgQEAgdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU3R5bGVTaGVl
dChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgYWxsRnJhbWVzKQogICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsKICAgICBXS1JldGFpblB0cjxXS0J1
bmRsZVNjcmlwdFdvcmxkUmVmPiBzY3JpcHRXb3JsZChBZG9wdFdLLCBXS0J1bmRsZVNjcmlwdFdv
cmxkQ3JlYXRlV29ybGQoKSk7CiAKLSAgICBXS0J1bmRsZUFkZFVzZXJTdHlsZVNoZWV0KEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2VHcm91cCgpLCBzY3JpcHRXb3JsZC5nZXQoKSwgc291cmNlV0suZ2V0KCksIDAsIDAsIDAsCisg
ICAgV0tCdW5kbGVBZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwgc2NyaXB0
V29ybGQuZ2V0KCksIHNvdXJjZVdLLmdldCgpLCAwLCAwLCAwLAogICAgICAgICAoYWxsRnJhbWVz
ID8ga1dLSW5qZWN0SW5BbGxGcmFtZXMgOiBrV0tJbmplY3RJblRvcEZyYW1lT25seSkpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OmtlZXBXZWJIaXN0b3J5KCkKIHsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucG9zdFNldEFkZHNWaXNpdGVkTGlua3ModHJ1ZSk7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBvc3RTZXRBZGRzVmlzaXRlZExpbmtzKHRydWUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVm
IGFyZ3VtZW50KQogewotICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRv
V0soYXJndW1lbnQpLmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1h
bmQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUp
LmdldCgpLCB0b1dLKGFyZ3VtZW50KS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6Zmlu
ZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpTVmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1
ZSkKIHsKICAgICBXS0ZpbmRPcHRpb25zIG9wdGlvbnMgPSAwOwogCi0gICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFt
ZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IGxlbmd0aFByb3BlcnR5TmFtZShBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoImxlbmd0aCIpKTsKICAgICBKU09iamVjdFJlZiBvcHRpb25zQXJyYXkgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgb3B0aW9uc0FycmF5QXNWYWx1ZSwgMCk7CkBAIC0yMzEsMzcgKzIz
MSwzNyBAQCBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBK
U1ZhbHVlUmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXR1cm4gV0tCdW5kbGVQYWdlRmluZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5wYWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgb3B0aW9ucyk7CisgICAgcmV0dXJuIFdL
QnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIG9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmNsZWFyQWxsRGF0YWJhc2VzKCkKIHsKLSAgICBXS0J1bmRsZUNsZWFyQWxsRGF0YWJhc2Vz
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7CisgICAgV0tCdW5kbGVDbGVhckFs
bERhdGFiYXNlcyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVvdGEpCiB7Ci0gICAg
cmV0dXJuIFdLQnVuZGxlU2V0RGF0YWJhc2VRdW90YShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIHF1b3RhKTsKKyAgICByZXR1cm4gV0tCdW5kbGVTZXREYXRhYmFzZVF1b3RhKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcXVvdGEpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQogewotICAgIFdLQnVuZGxlQ2xl
YXJBcHBsaWNhdGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7Cisg
ICAgV0tCdW5kbGVDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2Fj
aGVGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlQ2xlYXJBcHBs
aWNhdGlvbkNhY2hlRm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
dG9XSyhvcmlnaW4pLmdldCgpKTsKKyAgICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZUZv
ck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sob3JpZ2lu
KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1
aW50NjRfdCBzaXplKQogewotICAgIFdLQnVuZGxlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHNpemUpOworICAgIFdLQnVuZGxlU2V0QXBw
Q2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHNp
emUpOwogfQogCiBsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2Fn
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlR2V0
QXBwQ2FjaGVVc2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCks
IHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlR2V0QXBwQ2FjaGVVc2Fn
ZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sob3Jp
Z2luKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFw
cGxpY2F0aW9uQ2FjaGVRdW90YSgpCkBAIC0yODYsOSArMjg2LDkgQEAgc3RhdGljIGlubGluZSBK
U1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJl
ZiBzdHJpbmcKIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9u
Q2FjaGUoKQogewotICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG9yaWdpbnMoQWRvcHRXSywg
V0tCdW5kbGVDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSkpOworICAgIFdLUmV0YWluUHRyPFdLQXJyYXlSZWY+IG9yaWdpbnMo
QWRvcHRXSywgV0tCdW5kbGVDb3B5T3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSkpOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEph
dmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAKICAgICByZXR1cm4gc3RyaW5nQXJyYXlUb0pT
KGNvbnRleHQsIG9yaWdpbnMuZ2V0KCkpOwpAQCAtMjk2LDcgKzI5Niw3IEBAIEpTVmFsdWVSZWYg
VGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkKIAogYm9vbCBUZXN0UnVu
bmVyOjppc0NvbW1hbmRFbmFibGVkKEpTU3RyaW5nUmVmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdL
QnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZUlzRWRpdGluZ0NvbW1hbmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6
c2V0Q2FuT3BlbldpbmRvd3MoYm9vbCkKQEAgLTMwOCw1OCArMzA4LDU4IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0Q2FuT3BlbldpbmRvd3MoYm9vbCkKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0WFNTQXVk
aXRvckVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBrZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldlYktpdFhTU0F1
ZGl0b3JFbmFibGVkIikpOwotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRl
c3RSdW5uZXIoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5k
bGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAo
KSwga2V5LmdldCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1Vu
aXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVT
ZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxl
ZCk7CisgICAgV0tCdW5kbGVTZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QWxs
b3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS0J1bmRsZVNl
dEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7Cisg
ICAgV0tCdW5kbGVTZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdy
b3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBsdWdpbnNFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS0J1bmRsZVNldFBsdWdpbnNFbmFibGVkKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VH
cm91cCgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFBsdWdpbnNFbmFibGVkKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2Ny
aXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICAgV0tCdW5kbGVTZXRK
YXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAg
ICAgV0tCdW5kbGVTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VH
cm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICAgV0tCdW5kbGVTZXRQcml2YXRlQnJvd3Np
bmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICAgV0tCdW5kbGVTZXRQcml2
YXRlQnJvd3NpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRQb3B1cEJsb2NraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7
Ci0gICAgIFdLQnVuZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVu
YWJsZWQpOworICAgICBXS0J1bmRsZVNldFBvcHVwQmxvY2tpbmdFbmFibGVkKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRob3JBbmRV
c2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgIFdLQnVuZGxlU2V0QXV0aG9y
QW5kVXNlclN0eWxlc0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgICBXS0J1
bmRsZVNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBl
bmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RF
bnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uUHJv
dG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0aW9u
U3ViZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZUFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgdG9XSyhzb3VyY2VPcmlnaW4pLmdl
dCgpLCB0b1dLKGRlc3RpbmF0aW9uUHJvdG9jb2wpLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uSG9z
dCkuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXS0J1bmRsZUFkZE9y
aWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgdG9XSyhzb3VyY2VPcmlnaW4pLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uUHJvdG9jb2wp
LmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uSG9zdCkuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJk
b21haW5zKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxp
c3RFbnRyeShKU1N0cmluZ1JlZiBzb3VyY2VPcmlnaW4sIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9u
UHJvdG9jb2wsIEpTU3RyaW5nUmVmIGRlc3RpbmF0aW9uSG9zdCwgYm9vbCBhbGxvd0Rlc3RpbmF0
aW9uU3ViZG9tYWlucykKIHsKLSAgICBXS0J1bmRsZVJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgdG9XSyhzb3VyY2VPcmln
aW4pLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uUHJvdG9jb2wpLmdldCgpLCB0b1dLKGRlc3RpbmF0
aW9uSG9zdCkuZ2V0KCksIGFsbG93RGVzdGluYXRpb25TdWJkb21haW5zKTsKKyAgICBXS0J1bmRs
ZVJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgdG9XSyhzb3VyY2VPcmlnaW4pLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9u
UHJvdG9jb2wpLmdldCgpLCB0b1dLKGRlc3RpbmF0aW9uSG9zdCkuZ2V0KCksIGFsbG93RGVzdGlu
YXRpb25TdWJkb21haW5zKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjppc1BhZ2VCb3hWaXNpYmxl
KGludCBwYWdlSW5kZXgpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFn
ZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVJc1BhZ2VCb3hWaXNpYmxlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgpOworICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQ
YWdlQm94VmlzaWJsZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1haW5G
cmFtZSwgcGFnZUluZGV4KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIo
SlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZWxlbWVudCwgSlNTdHJpbmdSZWYgdmFs
dWUpCkBAIC0zNzQsMjAgKzM3NCwyMCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNl
cihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cgogdm9pZCBU
ZXN0UnVubmVyOjpzZXRBdWRpb1Jlc3VsdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiBkYXRhKQogewogICAgIC8vIEZJWE1FICgxMjMwNTgpOiBVc2UgYSBKU0MgQVBJIHRvIGdldCBi
dWZmZXIgY29udGVudHMgb25jZSBzdWNoIGlzIGV4cG9zZWQuCi0gICAgV0tSZXRhaW5QdHI8V0tE
YXRhUmVmPiBhdWRpb0RhdGEoQWRvcHRXSywgV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhB
cnJheShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0QXVkaW9SZXN1bHQoYXVkaW9EYXRhLmdl
dCgpKTsKKyAgICBXS1JldGFpblB0cjxXS0RhdGFSZWY+IGF1ZGlvRGF0YShBZG9wdFdLLCBXS0J1
bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFycmF5KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0KCkpOwogICAgIG1fd2hhdFRvRHVtcCA9
IEF1ZGlvOwogICAgIG1fZHVtcFBpeGVscyA9IGZhbHNlOwogfQogCiB1bnNpZ25lZCBUZXN0UnVu
bmVyOjp3aW5kb3dDb3VudCgpCiB7Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlQ291bnQoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2VDb3VudCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQmFja0ZvcndhcmRMaXN0KCkK
IHsKLSAgICBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENsZWFyKFdLQnVuZGxlUGFnZUdldEJhY2tG
b3J3YXJkTGlzdChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAg
ICBXS0J1bmRsZUJhY2tGb3J3YXJkTGlzdENsZWFyKFdLQnVuZGxlUGFnZUdldEJhY2tGb3J3YXJk
TGlzdChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKIH0KIAog
Ly8gT2JqZWN0IENyZWF0aW9uCkBAIC0zOTksMTggKzM5OSwxOCBAQCB2b2lkIFRlc3RSdW5uZXI6
Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRv
d09iamVjdAogCiB2b2lkIFRlc3RSdW5uZXI6OnNob3dXZWJJbnNwZWN0b3IoKQogewotICAgIFdL
QnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJbnNwZWN0b3JTaG93
KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbG9zZVdlYkluc3BlY3Rvcigp
CiB7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3Io
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVJ
bnNwZWN0b3JDbG9zZShXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVh
dGVJbldlYkluc3BlY3RvcihKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIFdLQnVuZGxlSW5zcGVj
dG9yRXZhbHVhdGVTY3JpcHRGb3JUZXN0KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpLCBzY3JpcHRXSy5nZXQoKSk7CisgICAg
V0tCdW5kbGVJbnNwZWN0b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5z
cGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlw
dFdLLmdldCgpKTsKIH0KIAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIFdLUmV0YWlu
UHRyPFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+ID4gV29ybGRNYXA7CkBAIC00NDcsNyArNDQ3LDcg
QEAgdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChKU0NvbnRl
eHRSZWYgY29udGV4dCwgdW5zaWduZWQgd28KIAogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUg
PSBXS0J1bmRsZUZyYW1lRm9ySmF2YVNjcmlwdENvbnRleHQoY29udGV4dCk7CiAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICAgICAgZnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKIAogICAgIEpTR2xvYmFsQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQuZ2V0KCkpOwogICAgIEpT
RXZhbHVhdGVTY3JpcHQoanNDb250ZXh0LCBzY3JpcHQsIDAsIDAsIDAsIDApOyAKQEAgLTQ2Miwy
OCArNDYyLDI4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UE9TSVhMb2NhbGUoSlNTdHJpbmdSZWYg
bG9jYWxlKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFRleHREaXJlY3Rpb24oSlNTdHJpbmdSZWYg
ZGlyZWN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7
CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJh
bWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICByZXR1
cm4gV0tCdW5kbGVGcmFtZVNldFRleHREaXJlY3Rpb24obWFpbkZyYW1lLCB0b1dLKGRpcmVjdGlv
bikuZ2V0KCkpOwogfQogICAgIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTaG91bGRTdGF5T25QYWdl
QWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZChib29sIHNob3VsZFN0YXlPblBhZ2UpCiB7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3ROZXdCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgh
c2hvdWxkU3RheU9uUGFnZSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBvc3RO
ZXdCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSghc2hvdWxkU3RheU9uUGFnZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0RGVmZXJzTG9hZGluZyhib29sIHNob3VsZERlZmVyTG9hZGluZykKIHsK
LSAgICBXS0J1bmRsZVBhZ2VTZXREZWZlcnNMb2FkaW5nKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSwgc2hvdWxkRGVmZXJMb2FkaW5nKTsKKyAgICBXS0J1bmRsZVBhZ2VT
ZXREZWZlcnNMb2FkaW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgc2hvdWxkRGVmZXJMb2FkaW5nKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRQYWdlVmlz
aWJpbGl0eShKU1N0cmluZ1JlZiBzdGF0ZSkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuc2V0SGlkZGVuKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJoaWRkZW4i
KSB8fCBKU1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0YXRlLCAicHJlcmVuZGVyIikpOwor
ICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRIaWRkZW4oSlNTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhzdGF0ZSwgImhpZGRlbiIpIHx8IEpTU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcoc3RhdGUsICJwcmVyZW5kZXIiKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVzZXRQ
YWdlVmlzaWJpbGl0eSgpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldEhpZGRl
bihmYWxzZSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEhpZGRlbihmYWxz
ZSk7CiB9CiAKIHR5cGVkZWYgV1RGOjpIYXNoTWFwPHVuc2lnbmVkLCBKU1ZhbHVlUmVmPiBDYWxs
YmFja01hcDsKQEAgLTUwNSw3ICs1MDUsNyBAQCBzdGF0aWMgdm9pZCBjYWNoZVRlc3RSdW5uZXJD
YWxsYmFjayh1bnNpZ25lZCBpbmRleCwgSlNWYWx1ZVJlZiBjYWxsYmFjaykKICAgICBpZiAoIWNh
bGxiYWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlw
dENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1ZhbHVlUHJvdGVjdChjb250ZXh0LCBjYWxsYmFj
ayk7CiAgICAgY2FsbGJhY2tNYXAoKS5hZGQoaW5kZXgsIGNhbGxiYWNrKTsKQEAgLTUxNSw3ICs1
MTUsNyBAQCBzdGF0aWMgdm9pZCBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVuc2lnbmVkIGluZGV4
KQogewogICAgIGlmICghY2FsbGJhY2tNYXAoKS5jb250YWlucyhpbmRleCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVm
IGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsK
ICAgICBKU09iamVjdFJlZiBjYWxsYmFjayA9IEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBjYWxs
YmFja01hcCgpLnRha2UoaW5kZXgpLCAwKTsKICAgICBKU09iamVjdENhbGxBc0Z1bmN0aW9uKGNv
bnRleHQsIGNhbGxiYWNrLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QoY29udGV4dCksIDAsIDAs
IDApOwpAQCAtNTI1LDMwICs1MjUsMzAgQEAgc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJDYWxs
YmFjayh1bnNpZ25lZCBpbmRleCkKIHZvaWQgVGVzdFJ1bm5lcjo6YWRkQ2hyb21lSW5wdXRGaWVs
ZChKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKEFk
ZENocm9tZUlucHV0RmllbGRDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBvc3RBZGRDaHJvbWVJbnB1dEZpZWxkKCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZChKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFj
a0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBvc3RS
ZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Zm9jdXNXZWJW
aWV3KEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
Rm9jdXNXZWJWaWV3Q2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wb3N0Rm9jdXNXZWJWaWV3KCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBvc3RGb2N1c1dlYlZpZXcoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRCYWNraW5n
U2NhbGVGYWN0b3IoZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvciwgSlNWYWx1ZVJlZiBjYWxsYmFj
aykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhTZXRCYWNraW5nU2NhbGVGYWN0b3JD
YWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RT
ZXRCYWNraW5nU2NhbGVGYWN0b3IoYmFja2luZ1NjYWxlRmFjdG9yKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucG9zdFNldEJhY2tpbmdTY2FsZUZhY3RvcihiYWNraW5nU2NhbGVG
YWN0b3IpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFdpbmRvd0lzS2V5KGJvb2wgaXNLZXkp
CiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RTZXRXaW5kb3dJc0tleShpc0tl
eSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBvc3RTZXRXaW5kb3dJc0tleShp
c0tleSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxs
YmFjaygpCkBAIC01NzksMTIgKzU3OSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdG9Cb29sKEpT
U3RyaW5nUmVmIHZhbHVlKQogdm9pZCBUZXN0UnVubmVyOjpvdmVycmlkZVByZWZlcmVuY2UoSlNT
dHJpbmdSZWYgcHJlZmVyZW5jZSwgSlNTdHJpbmdSZWYgdmFsdWUpCiB7CiAgICAgLy8gRklYTUU6
IGhhbmRsZSBub24tYm9vbGVhbiBwcmVmZXJlbmNlcy4KLSAgICBXS0J1bmRsZU92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCB0b1dLKHByZWZlcmVuY2Up
LmdldCgpLCB0b0Jvb2wodmFsdWUpKTsKKyAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVu
Y2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCB0b1dLKHByZWZlcmVuY2UpLmdl
dCgpLCB0b0Jvb2wodmFsdWUpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbHdheXNBY2Nl
cHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdLQnVuZGxlU2V0QWx3YXlzQWNjZXB0Q29v
a2llcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIGFjY2VwdCk7CisgICAgV0tC
dW5kbGVTZXRBbHdheXNBY2NlcHRDb29raWVzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgYWNjZXB0KTsKIH0KIAogZG91YmxlIFRlc3RSdW5uZXI6OnByZWNpc2VUaW1lKCkK
QEAgLTU5OCw3ICs1OTgsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0RW5h
YmxlZChib29sIGVuYWJsZWQpCiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZW1wdHlV
cmwgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAgICAgV0tT
dHJpbmdSZWYgbG9jYXRpb24gPSBlbmFibGVkID8gbV91c2VyU3R5bGVTaGVldExvY2F0aW9uLmdl
dCgpIDogZW1wdHlVcmwuZ2V0KCk7Ci0gICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVTaGVldExvY2F0
aW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CisgICAgV0tCdW5kbGVTZXRVc2VyU3R5bGVT
aGVldExvY2F0aW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlv
bikKQEAgLTYxMSw2OCArNjExLDY4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICBX
S0J1bmRsZVNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwg
ZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVs
ZW1lbnRzKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS0J1bmRsZVNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5kbGVTZXRU
YWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIGVuYWJs
ZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNlcmlhbGl6ZUhUVFBMb2FkcygpCiB7Ci0g
ICAgV0tCdW5kbGVTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIHRydWUpOworICAgIFdLQnVuZGxlU2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB0cnVlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKQogewotICAgIFdLQnVuZGxl
RGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSk7CisgICAgV0tCdW5kbGVEaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRD
YWNoZU1vZGVsKGludCBtb2RlbCkKIHsKLSAgICBXS0J1bmRsZVNldENhY2hlTW9kZWwoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBtb2RlbCk7CisgICAgV0tCdW5kbGVTZXRDYWNo
ZU1vZGVsKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbW9kZWwpOwogfQog
CiB2b2lkIFRlc3RSdW5uZXI6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICBXS0J1bmRsZVNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdF
bmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldEFzeW5jaHJv
bm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNT
dHJpbmdSZWYgb3JpZ2luKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5X
SyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Np
b24oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCB0cnVlKTsKKyAgICBXS0J1bmRs
ZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIG9y
aWdpbldLLmdldCgpLCB0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkZW55V2ViTm90aWZp
Y2F0aW9uUGVybWlzc2lvbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG9yaWdpbldLID0gdG9XSyhvcmlnaW4pOwotICAgIFdLQnVuZGxlU2V0V2Vi
Tm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCks
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgb3JpZ2luV0suZ2V0KCks
IGZhbHNlKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxzZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6cmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoKQogewotICAgIFdL
QnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCkpOworICAgIFdLQnVuZGxlUmVtb3ZlQWxsV2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbnMoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNpbXVsYXRlV2Vi
Tm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmljYXRpb24pCiB7Ci0gICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5k
bGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7Ci0gICAgdWludDY0X3Qgbm90
aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5vdGlmaWNhdGlvbklEKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgY29udGV4dCwgbm90aWZpY2F0aW9uKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZp
Y2F0aW9uSUQpOworICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tCdW5kbGVHZXRXZWJO
b3RpZmljYXRpb25JRChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIGNvbnRl
eHQsIG5vdGlmaWNhdGlvbik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBvc3RT
aW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewogICAg
IC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgotICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihlbmFibGVk
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3Vi
bGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJl
ZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVmIGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBq
c0hlYWRpbmcsIEpTVmFsdWVSZWYganNTcGVlZCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIGJvb2wgcHJvdmlkZXNBbHRpdHVkZSA9
IGZhbHNlOwpAQCAtNzAzLDQ0ICs3MDMsNDQgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25naXR1ZGUsIGQKICAg
ICAgICAgc3BlZWQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwganNTcGVlZCwgMCk7CiAgICAg
fQogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRp
dHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRl
c0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxv
bmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGlu
ZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tH
ZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihKU1N0cmluZ1JlZiBtZXNzYWdlKQog
ewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlV0sgPSB0b1dLKG1lc3NhZ2Up
OwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlv
blVuYXZhaWxhYmxlRXJyb3IobWVzc2FnZVdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKG1l
c3NhZ2VXSy5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlck1lZGlhUGVybWlz
c2lvbihib29sIGVuYWJsZWQpCiB7CiAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUg
YnkgZnJhbWUuCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFVzZXJNZWRpYVBlcm1p
c3Npb24oZW5hYmxlZCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFVzZXJN
ZWRpYVBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6Y2FsbFNob3Vs
ZENsb3NlT25XZWJWaWV3KCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAg
ICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVDYWxsU2hvdWxkQ2xvc2VPbldlYlZpZXcobWFpbkZyYW1l
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKHVuc2lnbmVkIGhv
d0ZhckJhY2t3YXJkKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5xdWV1ZUJhY2tO
YXZpZ2F0aW9uKGhvd0ZhckJhY2t3YXJkKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucXVldWVCYWNrTmF2aWdhdGlvbihob3dGYXJCYWNrd2FyZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVGb3J3YXJkTmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJGb3J3YXJkKQogewot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKGhvd0Zh
ckZvcndhcmQpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uKGhvd0ZhckZvcndhcmQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9h
ZChKU1N0cmluZ1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKIHsKLSAgICBXS1JldGFpblB0
cjxXS1VSTFJlZj4gYmFzZVVSTFdLKEFkb3B0V0ssIFdLQnVuZGxlRnJhbWVDb3B5VVJMKFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCkpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkxXSyhBZG9wdFdLLCBXS0J1
bmRsZUZyYW1lQ29weVVSTChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSkpOwogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB1cmxXSyhBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwg
dG9XVEZTdHJpbmcodG9XSyh1cmwpKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHVybFN0cmluZ1dLKEFkb3B0V0ssIFdLVVJMQ29weVN0cmluZyh1cmxXSy5n
ZXQoKSkpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlTG9hZCh1cmxTdHJp
bmdXSy5nZXQoKSwgdG9XSyh0YXJnZXQpLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucXVldWVMb2FkKHVybFN0cmluZ1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJpbmcoSlNTdHJpbmdSZWYg
Y29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwp
CkBAIC03NDksNDUgKzc0OSw0NSBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZEhUTUxTdHJp
bmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJpbmdSZWYgYmFzZVVSTCwgSgogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBiYXNlVVJMV0sgPSBiYXNlVVJMID8gdG9XSyhiYXNlVVJMKSA6
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB1bnJlYWNoYWJsZVVSTFdLID0gdW5yZWFjaGFibGVVUkwgPyB0b1dLKHVucmVhY2hhYmxlVVJM
KSA6IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPigpOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0
KCksIHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnRlbnRXSy5nZXQoKSwgYmFzZVVSTFdLLmdldCgp
LCB1bnJlYWNoYWJsZVVSTFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZVJl
bG9hZCgpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlUmVsb2FkKCk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlUmVsb2FkKCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAg
ICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlTG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQo
KSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZGluZ1NjcmlwdChz
Y3JpcHRXSy5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2Ny
aXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
c2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1
ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChzY3JpcHRXSy5nZXQoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhib29s
IGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2UiKSk7CiAgICAgV0tSZXRhaW5Q
dHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoaGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVz
c2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUoSlNT
dHJpbmdSZWYgdXNlcm5hbWUpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRBdXRoZW50
aWNhdGlvblVzZXJuYW1lIikpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
Qm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0cmluZyh1c2VybmFtZSkpOwotICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBt
ZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhl
bnRpY2F0aW9uUGFzc3dvcmQoSlNTdHJpbmdSZWYgcGFzc3dvcmQpCiB7CiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpOwogICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhKU1N0
cmluZyhwYXNzd29yZCkpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OnNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdApAQCAtNzk1LDcg
Kzc5NSw3IEBAIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNv
bnN0CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZWN1cmVFdmVudElucHV0SXNFbmFibGVkIikp
OwogICAgIFdLVHlwZVJlZiByZXR1cm5EYXRhID0gMDsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCAwLCAmcmV0dXJuRGF0YSk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDAsICZyZXR1cm5EYXRhKTsKICAgICByZXR1cm4gV0tCb29sZWFuR2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihyZXR1cm5EYXRhKSk7CiB9CiAKQEAgLTgwMywxOSArODAz
LDE5IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QmxvY2tBbGxQbHVnaW5zKGJvb2wgc2hvdWxkQmxv
Y2spCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ss
IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJTZXRCbG9ja0FsbFBsdWdpbnMiKSk7CiAg
ICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS0Jvb2xl
YW5DcmVhdGUoc2hvdWxkQmxvY2spKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5
LmdldCgpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0K
IAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpudW1iZXJPZkRGR0NvbXBpbGVzKEpTVmFsdWVSZWYg
dGhlRnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgp
KTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpT
Q29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1h
aW5GcmFtZSk7CiAgICAgcmV0dXJuIEpTQzo6bnVtYmVyT2ZERkdDb21waWxlcyhjb250ZXh0LCB0
aGVGdW5jdGlvbik7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bmV2ZXJJbmxpbmVGdW5j
dGlvbihKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIHJldHVybiBKU0M6OnNldE5ldmVySW5saW5l
KGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCmluZGV4
IGFlNzM3ZmRjMWZhNDYyMWRhOTZiMWM1NjMyYTU4OWIzNjAwNTdmNWQuLmY0ZTY4ZjY5NTU5ZjM5
ZTM2YWZjNWRkMzIyODA4ZGE0M2UwODg4ZTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcApA
QCAtNTksMjIgKzU5LDIyIEBAIHZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6bWFrZVdpbmRvd09i
amVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luCiAKIHZvaWQgVGV4dElu
cHV0Q29udHJvbGxlcjo6c2V0TWFya2VkVGV4dChKU1N0cmluZ1JlZiB0ZXh0LCBpbnQgZnJvbSwg
aW50IGxlbmd0aCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VTZXRDb21wb3NpdGlvbihJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGV4dCkuZ2V0KCksIGZyb20sIGxl
bmd0aCk7CisgICAgV0tCdW5kbGVQYWdlU2V0Q29tcG9zaXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRleHQpLmdldCgpLCBmcm9tLCBsZW5ndGgp
OwogfQogCiBib29sIFRleHRJbnB1dENvbnRyb2xsZXI6Omhhc01hcmtlZFRleHQoKQogewotICAg
IHJldHVybiBXS0J1bmRsZVBhZ2VIYXNDb21wb3NpdGlvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCkpOworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VIYXNDb21wb3NpdGlv
bihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogfQogCiB2b2lk
IFRleHRJbnB1dENvbnRyb2xsZXI6OnVubWFya1RleHQoKQogewotICAgIFdLQnVuZGxlUGFnZUNv
bmZpcm1Db21wb3NpdGlvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkp
OworICAgIFdLQnVuZGxlUGFnZUNvbmZpcm1Db21wb3NpdGlvbihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogfQogCiB2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6
Omluc2VydFRleHQoSlNTdHJpbmdSZWYgdGV4dCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VDb25maXJt
Q29tcG9zaXRpb25XaXRoVGV4dChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCksIHRvV0sodGV4dCkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUNvbmZpcm1Db21wb3NpdGlv
bldpdGhUZXh0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9X
Syh0ZXh0KS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJBdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCmluZGV4IDkzNTI3NzIyMGRkZTY0YWJmMDA2
MzI5Mzk5ODY1MmEwODg3ZDYxMWQuLjRiNTQxZjViM2RmNWQzMTZjZDU4MjU3MTcyMTU4NWY4NWIw
ODdkMmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
YXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAK
QEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIEF0a09iamVjdCogY2hpbGRFbGVtZW50QnlJZChBdGtP
YmplY3QqIHBhcmVudCwgY29uc3QgY2hhciogaWQpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJ
ZChKU1N0cmluZ1JlZiBpZCkKIHsKLSAgICBBdGtPYmplY3QqIHJvb3QgPSBBVEtfT0JKRUNUKFdL
QWNjZXNzaWJpbGl0eVJvb3RPYmplY3QoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+
cGFnZSgpKSk7CisgICAgQXRrT2JqZWN0KiByb290ID0gQVRLX09CSkVDVChXS0FjY2Vzc2liaWxp
dHlSb290T2JqZWN0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkp
OwogICAgIGlmICghcm9vdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwNyw3ICsx
MDcsNyBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OnBsYXRmb3JtTmFtZSgpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBX
S0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKTsKICAgICB2b2lkKiByb290ID0gV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdl
KTsKIAogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nh
c3Q8QXRrT2JqZWN0Kj4ocm9vdCkpOwpAQCAtMTE1LDcgKzExNSw3IEBAIFBhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50
KCkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcjo6Zm9jdXNlZEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0g
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFn
ZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwog
ICAgIHZvaWQqIHJvb3QgPSBXS0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KHBhZ2UpOwogCiAg
ICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxBdGtP
YmplY3QqPihyb290KSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90
aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKaW5kZXggNmUwYTFjODBjZTcxNTE0OTBlODlkZjhkOWU0
Mjc4NTgzZTU1NDM0Yy4uODIxYjE1MDczMDM1NzVjNDEwOWZlZWNmMWZhYmRlNTJiMTFmZWFlYiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNj
ZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyQXRrLmNwcApAQCAtNTUsNyArNTUsNyBAQCBnYm9vbGVhbiBheE9iamVjdEV2ZW50TGlzdGVu
ZXIoR1NpZ25hbEludm9jYXRpb25IaW50KiBzaWduYWxIaW50LCB1bnNpZ25lZCBudW1QYQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQot
ICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBqc0Nv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICNl
bHNlCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlcjo6c2V0Tm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayhKU1ZhbHVlUmUKICAgICBtX25v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2sgPSBub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNr
OwogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0gICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAg
V0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgp
LT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VH
ZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2Vsc2UKQEAgLTE4MSw3ICsx
ODEsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpzZXROb3RpZmlj
YXRpb25GdW5jdGlvbkNhbGxiYWNrKEpTVmFsdWVSZQogdm9pZCBBY2Nlc3NpYmlsaXR5Tm90aWZp
Y2F0aW9uSGFuZGxlcjo6cmVtb3ZlQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIoKQog
ewogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQotICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICNlbHNlCkBAIC0yMzEsNyArMjMx
LDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcjo6Y29ubmVjdEFjY2Vz
c2liaWxpdHlDYWxsYmFja3MoKQogICAgICAgICB1bnNpZ25lZCBpZCA9IGF0a19hZGRfZ2xvYmFs
X2V2ZW50X2xpc3RlbmVyKGF4T2JqZWN0RXZlbnRMaXN0ZW5lciwgKnNpZ25hbE5hbWUpOwogICAg
ICAgICBpZiAoIWlkKSB7CiAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IFN0cmluZzo6Zm9y
bWF0KCJhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lciBmYWlsZWQgZm9yIHNpZ25hbCAlc1xu
IiwgKnNpZ25hbE5hbWUpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQobWVzc2FnZSk7CisgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkub3V0cHV0VGV4dChtZXNzYWdlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRr
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKaW5kZXggMGFk
MjIzNTRiZDc5YTkxNTMyN2NiOGEwOGFiZTFhOWZhYzFkNWZlOC4uYzNiZTFlYjFhNjQ5NWM4NTg2
YTkyYTViOTBhNTExMzk4MzczNmQ4NyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudEF0ay5jcHAKQEAgLTYyMSw3ICs2MjEsNyBAQCBzdGF0aWMgVmVjdG9yPFJlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4gY29udmVydEdQdHJBcnJheVRvVmVjdG9yKGNvbnN0IEdQ
dAogCiBzdGF0aWMgSlNWYWx1ZVJlZiBjb252ZXJ0VG9KU09iamVjdEFycmF5KGNvbnN0IFZlY3Rv
cjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+JiBjaGlsZHJlbikKIHsKLSAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIHNpemVfdCBl
bGVtZW50Q291bnQgPSBjaGlsZHJlbi5zaXplKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1t
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1
bmRsZVBhZ2VDb2NvYS5tbQppbmRleCAzOTg5MTkxMmYzOWRiMjZiYmRjOWU1MDQwMzU1ZThmM2M5
ZjRkZDQ1Li40NjJhZTViNTY5OWU1NDEyZDY4MmJiZmNmYjI3ZTgyNDkzMTIzZGZhIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVk
QnVuZGxlUGFnZUNvY29hLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KQEAgLTQyLDcgKzQyLDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JGcmFtZShXS0J1bmRsZUZyYW1lUmUKICAgICBpZiAoIVdLQnVuZGxlRnJhbWVJc01haW5GcmFt
ZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldENyYXNoUmVwb3J0QXBwbGljYXRp
b25TcGVjaWZpY0luZm9ybWF0aW9uVG9VUkwoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+dGVzdFVSTCgpKTsKKyAgICBzZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lm
aWNJbmZvcm1hdGlvblRvVVJMKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVy
KCktPnRlc3RVUkwoKSk7CiAKICNpZiBQTEFURk9STShJT1MpCiAgICAgV0tCdW5kbGVQYWdlU2V0
VXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbihwYWdlKCksIHRydWUpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVm
bC5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVu
bmVyRWZsLmNwcAppbmRleCA4Mjg5MDIzZDdkNmQ0ZWIzNTUzZDU2NWEzNTI2ZDVlYjVhM2RkNDJl
Li5jYmMwNzBiM2E4ZmZmMzUxZjdmMTdiMTRjNWMwNWE1NjU5MzcyZWY0IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVubmVyRWZsLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVu
bmVyRWZsLmNwcApAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIEVp
bmFfQm9vbCB3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckNhbGxiYWNrKHZvaWQqKQogewotICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyRmlyZWQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigp
LT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCmluZGV4IGJjNjlk
OGRhMjcxMmY2ZGY5ZDc5ODY2OTU4MTg4OTAyYjg2ZTNhYzIuLjhmOWM0ZTAxYzg1N2MyNjFjMTE5
NGFkMjBiM2VkYWU4YTFjMjFlNGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tCisrKyBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250
cm9sbGVySU9TLm1tCkBAIC03Myw3ICs3Myw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9i
amVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFBhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVF
bGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBX
S0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKTsKICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdL
QWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFj
Y2Vzc2libGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6
aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMu
bW0KaW5kZXggNTNmZTIyYzM4NjBkMGE4OGM3NDFlZDM1YjAyNzg2ODRlOTY5ZDJjZi4uZTY4OGM5
ODI3ZTUyNTE2Y2JlMjM1ZTRiMDkxN2U2ZWMxNmNhOWJjNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJN
YWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0KQEAgLTEwMiw3ICsxMDIsNyBAQCBzdGF0aWMgaWQg
ZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKGlkIG9iaiwgTlNTdHJpbmcgKmlkQXR0cmlidXRlKQog
CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9s
bGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgp
LT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgaWQgcm9vdCA9IHN0YXRpY19jYXN0PFBsYXRm
b3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKIAogICAgIGlk
IHJlc3VsdCA9IGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChyb290LCBbTlNTdHJpbmcgc3RyaW5n
V2l0aEpTU3RyaW5nUmVmOmlkQXR0cmlidXRlXSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFu
ZGxlci5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCmluZGV4IDIzYmU5M2Y2NjkwMzEzZmY1MmYy
Y2JlOTM2M2U5Mjc3YmMwM2JhNjQuLjY1MWI1OTExMmU4OTdmYjY2YTgzYjJlNzVmNmYwZWY2NmYw
MmM1YjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25I
YW5kbGVyLm1tCkBAIC03Nyw3ICs3Nyw3IEBACiB7CiAgICAgW3NlbGYgc3RvcE9ic2VydmluZ107
CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RS
OjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CiAKICAgICBKU1ZhbHVlVW5wcm90ZWN0KGNvbnRleHQsIG1fbm90aWZpY2F0aW9uRnVu
Y3Rpb25DYWxsYmFjayk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgaWYgKCFjYWxsYmFjaykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
KTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgaWYgKG1fbm90aWZpY2F0aW9uRnVuY3Rpb25DYWxs
YmFjaykKQEAgLTEyNSw3ICsxMjUsNyBAQAogICAgIGlmIChtX3BsYXRmb3JtRWxlbWVudCAmJiBt
X3BsYXRmb3JtRWxlbWVudCAhPSBbbm90aWZpY2F0aW9uIG9iamVjdF0pCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShX
VFI6OkluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKIAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc05vdGlmaWNhdGlvbihB
ZG9wdCwgW25vdGlmaWNhdGlvbk5hbWUgY3JlYXRlSlNTdHJpbmdSZWZdKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCmluZGV4IGEyMDg5ZGYxZTE5ZWVhNjc4OThh
MjU0YjI3MDU3NTMyYzM2NGIyNzEuLjk1ZDU0MzMwMTVjYWY1YzdmNjkxZjU0YTc2OTI0MzcxZDJj
ZWM0NTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQpAQCAt
MzYwLDcgKzM2MCw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0Q2hpbGRyZW5X
aXRoUmFuZ2UoVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFCiAKIEpTVmFsdWVSZWYgQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0CiB7Ci0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCiAgICAgQkVHSU5fQVhf
T0JKQ19FWENFUFRJT05TCkBAIC0zNzQsNyArMzc0LDcgQEAgSlNWYWx1ZVJlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKIAogSlNWYWx1ZVJlZiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Ojpjb2x1bW5IZWFkZXJzKCkgY29uc3QKIHsKLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIEJFR0lOX0FYX09CSkNfRVhD
RVBUSU9OUwpAQCAtNTk0LDcgKzU5NCw3IEBAIGRvdWJsZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpudW1iZXJBdHRyaWJ1dGVWYWx1ZShKU1N0cmluZ1JlZiBhdHRyaWJ1dGUpCiAKIEpTVmFsdWVS
ZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6dWlFbGVtZW50QXJyYXlBdHRyaWJ1dGVWYWx1ZShK
U1N0cmluZ1JlZiBhdHRyaWJ1dGUpIGNvbnN0CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWlu
RnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgCiAgICAgVmVjdG9yPFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50Pj4gZWxlbWVudHM7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCAxNGYy
ZDliOTNmMGNhNDlkM2QxZTA1MWNlYzM2MjQ0Yjg2YWQ3MTliLi4yM2Y1YjY5MDUxNmU5YjgxYzZj
M2EwYTY3YjA0ZmMzOTRkMjNjNzkzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQ0LDcgKzQ0
LDcgQEAgdm9pZCBUZXN0UnVubmVyOjppbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIo
KQogCiBzdGF0aWMgdm9pZCB3YWl0VW50aWxEb25lV2F0Y2hkb2dUaW1lckZpcmVkKENGUnVuTG9v
cFRpbWVyUmVmIHRpbWVyLCB2b2lkKiBpbmZvKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckZpcmVkKCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6aW5pdGlhbGl6ZVdhaXRUb0R1
bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcAppbmRleCBhMjk0NDM5OThlZjU1Y2Y5Y2Q0MDkyOGQyMzY3ZmVmY2VhNjI0OTcz
Li4zMzdhYTc2OTM3OTU0YTJmMTBjYmY0NzMzOTdhNWI0NmFiZWY5NjU1IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTIsNyArOTIsNyBAQCBzdGF0aWMg
V0tEYXRhUmVmIGNvcHlXZWJDcnlwdG9NYXN0ZXJLZXkoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lk
KikKIAogc3RhdGljIFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyOwogCi1UZXN0Q29udHJvbGxl
ciYgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpCitUZXN0Q29udHJvbGxlciYgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgQVNTRVJUKGNvbnRyb2xsZXIpOwogICAgIHJldHVybiAq
Y29udHJvbGxlcjsKQEAgLTE1MCw3ICsxNTAsNyBAQCBzdGF0aWMgdm9pZCBzZXRXaW5kb3dGcmFt
ZShXS1BhZ2VSZWYgcGFnZSwgV0tSZWN0IGZyYW1lLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQog
c3RhdGljIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKFdLUGFnZVJlZiBwYWdlLCBX
S1N0cmluZ1JlZiBtZXNzYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBjb25zdCB2b2lkKikKIHsKICAg
ICBwcmludGYoIkNPTkZJUk0gTkFWSUdBVElPTjogJXNcbiIsIHRvU1REKG1lc3NhZ2UpLmNfc3Ry
KCkpOwotICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuYmVmb3JlVW5sb2FkUmV0
dXJuVmFsdWUoKTsKKyAgICByZXR1cm4gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmJlZm9y
ZVVubG9hZFJldHVyblZhbHVlKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJ1bk1vZGFs
KFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMTgzLDEyICsxODMs
MTIgQEAgc3RhdGljIHZvaWQgdW5mb2N1cyhXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKIAogc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNz
aW9uUmVxdWVzdChXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJpdHlPcmlnaW5SZWYsIFdL
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiBwZXJtaXNzaW9uUmVxdWVzdCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuaGFuZGxl
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChwZXJtaXNzaW9uUmVxdWVzdCk7CisgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmhhbmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVl
c3QocGVybWlzc2lvblJlcXVlc3QpOwogfQogCiBzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JV
c2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdChXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIFdLU2VjdXJp
dHlPcmlnaW5SZWYsIFdLVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RSZWYgcGVybWlzc2lvblJl
cXVlc3QsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLmhhbmRsZVVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KHBlcm1pc3Npb25SZXF1ZXN0
KTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFuZGxlVXNlck1lZGlhUGVybWlz
c2lvblJlcXVlc3QocGVybWlzc2lvblJlcXVlc3QpOwogfQogCiBXS1BhZ2VSZWYgVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZU90aGVyUGFnZShXS1BhZ2VSZWYgb2xkUGFnZSwgV0tVUkxSZXF1ZXN0UmVm
LCBXS0RpY3Rpb25hcnlSZWYsIFdLRXZlbnRNb2RpZmllcnMsIFdLRXZlbnRNb3VzZUJ1dHRvbiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTI1OCw3ICsyNTgsNyBAQCBXS1BhZ2VSZWYgVGVz
dENvbnRyb2xsZXI6OmNyZWF0ZU90aGVyUGFnZShXS1BhZ2VSZWYgb2xkUGFnZSwgV0tVUkxSZXF1
ZXN0UmVmLCBXSwogICAgIFdLUGFnZVNldFBhZ2VVSUNsaWVudChuZXdQYWdlLCAmb3RoZXJQYWdl
VUlDbGllbnQuYmFzZSk7CiAKICAgICBXS1BhZ2VMb2FkZXJDbGllbnRWNSBwYWdlTG9hZGVyQ2xp
ZW50ID0gewotICAgICAgICB7IDUsICZUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkgfSwKKyAgICAg
ICAgeyA1LCAmVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpIH0sCiAgICAgICAgIDAsIC8vIGRp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKICAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUKICAgICAgICAgMCwgLy8gZGlk
RmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lCkBAIC0zMDIsNyArMzAyLDcgQEAg
V0tQYWdlUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVPdGhlclBhZ2UoV0tQYWdlUmVmIG9sZFBh
Z2UsIFdLVVJMUmVxdWVzdFJlZiwgV0sKICAgICBXS1BhZ2VTZXRQYWdlTG9hZGVyQ2xpZW50KHZp
ZXctPnBhZ2UoKSwgJnBhZ2VMb2FkZXJDbGllbnQuYmFzZSk7CiAKICAgICBXS1BhZ2VQb2xpY3lD
bGllbnRWMSBwYWdlUG9saWN5Q2xpZW50ID0gewotICAgICAgICB7IDEsICZUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkgfSwKKyAgICAgICAgeyAxLCAmVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
IH0sCiAgICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb25fZGVwcmVj
YXRlZEZvclVzZVdpdGhWMAogICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dB
Y3Rpb24KICAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VfZGVwcmVjYXRlZEZv
clVzZVdpdGhWMApAQCAtMzE0LDcgKzMxNCw3IEBAIFdLUGFnZVJlZiBUZXN0Q29udHJvbGxlcjo6
Y3JlYXRlT3RoZXJQYWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLCiAK
ICAgICB2aWV3LT5kaWRJbml0aWFsaXplQ2xpZW50cygpOwogCi0gICAgVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCh2aWV3LCAqVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLm1fY3VycmVudEludm9jYXRpb24pOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS51cGRhdGVXaW5kb3dTY2FsZUZvclRlc3QodmlldywgKlRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tX2N1cnJlbnRJbnZvY2F0aW9uKTsKIAogICAgIFdLUmV0YWluKG5ld1BhZ2Up
OwogICAgIHJldHVybiBuZXdQYWdlOwpAQCAtNjc0LDExICs2NzQsMTEgQEAgYm9vbCBUZXN0Q29u
dHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgV0tSZXRhaW5QdHI8
V0tCb29sZWFuUmVmPiBzaG91bGRHQ1ZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUobV9n
Y0JldHdlZW5UZXN0cykpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0ocmVzZXRNZXNzYWdlQm9k
eS5nZXQoKSwgc2hvdWxkR0NLZXkuZ2V0KCksIHNob3VsZEdDVmFsdWUuZ2V0KCkpOwogCi0gICAg
V0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFy
ZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2Fn
ZUJvZHkuZ2V0KCkpOwogCi0gICAgV0tDb250ZXh0U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBmYWxzZSk7CisgICAgV0tDb250ZXh0
U2V0U2hvdWxkVXNlRm9udFNtb290aGluZyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29u
dGV4dCgpLCBmYWxzZSk7CiAKLSAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKFRlc3RDb250cm9s
bGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIGtXS0NhY2hlTW9kZWxEb2N1bWVudEJyb3dzZXIpOwor
ICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNv
bnRleHQoKSwga1dLQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nlcik7CiAKICAgICAvLyBGSVhNRTog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBlbnN1cmUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBw
YWdlIG9wZW4uCiAKQEAgLTEzNDIsNyArMTM0Miw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKLSAgICBzaGFyZWQo
KS5ub3RpZnlEb25lKCk7CisgICAgc2luZ2xldG9uKCkubm90aWZ5RG9uZSgpOwogfQogCiB2b2lk
IFRlc3RDb250cm9sbGVyOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VJbkZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lLCBXS0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUmVmIGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKQpAQCAtMTQ3NSw3ICsxNDc1LDcgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVx
dWVzdElmUG9zc2libGUoKQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS1BhZ2VSZWYgcGFnZSwgV0tTZWN1cml0eU9y
aWdpblJlZiBvcmlnaW4sIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYgcmVxdWVz
dCwgY29uc3Qgdm9pZCopCiB7Ci0gICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmRlY2lkZVBv
bGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KHBhZ2UsIG9yaWdpbiwgcmVxdWVz
dCk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmRlY2lkZVBvbGljeUZvck5vdGlm
aWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KHBhZ2UsIG9yaWdpbiwgcmVxdWVzdCk7CiB9CiAKIHZv
aWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0KFdLUGFnZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tOb3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdFJlZiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCmluZGV4IDhiNWM2ZTIyNjVjOTdmMjgwN2E5Y2ZlNTc5ZDUxNDQ3NmRlZjhjMjYuLjgy
NjVjZDU2YzQ5OTBhZmEyYjlkODQ3NWE0NzNmMGY1ODIyNzY4MWIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTQzLDcgKzQzLDcgQEAgY2xhc3MgRXZlbnRTZW5k
ZXJQcm94eTsKIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyBUZXN0UnVubmVyPwogY2xhc3MgVGVzdENv
bnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRpYyBUZXN0Q29udHJvbGxlciYgc2hhcmVkKCk7
CisgICAgc3RhdGljIFRlc3RDb250cm9sbGVyJiBzaW5nbGV0b24oKTsKIAogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCB2aWV3V2lkdGg7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdI
ZWlnaHQ7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IGJm
YjY1Y2VjMWU2ZDYzYTYxM2VjYzZhNDkyMjk4M2I2ODJmMjFjNmEuLjUyMWVlYmRmNmMwYTIyMGUz
MmMzZTQ3Y2Y0NjY0MzZlNzViYTE0MWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCkBAIC0xMjksMTMgKzEyOSwxMyBAQCBzdGF0aWMgYm9vbCBzaG91bGRMb2dI
aXN0b3J5Q2xpZW50Q2FsbGJhY2tzKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIAogdm9pZCBUZXN0
SW52b2NhdGlvbjo6aW52b2tlKCkKIHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29u
ZmlndXJlVmlld0ZvclRlc3QoKnRoaXMpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jb25maWd1cmVWaWV3Rm9yVGVzdCgqdGhpcyk7CiAKLSAgICBXS1BhZ2VTZXRBZGRzVmlzaXRl
ZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGZh
bHNlKTsKKyAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGZhbHNlKTsKIAogICAgIG1fdGV4dE91dHB1
dC5jbGVhcigpOwogCi0gICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldFNob3VsZExvZ0hp
c3RvcnlDbGllbnRDYWxsYmFja3Moc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyhtX3Bh
dGhPclVSTC5jX3N0cigpKSk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldFNo
b3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3Moc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxi
YWNrcyhtX3BhdGhPclVSTC5jX3N0cigpKSk7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNs
ZWFyIG91dCB2aXNpdGVkIGxpbmtzIGhlcmUuCiAKQEAgLTE1MSwxNiArMTUxLDE2IEBAIHZvaWQg
VGVzdEludm9jYXRpb246Omludm9rZSgpCiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRl
c3RNZXNzYWdlQm9keS5nZXQoKSwgZHVtcFBpeGVsc0tleS5nZXQoKSwgZHVtcFBpeGVsc1ZhbHVl
LmdldCgpKTsKIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1c2VXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lcktleSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVz
ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyIikpOwotICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJl
Zj4gdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3Jl
YXRlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigp
KSk7CisgICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lclZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpKTsKICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcktleS5nZXQoKSwgdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJWYWx1ZS5nZXQoKSk7CiAK
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGltZW91dEtleSA9IGFkb3B0V0soV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRpbWVvdXQiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tV
SW50NjRSZWY+IHRpbWVvdXRWYWx1ZSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUobV90aW1lb3V0
KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwg
dGltZW91dEtleS5nZXQoKSwgdGltZW91dFZhbHVlLmdldCgpKTsKIAotICAgIFdLQ29udGV4dFBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4
dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgYmVnaW5UZXN0TWVzc2FnZUJv
ZHkuZ2V0KCkpOwogCi0gICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1blVudGlsKG1fZ290
SW5pdGlhbFJlc3BvbnNlLCBUZXN0Q29udHJvbGxlcjo6c2hvcnRUaW1lb3V0KTsKKyAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UsIFRl
c3RDb250cm9sbGVyOjpzaG9ydFRpbWVvdXQpOwogICAgIGlmICghbV9nb3RJbml0aWFsUmVzcG9u
c2UpIHsKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGlu
aXRpYWwgcmVzcG9uc2UgZnJvbSB3ZWIgcHJvY2Vzc1xuIjsKICAgICAgICAgbV93ZWJQcm9jZXNz
SXNVbnJlc3BvbnNpdmUgPSB0cnVlOwpAQCAtMTY5LDkgKzE2OSw5IEBAIHZvaWQgVGVzdEludm9j
YXRpb246Omludm9rZSgpCiAgICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIGdvdG8gZW5kOwogCi0g
ICAgV0tQYWdlTG9hZFVSTChUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+
cGFnZSgpLCBtX3VybC5nZXQoKSk7CisgICAgV0tQYWdlTG9hZFVSTChUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBtX3VybC5nZXQoKSk7CiAKLSAgICBU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkucnVuVW50aWwobV9nb3RGaW5hbE1lc3NhZ2UsIFRlc3RD
b250cm9sbGVyOjpub1RpbWVvdXQpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5y
dW5VbnRpbChtX2dvdEZpbmFsTWVzc2FnZSwgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91dCk7CiAg
ICAgaWYgKG1fZXJyb3IpCiAgICAgICAgIGdvdG8gZW5kOwogCkBAIC0xODAsMTcgKzE4MCwxNyBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogZW5kOgogI2lmICFQTEFURk9STShJT1Mp
CiAgICAgaWYgKG1fZ290SW5pdGlhbFJlc3BvbnNlKQotICAgICAgICBXS0luc3BlY3RvckNsb3Nl
KFdLUGFnZUdldEluc3BlY3RvcihUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpKSk7CisgICAgICAgIFdLSW5zcGVjdG9yQ2xvc2UoV0tQYWdlR2V0SW5zcGVjdG9y
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCkpKTsKICNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCiAgICAgaWYgKG1fd2ViUHJvY2Vzc0lzVW5yZXNwb25z
aXZlKQogICAgICAgICBkdW1wV2ViUHJvY2Vzc1VucmVzcG9uc2l2ZW5lc3MoKTsKLSAgICBlbHNl
IGlmICghVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMoKSkgeworICAgIGVsc2UgaWYgKCFUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpKSB7CiAgICAgICAgIC8vIFRoZSBwcm9jZXNzIGZyb3pl
IHdoaWxlIGxvYWRpbmcgYWJvdXQ6YmxhbmssIGxldCdzIHN0YXJ0IGEgZnJlc2ggb25lLgogICAg
ICAgICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIHJlcG9ydCB0aGF0IHRoZSBwcmV2aW91cyB0ZXN0
IGZyb3plIGFmdGVyIGR1bXBpbmcgcmVzdWx0cywgYnV0IHdlIGhhdmUgbm8gd2F5IHRvIGRvIHRo
YXQuCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS50ZXJtaW5hdGVXZWJDb250ZW50
UHJvY2VzcygpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkudGVybWluYXRl
V2ViQ29udGVudFByb2Nlc3MoKTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBh
IHByb2Nlc3MsIGFzIGludm9rZSgpIHdpbGwgbmVlZCBvbmUgdG8gc2VuZCBidW5kbGUgbWVzc2Fn
ZXMgZm9yIHRoZSBuZXh0IHRlc3QuCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5y
ZWF0dGFjaFBhZ2VUb1dlYlByb2Nlc3MoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnJlYXR0YWNoUGFnZVRvV2ViUHJvY2VzcygpOwogICAgIH0KIH0KIApAQCAtMjAzLDcg
KzIwMyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBXZWJQcm9jZXNzVW5yZXNwb25zaXZl
bmVzcyhjb25zdCBjaGFyKiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgY2hhciBlcnJvck1lc3NhZ2VU
b1N0ZGVyclsxMDI0XTsKICNpZiBQTEFURk9STShDT0NPQSkKLSAgICBwaWRfdCBwaWQgPSBXS1Bh
Z2VHZXRQcm9jZXNzSWRlbnRpZmllcihUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZp
ZXcoKS0+cGFnZSgpKTsKKyAgICBwaWRfdCBwaWQgPSBXS1BhZ2VHZXRQcm9jZXNzSWRlbnRpZmll
cihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpKTsKICAg
ICBzcHJpbnRmKGVycm9yTWVzc2FnZVRvU3RkZXJyLCAiI1BST0NFU1MgVU5SRVNQT05TSVZFIC0g
JXMgKHBpZCAlbGQpXG4iLCBUZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSwgc3RhdGlj
X2Nhc3Q8bG9uZz4ocGlkKSk7CiAjZWxzZQogICAgIHNwcmludGYoZXJyb3JNZXNzYWdlVG9TdGRl
cnIsICIjUFJPQ0VTUyBVTlJFU1BPTlNJVkUgLSAlcyIsIFRlc3RDb250cm9sbGVyOjp3ZWJQcm9j
ZXNzTmFtZSgpKTsKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpmb3Jj
ZVJlcGFpbnREb25lQ2FsbGJhY2soV0tFcnJvclJlZiwgdm9pZCogY29udGV4dCkKIHsKICAgICBU
ZXN0SW52b2NhdGlvbiogdGVzdEludm9jYXRpb24gPSBzdGF0aWNfY2FzdDxUZXN0SW52b2NhdGlv
bio+KGNvbnRleHQpOwogICAgIHRlc3RJbnZvY2F0aW9uLT5tX2dvdFJlcGFpbnQgPSB0cnVlOwot
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ub3RpZnlEb25lKCk7CisgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKIH0KIAogdm9pZCBUZXN0SW52b2NhdGlv
bjo6ZHVtcFJlc3VsdHMoKQpAQCAtMjQ1LDggKzI0NSw4IEBAIHZvaWQgVGVzdEludm9jYXRpb246
OmR1bXBSZXN1bHRzKCkKICAgICBpZiAobV9kdW1wUGl4ZWxzICYmIG1fcGl4ZWxSZXN1bHQpIHsK
ICAgICAgICAgaWYgKFBsYXRmb3JtV2ViVmlldzo6d2luZG93U25hcHNob3RFbmFibGVkKCkpIHsK
ICAgICAgICAgICAgIG1fZ290UmVwYWludCA9IGZhbHNlOwotICAgICAgICAgICAgV0tQYWdlRm9y
Y2VSZXBhaW50KFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCks
IHRoaXMsIFRlc3RJbnZvY2F0aW9uOjpmb3JjZVJlcGFpbnREb25lQ2FsbGJhY2spOwotICAgICAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1blVudGlsKG1fZ290UmVwYWludCwgVGVz
dENvbnRyb2xsZXI6OnNob3J0VGltZW91dCk7CisgICAgICAgICAgICBXS1BhZ2VGb3JjZVJlcGFp
bnQoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdGhp
cywgVGVzdEludm9jYXRpb246OmZvcmNlUmVwYWludERvbmVDYWxsYmFjayk7CisgICAgICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuVW50aWwobV9nb3RSZXBhaW50LCBUZXN0
Q29udHJvbGxlcjo6c2hvcnRUaW1lb3V0KTsKICAgICAgICAgICAgIGlmICghbV9nb3RSZXBhaW50
KSB7CiAgICAgICAgICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiVGltZWQgb3V0IHdhaXRpbmcg
Zm9yIHByZS1waXhlbCBkdW1wIHJlcGFpbnRcbiI7CiAgICAgICAgICAgICAgICAgbV93ZWJQcm9j
ZXNzSXNVbnJlc3BvbnNpdmUgPSB0cnVlOwpAQCAtMzAwLDcgKzMwMCw3IEBAIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lCiAgICAgICAgIG1fZ290RmluYWxNZXNzYWdlID0gdHJ1ZTsKICAgICAgICAg
bV9lcnJvciA9IHRydWU7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIkZBSUxcbiI7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ub3RpZnlEb25lKCk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAg
ICBXS1N0cmluZ1JlZiBtZXNzYWdlQm9keVN0cmluZyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVm
PihtZXNzYWdlQm9keSk7CiAgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5n
KG1lc3NhZ2VCb2R5U3RyaW5nLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgICAgIG1fZ290SW5p
dGlhbFJlc3BvbnNlID0gdHJ1ZTsKLSAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQo
KS5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bm90aWZ5RG9uZSgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTMzMSw3
ICszMzEsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBtX2F1ZGlvUmVzdWx0
ID0gc3RhdGljX2Nhc3Q8V0tEYXRhUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgYXVkaW9SZXN1bHRLZXkuZ2V0KCkpKTsKIAogICAgICAgICBtX2dv
dEZpbmFsTWVzc2FnZSA9IHRydWU7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5u
b3RpZnlEb25lKCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlE
b25lKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM0NSw1OSArMzQ1LDU5IEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdL
U3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSIpKSB7CiAgICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwog
ICAgICAgICBXS0Jvb2xlYW5SZWYgYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUgPSBzdGF0aWNfY2Fz
dDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdLQm9vbGVhbkdldFZhbHVlKGJlZm9y
ZVVubG9hZFJldHVyblZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShXS0Jvb2xlYW5HZXRWYWx1ZShiZWZvcmVVbmxv
YWRSZXR1cm5WYWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWRkQ2hyb21lSW5wdXRG
aWVsZCIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygp
LT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5tYWluV2ViVmlldygpLT5hZGRDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkNhbGxBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAg
ICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLQ29u
dGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlJlbW92ZUNocm9tZUlucHV0RmllbGQiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hh
cmVkKCkubWFpbldlYlZpZXcoKS0+cmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cmVtb3ZlQ2hyb21lSW5w
dXRGaWVsZCgpOwogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUg
PSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsUmVtb3ZlQ2hyb21l
SW5wdXRGaWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5q
ZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDApOworICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRm9jdXNXZWJWaWV3IikpIHsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPm1ha2VXZWJWaWV3Rmly
c3RSZXNwb25kZXIoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPm1ha2VXZWJWaWV3Rmlyc3RSZXNwb25kZXIoKTsKICAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiQ2FsbEZvY3VzV2ViVmlld0NhbGxiYWNrIikpOwotICAgICAgICBXS0NvbnRl
eHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNv
bnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBXS0NvbnRleHRQb3N0TWVz
c2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRCYWNraW5n
U2NhbGVGYWN0b3IiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLRG91YmxlR2V0VHlwZUlEKCkpOwogICAgICAgICBkb3VibGUgYmFja2luZ1NjYWxlRmFj
dG9yID0gV0tEb3VibGVHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4obWVzc2FnZUJv
ZHkpKTsKLSAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250
cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tpbmdTY2FsZUZhY3Rv
cik7CisgICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tpbmdTY2FsZUZhY3RvcihUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBiYWNraW5nU2NhbGVGYWN0
b3IpOwogCiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFk
b3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxTZXRCYWNraW5nU2NhbGVG
YWN0b3JDYWxsYmFjayIpKTsKLSAgICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCAwKTsKKyAgICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAw
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayIpKSB7
CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRU
eXBlSUQoKSk7CiAgICAgICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tVSW50NjRHZXRW
YWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNoYXJlZCgpLnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZp
Y2F0aW9uSUQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2ltdWxhdGVX
ZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEFkZHNWaXNpdGVkTGlua3MiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVz
c2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVm
IGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAg
ICAgICBXS1BhZ2VTZXRBZGRzVmlzaXRlZExpbmtzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5wYWdlKCksIFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRHZW9sb2NhdGlvblBlcm1pc3Npb24iKSkgewogICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKICAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVh
blJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0
R2VvbG9jYXRpb25QZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC00NDksMjEgKzQ0OSwyMSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBX
S0RvdWJsZVJlZiBzcGVlZFdLID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlvbmFy
eUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBzcGVlZEtleVdLLmdldCgpKSk7
CiAgICAgICAgIGRvdWJsZSBzcGVlZCA9IFdLRG91YmxlR2V0VmFsdWUoc3BlZWRXSyk7CiAKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
KGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVk
ZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hl
YWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKKyAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0dWRlLCBs
b25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgcHJvdmlkZXNB
bHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcsIGhlYWRp
bmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAg
V0tTdHJpbmdSZWYgZXJyb3JNZXNzYWdlID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldE1vY2tHZW9sb2Nh
dGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFVzZXJNZWRp
YVBlcm1pc3Npb24iKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIGVuYWJsZWRX
SyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0VXNlck1lZGlhUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRW
YWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dFVzZXJNZWRpYVBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ3OSw3ICs0NzksNyBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogICAgICAgICBXS0Jvb2xlYW5SZWYgcGVybWlzc2l2ZVdLID0gc3RhdGljX2Nhc3Q8
V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlv
bmFyeSwgcGVybWlzc2l2ZUtleVdLLmdldCgpKSk7CiAgICAgICAgIGJvb2wgcGVybWlzc2l2ZSA9
IFdLQm9vbGVhbkdldFZhbHVlKHBlcm1pc3NpdmVXSyk7CiAKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0Q3VzdG9tUG9saWN5RGVs
ZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTQ5MSwxNCArNDkxLDE0IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdLQm9v
bGVhblJlZiBoaWRkZW5XSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGlzSW5pdGlhbEtleVdLLmdldCgp
KSk7CiAgICAgICAgIGJvb2wgaGlkZGVuID0gV0tCb29sZWFuR2V0VmFsdWUoaGlkZGVuV0spOwog
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRIaWRkZW4oaGlkZGVuKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhpZGRlbihoaWRkZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJQcm9jZXNzV29ya1F1ZXVlIikpIHsKLSAgICAgICAgaWYgKFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgp
KSB7CisgICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFu
YWdlcigpLnByb2Nlc3NXb3JrUXVldWUoKSkgewogICAgICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiV29ya1F1ZXVlUHJvY2Vzc2VkQ2FsbGJhY2siKSk7Ci0gICAgICAgICAgICBXS0NvbnRl
eHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNv
bnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICAgICAgV0tDb250ZXh0UG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtNTA2LDE0ICs1MDYsMTQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlQmFj
a05hdmlnYXRpb24iKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwogICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBX
S1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVl
QmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHN0ZXBDb3VudCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlRm9yd2FyZE5hdmlnYXRpb24iKSkgewogICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkp
OwogICAgICAgICB1aW50NjRfdCBzdGVwQ291bnQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19j
YXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RlcENv
dW50KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5xdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAg
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdGFyZ2V0S2V5KEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0YXJnZXQiKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHRh
cmdldFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB0YXJnZXRLZXkuZ2V0KCkpKTsKIAotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZCh0b1dURlN0
cmluZyh1cmxXSyksIHRvV1RGU3RyaW5nKHRhcmdldFdLKSk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5n
KHVybFdLKSwgdG9XVEZTdHJpbmcodGFyZ2V0V0spKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNTQ0LDU0ICs1NDQsNTQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMS2V5KEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ1bnJlYWNoYWJsZVVSTCIpKTsKICAgICAgICAgV0tT
dHJpbmdSZWYgdW5yZWFjaGFibGVVUkxXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihXS0Rp
Y3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdW5yZWFjaGFibGVVUkxL
ZXkuZ2V0KCkpKTsKIAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVl
TWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XVEZTdHJpbmcoY29udGVudFdLKSwgYmFz
ZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVSTFdLKSA6IFN0cmluZygpLCB1bnJlYWNoYWJsZVVS
TFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFibGVVUkxXSykgOiBTdHJpbmcoKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2Fk
SFRNTFN0cmluZyh0b1dURlN0cmluZyhjb250ZW50V0spLCBiYXNlVVJMV0sgPyB0b1dURlN0cmlu
ZyhiYXNlVVJMV0spIDogU3RyaW5nKCksIHVucmVhY2hhYmxlVVJMV0sgPyB0b1dURlN0cmluZyh1
bnJlYWNoYWJsZVVSTFdLKSA6IFN0cmluZygpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVS
ZWxvYWQiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVlTWFu
YWdlcigpLnF1ZXVlUmVsb2FkKCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVSZWxvYWQoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
UXVldWVMb2FkaW5nU2NyaXB0IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgc2Ny
aXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRpbmdTY3Jp
cHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNj
cmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZU5vbkxvYWRpbmdTY3JpcHQiKSkgewog
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29y
a1F1ZXVlTWFuYWdlcigpLnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIo
KS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSIpKSB7CiAgICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwogICAgICAgICBXS0Jvb2xlYW5SZWYgdmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+
KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldEhhbmRs
ZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKKyAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEhhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMoV0tCb29sZWFuR2V0VmFsdWUodmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLU3Ry
aW5nUmVmIHVzZXJuYW1lID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldEF1dGhlbnRpY2F0aW9uVXNlcm5h
bWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUodG9XVEZTdHJpbmcodXNlcm5hbWUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QXV0aGVudGljYXRpb25QYXNzd29yZCIpKSB7CiAgICAg
ICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQo
KSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHBhc3N3b3JkID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdS
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldEF1
dGhlbnRpY2F0aW9uUGFzc3dvcmQodG9XVEZTdHJpbmcocGFzc3dvcmQpKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQodG9XVEZT
dHJpbmcocGFzc3dvcmQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QmxvY2tBbGxQbHVnaW5z
IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xl
YW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiBzaG91bGRCbG9jayA9IHN0YXRp
Y19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZEJs
b2NrKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRCbG9ja0FsbFBs
dWdpbnMoV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNjAzLDEyICs2MDMsMTIgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldFdpbmRv
d0lzS2V5IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiBpc0tleVZhbHVlID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShXS0Jvb2xlYW5H
ZXRWYWx1ZShpc0tleVZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5tYWluV2ViVmlldygpLT5zZXRXaW5kb3dJc0tleShXS0Jvb2xlYW5HZXRWYWx1ZShpc0tleVZh
bHVlKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSXNXb3JrUXVldWVFbXB0eSIpKSB7Ci0gICAg
ICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5h
Z2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpOworICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHko
KTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiByZXN1bHQoQWRvcHRXSywgV0tCb29s
ZWFuQ3JlYXRlKGlzRW1wdHkpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAppbmRleCAyNTVkOTM5MTdh
YWY2M2YyZTA2ZjA3Yjc1NjdmMGI5ZWQ5NmNhY2I5Li4wMzIzYzIzZWEzMTMzZDA3YTNjYTQ2NTk5
MWFkZjZlMDE0OWQ3NWQ0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dvcmtR
dWV1ZU1hbmFnZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFu
YWdlci5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdUUiB7CiAKIHN0YXRpYyBpbmxp
bmUgV0tQYWdlUmVmIG1haW5QYWdlKCkKIHsKLSAgICByZXR1cm4gVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKTsKKyAgICByZXR1cm4gVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKTsKIH0KIAogc3RhdGljIGlubGluZSBi
b29sIGdvVG9JdGVtQXRJbmRleChpbnQgaW5kZXgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAppbmRleCAxOTQwMmNkMzA1MmM5
NWJkOTdiYTE2ODA4YzMwOTI0YmYzN2I5OTUyLi45ZTA1NDY4ODgxYTk0MzY2MGEzZTQ0YzUxMjA3
OTgwNjYzMzRiOGM4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rl
c3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8v
VGVzdEludm9jYXRpb25DYWlyby5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lkIFRlc3RJbnZv
Y2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChXS0ltYWdlUmVmIHdrSW1h
Z2UsIFdLQXJyYQogewogI2lmIFBMQVRGT1JNKEVGTCkgfHwgUExBVEZPUk0oR1RLKQogICAgIFVO
VVNFRF9QQVJBTSh3a0ltYWdlKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBXS0lt
YWdlQ3JlYXRlQ2Fpcm9TdXJmYWNlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmll
dygpLT53aW5kb3dTbmFwc2hvdEltYWdlKCkuZ2V0KCkpOworICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IFdLSW1hZ2VDcmVhdGVDYWlyb1N1cmZhY2UoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPndpbmRvd1NuYXBzaG90SW1hZ2UoKS5nZXQoKSk7CiAjZWxz
ZQogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IFdLSW1hZ2VDcmVhdGVDYWlyb1N1cmZh
Y2Uod2tJbWFnZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y2cvVGVzdEludm9jYXRpb25DRy5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwCmluZGV4IDcxMTFhOGUxZTUxZDVkZWQ0M2VkNzQxNGUwNWU3MjVhYWY1
ZDJiOTkuLmVjODM5MmFmNzU1ODY5MDgxMzU3YTRiNGMzNzE3MmJhNmRhZTdlYzMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKKysrIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcApAQCAtMTU2LDcg
KzE1Niw3IEBAIHN0YXRpYyB2b2lkIHBhaW50UmVwYWludFJlY3RPdmVybGF5KENHQ29udGV4dFJl
ZiBjb250ZXh0LCBXS0ltYWdlUmVmIGltYWdlLCBXS0FyCiAKIHZvaWQgVGVzdEludm9jYXRpb246
OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgaW1hZ2UsIFdLQXJy
YXlSZWYgcmVwYWludFJlY3RzKQogewotICAgIFBsYXRmb3JtV2ViVmlldyogd2ViVmlldyA9IFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpOworICAgIFBsYXRmb3JtV2ViVmll
dyogd2ViVmlldyA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpOwog
ICAgIFdLUmV0YWluUHRyPFdLSW1hZ2VSZWY+IHdpbmRvd1NuYXBzaG90ID0gd2ViVmlldy0+d2lu
ZG93U25hcHNob3RJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY29udGV4
dDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5u
ZXJEcmFnZ2luZ0luZm8ubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0
UnVubmVyRHJhZ2dpbmdJbmZvLm1tCmluZGV4IGFmMzFkMzNjNzU0ODhkZTM1MjM2NDZkNGI0NGIw
ZjRhODdmYjRiZjkuLmQzNTZkODNjNWU1NjE1NTcxMjkzOWMwMTM5NDJmZGE1MzcwYzVmMjcgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJEcmFn
Z2luZ0luZm8ubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1
bm5lckRyYWdnaW5nSW5mby5tbQpAQCAtNTgsNyArNTgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RS
OwogCiAtIChOU1dpbmRvdyAqKWRyYWdnaW5nRGVzdGluYXRpb25XaW5kb3cgCiB7Ci0gICAgcmV0
dXJuIFtUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3
KCkgd2luZG93XTsKKyAgICByZXR1cm4gW1Rlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSB3aW5kb3ddOwogfQogCiAtIChOU0RyYWdPcGVyYXRp
b24pZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrIApAQCAtNjksMTMgKzY5LDEzIEBAIHVzaW5n
IG5hbWVzcGFjZSBXVFI7CiAKIC0gKE5TUG9pbnQpZHJhZ2dpbmdMb2NhdGlvbgogewotICAgIFdL
UG9pbnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuZXZlbnRTZW5kZXJQcm94
eSgpLT5wb3NpdGlvbigpOworICAgIFdLUG9pbnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuZXZlbnRTZW5kZXJQcm94eSgpLT5wb3NpdGlvbigpOwogICAgIHJldHVybiBO
U01ha2VQb2ludChsb2NhdGlvbi54LCBsb2NhdGlvbi55KTsKIH0KIAogLSAoTlNQb2ludClkcmFn
Z2VkSW1hZ2VMb2NhdGlvbiAKIHsKLSAgICBXS1BvaW50IGxvY2F0aW9uID0gVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9zaXRpb24oKTsKKyAgICBXS1BvaW50
IGxvY2F0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmV2ZW50U2VuZGVyUHJveHko
KS0+cG9zaXRpb24oKTsKICAgICByZXR1cm4gTlNNYWtlUG9pbnQobG9jYXRpb24ueCArIF9vZmZz
ZXQud2lkdGgsIGxvY2F0aW9uLnkgKyBfb2Zmc2V0LmhlaWdodCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJFdmVudC5tbSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJFdmVudC5tbQppbmRleCAy
NDIxMmM3YWQwOGQ0Zjk5NGQ5OWQ1YmJlZjQzNjY1NWViODVjODQ4Li45ZGVhMmRmODE4ODk2ZmJh
ODcxMTBlZWQ1YThkOTQyNTdjZWQyOTM3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9XZWJLaXRUZXN0UnVubmVyRXZlbnQubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tCkBAIC0zNiw4ICszNiw4IEBAIHVzaW5n
IG5hbWVzcGFjZSBXVFI7CiAKICsgKE5TUG9pbnQpbW91c2VMb2NhdGlvbgogewotICAgIFdLUG9p
bnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuZXZlbnRTZW5kZXJQcm94eSgp
LT5wb3NpdGlvbigpOwotICAgIHJldHVybiBbVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydEJhc2VUb1NjcmVlbjpOU01ha2VQb2lu
dChsb2NhdGlvbi54LCBsb2NhdGlvbi55KV07CisgICAgV0tQb2ludCBsb2NhdGlvbiA9IFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5ldmVudFNlbmRlclByb3h5KCktPnBvc2l0aW9uKCk7Cisg
ICAgcmV0dXJuIFtUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxh
dGZvcm1XaW5kb3coKSBjb252ZXJ0QmFzZVRvU2NyZWVuOk5TTWFrZVBvaW50KGxvY2F0aW9uLngs
IGxvY2F0aW9uLnkpXTsKIH0KIAogQGVuZAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245725</attachid>
            <date>2015-01-30 10:19:01 -0800</date>
            <delta_ts>2015-01-30 12:47:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141088-20150130101907.patch</filename>
            <type>text/plain</type>
            <size>553096</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzZmZmFlYTYxNThkYmE4ZTFiMGZmMDBiYzgxYTUyMDk2ZmFjZjUyLi5lMjk0ZGI2MzNhMWRlNDY3
NTgxZDEzMDJlNWYxOWEwNTQ0MTVkNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5n
bGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5j
dGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2VzIGFzIHBl
ciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
cmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLm1tOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNp
bmdsZXRvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcDoK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6flJlbW90ZUlu
c3BlY3RvckRlYnVnZ2FibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JE
ZWJ1Z2dhYmxlOjppbml0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6dXBkYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6c2V0UmVtb3RlRGVidWdnaW5nQWxsb3dlZCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnBhdXNlV2FpdGluZ0ZvckF1dG9tYXRpY0luc3Bl
Y3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjp1
bnBhdXNlRm9ySW5pdGlhbGl6ZWRJbnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZXR1cCk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQpOgorCiAyMDE1LTAxLTI5ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTc5
MzU3IGFuZCByMTc5MzU4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE2NmE2NWEzYThkNzJkOTZlZTkyMTIwNjRm
MzRlMGQ3MWJmOTdlNzUuLmY4NjNkMjQzNjMzMDZhYzRjOWYzMzY2YTdiNDgyYTc2YWE0NTU5OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNSBAQAogMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVy
IGZ1bmN0aW9ucyB0byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkg
c3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAg
ICAgICBjbGFzc2VzIGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKzIw
MTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBPcHRp
bWl6ZSBNZW1vcnlDYWNoZTo6Z2V0U2Vzc2lvbk1hcCgpIGEgYml0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwNjkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMWUy
NjI2ZmY1N2QwODA5NTNmYjQwZWNjMjcwN2Q4NWRjMzdlN2ZlLi4zMjFkMTA5OTAzNTZmNjA2MmNm
YTNhOWVmZDRjYWNmNzZhOGE4OGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAx
LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNo
YXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0
b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24o
KSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSByZWNlbnQgY29kaW5n
IHN0eWxlIGNoYW5nZS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5j
cHA6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlUHJvdmlkZXIuaDoKKwogMjAxNS0wMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBCdWlsZCBmaXggYWZ0ZXIgcjE3OTM2
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCAxYWU1NDM0MDE4OTMyMGE4OGFhODlmNWJhMThjNDVmMjIw
NmIxMTA3Li44NmM5M2I1OTY2NzJhMmQxNmQ1MDM3ODlkMmNiMDg2MDQwOWMwODc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0
YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAg
ICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1
LTAxLTI5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
bW9yZSBNb3VudGFpbiBMaW9uIGNvZGUgZnJvbSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBi
NDZjOTI4M2Q0OWNjZDU0MWFhODE0ODUyNTZkNjgzNDBmYTE3OTk0Li43YzczOTg1OTgyMWMyMDAw
Y2Q2NDRiYzc2YTlmNjRmOGMwYWI4NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkg
Zm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRv
IHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAgICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJl
Y2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1LTAxLTI5ICBCcmVudCBGdWxnaGFtICA8
YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEJ1aWxkIGZpeCBhZnRlciByMTc5
MzY4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDhiYzg0YzI0ODM0ZmM0MzUwODE5ZTBiYTlmZDQyNGFlMzUwZTAz
MWEuLjUxNTA3ODgyMjY3NzEyZDIyNGM5YjA0NWJmZTNkM2M5MmViYjgwN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0
byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJl
ciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2Vz
IGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKIDIwMTUtMDEtMjkgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFJlc2l6ZSB0aGUgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIGFnYWluIGFmdGVyIGxlYXZpbmcgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAwZGZmYzI4NmYw
M2ZiZDJiNzE5NzNiMzEwMzAwNTI3ZjI0ZmQzNTRlLi4yY2Q4NTE5N2IzZjQyODgyMTg0YjRmOGJh
ZmEwYTg4ZGUyOTc0NmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1
Y3QgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm87CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBSZW1vdGVJbnNwZWN0b3IgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdGFydERpc2FibGVkKCk7
Ci0gICAgc3RhdGljIFJlbW90ZUluc3BlY3RvciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFJlbW90
ZUluc3BlY3RvciYgc2luZ2xldG9uKCk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFJlbW90ZUluc3BlY3Rvcj47CiAKICAgICB2b2lkIHJlZ2lzdGVyRGVidWdnYWJsZShSZW1vdGVJ
bnNwZWN0b3JEZWJ1Z2dhYmxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0KaW5kZXggYzhhMzllNjQxZjFh
NDUwNGNhMjU0YTQ0NDgzOWM2YzQ3NGUxZTcwMy4uNDZkNTA0NGM1ZTAyMjRmOTJlNTYyMjQ4Nzg3
NDBmYWY0N2EwZjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5tbQpAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c3RhcnREaXNhYmxlZCgpCiAgICAgUmVtb3RlSW5zcGVjdG9yOjpz
dGFydEVuYWJsZWQgPSBmYWxzZTsKIH0KIAotUmVtb3RlSW5zcGVjdG9yJiBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpCitSZW1vdGVJbnNwZWN0b3ImIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yPiBzaGFyZWQ7
CiAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogICAg
IH0pOwogCiAgICAgbm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKFdJUlNlcnZpY2VBdmFpbGFibGVO
b3RpZmljYXRpb24sICZtX25vdGlmeVRva2VuLCBtX3hwY1F1ZXVlLCBeKGludCkgewotICAgICAg
ICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCk7
CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0dXBYUENDb25uZWN0aW9u
SWZOZWVkZWQoKTsKICAgICB9KTsKIAogICAgIG5vdGlmeV9wb3N0KFdJUlNlcnZpY2VBdmFpbGFi
aWxpdHlDaGVja05vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCmluZGV4IGRmZWUwZWJiYzkyOWNiYTQ2ZmMzNTZlZWVkN2VjZjFhNzNiMzg5OTguLmFj
ODNhMThlOTU5OTViMWMzNTg2ZmE3ODYxMDcxZmNjNGU1ZWI4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZTo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSgpCiAKIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGU6On5SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKCkKIHsKLSAgICBSZW1v
dGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVucmVnaXN0ZXJEZWJ1Z2dhYmxlKHRoaXMpOworICAgIFJl
bW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5pdCgpCiB7Ci0gICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaGFyZWQoKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9CiAKIHZv
aWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6dXBkYXRlKCkKIHsKLSAgICBSZW1vdGVJbnNw
ZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS51cGRhdGVEZWJ1Z2dhYmxlKHRoaXMpOwogfQogCiB2b2lkIFJlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNldFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxv
d2VkKQpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNl
dFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogICAgIG1fYWxsb3dlZCA9IGFs
bG93ZWQ7CiAKICAgICBpZiAobV9hbGxvd2VkICYmIGF1dG9tYXRpY0luc3BlY3Rpb25BbGxvd2Vk
KCkpCi0gICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkudXBkYXRlRGVidWdnYWJsZUF1
dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6
c2luZ2xldG9uKCkudXBkYXRlRGVidWdnYWJsZUF1dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhp
cyk7CiAgICAgZWxzZQotICAgICAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURl
YnVnZ2FibGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudXBk
YXRlRGVidWdnYWJsZSh0aGlzKTsKIH0KIAogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm8g
UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5mbygpIGNvbnN0CkBAIC04NywxMyArODcsMTMg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjpwYXVzZVdhaXRpbmdGb3JBdXRvbWF0
aWNJbnNwZWN0aW9uKCkKICAgICBBU1NFUlQoYXV0b21hdGljSW5zcGVjdGlvbkFsbG93ZWQoKSk7
CiAKICAgICBFdmVudExvb3AgbG9vcDsKLSAgICB3aGlsZSAoUmVtb3RlSW5zcGVjdG9yOjpzaGFy
ZWQoKS53YWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbihpZGVudGlmaWVyKCkpICYmICFsb29w
LmVuZGVkKCkpCisgICAgd2hpbGUgKFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkud2FpdGlu
Z0ZvckF1dG9tYXRpY0luc3BlY3Rpb24oaWRlbnRpZmllcigpKSAmJiAhbG9vcC5lbmRlZCgpKQog
ICAgICAgICBsb29wLmN5Y2xlKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZTo6dW5wYXVzZUZvckluaXRpYWxpemVkSW5zcGVjdG9yKCkKIHsKLSAgICBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpLnNldHVwQ29tcGxldGVkKGlkZW50aWZpZXIoKSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZXR1cENvbXBsZXRlZChpZGVudGlmaWVyKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1t
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KaW5kZXggYTk3ZGNiYmJhZDkwODMyNzk1Y2Q0OWJkNTU0
ZDRhNjUwMzg0MTVjZS4uOGU3OWE1NmIyOWQyZDNhM2I4Y2YzMDczMjY3YzYxODI2MDQ5MDFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3Rl
SW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24u
bW0KQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uOjpzZXR1cChib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbikKICAgICAgICAgewogICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9kZWJ1Z2dhYmxlTXV0
ZXgpOwogICAgICAgICAgICAgaWYgKCFtX2RlYnVnZ2FibGUgfHwgIW1fZGVidWdnYWJsZS0+cmVt
b3RlRGVidWdnaW5nQWxsb3dlZCgpIHx8IG1fZGVidWdnYWJsZS0+aGFzTG9jYWxEZWJ1Z2dlcigp
KSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zZXR1cEZhaWxl
ZChpZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xl
dG9uKCkuc2V0dXBGYWlsZWQoaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICBtX2RlYnVn
Z2FibGUgPSBudWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBt
X2RlYnVnZ2FibGUtPmNvbm5lY3QodGhpcywgaXNBdXRvbWF0aWNJbnNwZWN0aW9uKTsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZChOU1N0cmluZyAqbWVzc2FnZQogCiBib29sIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc2VuZE1lc3Nh
Z2VUb1JlbW90ZUZyb250ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoaWRlbnRpZmll
cigpLCBtZXNzYWdlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKaW5kZXggYzNlMDg2ZjUzNWMy
MjllYTllNTJjZTlhNTg4YmQxNmEzZjI0YzIxMi4uNjhjN2QwNDg4Nzc2NTE1NTJjZmVlNzVkNzcy
MDI1MzZlNmQyZDFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZE1hbmFnZXIuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBOYXZpZ2F0b3JHYW1l
cGFkKiBuYXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKICAg
ICByZXR1cm4gTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOwogfQogCi1HYW1lcGFk
TWFuYWdlciYgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCitHYW1lcGFkTWFuYWdlciYgR2FtZXBh
ZE1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVw
YWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwogICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwpAQCAt
NjEsNyArNjEsNyBAQCBHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIoKQogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkKQogewogICAgIC8vIE5vdGlmeSBibGluZCBOYXZpZ2F0b3JzIGFuZCBXaW5k
b3dzIGFib3V0IGFsbCBnYW1lcGFkcyBleGNlcHQgZm9yIHRoaXMgb25lLgotICAgIGZvciAoYXV0
byogZ2FtZXBhZCA6IEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkucGxhdGZvcm1HYW1lcGFkcygp
KSB7CisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKICAgICAgICAgaWYgKCFnYW1lcGFkIHx8IGdhbWVwYWQg
PT0gJnBsYXRmb3JtR2FtZXBhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTksNyAr
MTE5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpCiAgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5pc0VtcHR5KCkgJiYgbV9nYW1l
cGFkQmxpbmRET01XaW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVw
YWRzKCkpCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKS5wbGF0Zm9ybUdhbWVwYWRzKCkpCiAgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2Ft
ZXBhZCwgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3Mp
OwogCiAgICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CkBAIC0yMTgsNyArMjE4
LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWF5YmVTdGFydE1vbml0b3JpbmdHYW1lcGFkcygp
CiAgICAgaWYgKCFtX25hdmlnYXRvcnMuaXNFbXB0eSgpIHx8ICFtX2RvbVdpbmRvd3MuaXNFbXB0
eSgpKSB7CiAgICAgICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZE1hbmFnZXIgaGFzICVpIE5hdmln
YXRvckdhbWVwYWRzIGFuZCAlaSBET01XaW5kb3dzIHJlZ2lzdGVyZWQsIGlzIHN0YXJ0aW5nIGdh
bWVwYWQgbW9uaXRvcmluZyIsIG1fbmF2aWdhdG9ycy5zaXplKCksIG1fZG9tV2luZG93cy5zaXpl
KCkpOwogICAgICAgICBtX2lzTW9uaXRvcmluZ0dhbWVwYWRzID0gdHJ1ZTsKLSAgICAgICAgR2Ft
ZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5zdGFydE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKKyAg
ICAgICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zdGFydE1vbml0b3JpbmdHYW1lcGFk
cyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdhbWVwYWRNYW5h
Z2VyOjptYXliZVN0b3BNb25pdG9yaW5nR2FtZXBhZHMoKQogICAgIGlmIChtX25hdmlnYXRvcnMu
aXNFbXB0eSgpICYmIG1fZG9tV2luZG93cy5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HKEdhbWVw
YWQsICJHYW1lcGFkTWFuYWdlciBoYXMgbm8gTmF2aWdhdG9yR2FtZXBhZHMgb3IgRE9NV2luZG93
cyByZWdpc3RlcmVkLCBpcyBzdG9wcGluZyBnYW1lcGFkIG1vbml0b3JpbmciKTsKICAgICAgICAg
bV9pc01vbml0b3JpbmdHYW1lcGFkcyA9IGZhbHNlOwotICAgICAgICBHYW1lcGFkUHJvdmlkZXI6
OnNoYXJlZCgpLnN0b3BNb25pdG9yaW5nR2FtZXBhZHModGhpcyk7CisgICAgICAgIEdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkuc3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmgKaW5kZXggMTA0NjBiODVmYzViZjcxZGQ3MGQwODA2ZThlZDczMzBjMDI0YzcxZC4uMTExNDhl
MTI0ODM2MzkxYjA1NTc2Mjk3ZWY0M2ZkNzhiOTNmYmM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgR2FtZXBhZE1hbmFnZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHYW1lcGFkTWFuYWdlcik7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPEdhbWVwYWRNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgR2FtZXBh
ZE1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBHYW1lcGFkTWFuYWdlciYgc2luZ2xldG9u
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3Jt
R2FtZXBhZCYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVw
YWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKaW5k
ZXggNWQ3YjUzOTYyMmFhOTQwODhiMWYxMTYwNzdkMmI3N2VkZTkxMTdlOC4uMThmMWI0ZTYzNWY2
OGIxN2Y3YjAyNzljNDJlNThjMmUxYzRiYjljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5hdmlnYXRvckdhbWVwYWQ6Ok5hdmlnYXRvckdhbWVwYWQo
KQogICAgIDogbV9uYXZpZ2F0aW9uU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKQogewotICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3Rlck5hdmln
YXRvcih0aGlzKTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJOYXZp
Z2F0b3IodGhpcyk7CiB9CiAKIE5hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0b3JHYW1lcGFkKCkK
IHsKLSAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0aGlz
KTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0
aGlzKTsKIH0KIAogY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUo
KQpAQCAtOTEsNyArOTEsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdh
dG9yR2FtZXBhZDo6Z2FtZXBhZHMoKQogICAgIGlmIChtX2dhbWVwYWRzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fZ2FtZXBhZHM7CiAKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1l
cGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRm
b3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBh
ZHMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbGF0Zm9ybUdhbWVwYWRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghcGxhdGZvcm1HYW1lcGFkc1tpXSkgewpAQCAtMTA4
LDcgKzEwOCw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1l
cGFkOjpnYW1lcGFkcygpCiAKIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCkKIHsKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKTsK
KyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBhZHMoKTsKICAgICBtX2dh
bWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgewpAQCAtMTI4LDcg
KzEyOCw3IEBAIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3RlZChQbGF0Zm9y
bUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICB9CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IHBsYXRmb3JtR2FtZXBhZC5pbmRleCgpOwotICAgIEFTU0VSVChHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKVtpbmRleF0gPT0gJnBsYXRmb3JtR2FtZXBhZCk7Cisg
ICAgQVNTRVJUKEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucGxhdGZvcm1HYW1lcGFkcygp
W2luZGV4XSA9PSAmcGxhdGZvcm1HYW1lcGFkKTsKIAogICAgIC8vIFRoZSBuZXcgaW5kZXggc2hv
dWxkIGFscmVhZHkgZml0IGluIHRoZSBleGlzdGluZyBhcnJheSwgb3Igc2hvdWxkIGJlIGV4YWN0
bHkgb25lIHBhc3QtdGhlLWVuZCBvZiB0aGUgZXhpc3RpbmcgYXJyYXkuCiAgICAgQVNTRVJUKGlu
ZGV4IDw9IG1fZ2FtZXBhZHMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IGI5YzY1NGMyZDNi
ZGMxYTJhN2U4NWNjYjU4MjYzNWYzZmM2MTFiZTQuLjMxZmMxOThiMTcxNmMxM2NhODkyNmRmOWVm
NDI1MDIxNThjM2M0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB2b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OmdldFNvdXJjZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrPiBjYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdD4gcmVxdWVzdCA9IE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBpZiAoIU1lZGlhU3RyZWFtQ2VudGVyOjpzaGFy
ZWQoKS5nZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVhc2UoKSkpCisgICAg
aWYgKCFNZWRpYVN0cmVhbUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFSZXF1ZXN0LmNwcAppbmRleCBjYmQ2ZmJhNzk5ZjcwZjc2NWM1MmY1NzdhZjVmZTc2
ZjNhYzZjZTQyLi5jNTMyZDc4ZmQ0YjcxM2NhM2E5NjQxYWI3M2U4Mzg2ZTg4ZGU3MGQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
UmVxdWVzdC5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnN0
YXJ0KCkKIHsKICAgICAvLyAxIC0gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBz
dXBwb3J0aW5nIHRoZSBhdWRpbyBhbmQgdmlkZW8gY29uc3RyYWludHMuIFdlIGRvbid0IHdhbnQg
dG8gYXNrIGZvcgogICAgIC8vIHVzZXIgcGVybWlzc2lvbiBpZiB0aGUgY29uc3RyYWludHMgY2Fu
IG5vdCBiZSBzdXBvcnRlZC4KLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6c2hhcmVkKCkudmFsaWRh
dGVSZXF1ZXN0Q29uc3RyYWludHModGhpcywgbV9hdWRpb0NvbnN0cmFpbnRzLCBtX3ZpZGVvQ29u
c3RyYWludHMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24oKS52YWxpZGF0ZVJl
cXVlc3RDb25zdHJhaW50cyh0aGlzLCBtX2F1ZGlvQ29uc3RyYWludHMsIG1fdmlkZW9Db25zdHJh
aW50cyk7CiB9CiAKICAgICAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQoKQogICAgIFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXNdIHsKICAgICAgICAgLy8gMyAtIHRoZSB1c2VyIGdyYW50ZWQgYWNjZXNzLCBhc2sgcGxhdGZv
cm0gdG8gY3JlYXRlIHRoZSBtZWRpYSBzdHJlYW0gZGVzY3JpcHRvcnMuCi0gICAgICAgIE1lZGlh
U3RyZWFtQ2VudGVyOjpzaGFyZWQoKS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdl
dCgpLCBwcm90ZWN0ZWRUaGlzLT5tX2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1f
dmlkZW9Db25zdHJhaW50cyk7CisgICAgICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24o
KS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdldCgpLCBwcm90ZWN0ZWRUaGlzLT5t
X2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1fdmlkZW9Db25zdHJhaW50cyk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggOTZlNTdmMzkwNzMzZDM0NTFmZmEy
ODRhMGRjM2Q4NjkyMGQ1M2E0MS4uNjZhNTViMjgxMThhZmFiNjYxZDcxODg2YWIwMjU4NDQwODVl
ZDhkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTExNjMsNyArMTE2Myw3IEBAIF9fWk43V2Vi
Q29yZTMwaG9zdE5hbWVOZWVkc0RlY29kaW5nV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UK
IF9fWk43V2ViQ29yZTMwaG9zdE5hbWVOZWVkc0VuY29kaW5nV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTMwb3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzRVJL
TjNXVEY2VmVjdG9ySU5TMF82U3RyaW5nRUxtMEVOUzBfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9f
Wk43V2ViQ29yZTMxQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTVlbXB0eUV2Ci1fX1pO
N1dlYkNvcmUzMUNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU2c2hhcmVkRXYKK19fWk43
V2ViQ29yZTMxQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTlzaW5nbGV0b25FdgogX19a
TjdXZWJDb3JlMzFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyRVJLTlNfM1VSTEVTMl8K
IF9fWk43V2ViQ29yZTMzc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMzZsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJl
Y3RFZlJLTlNfOUZsb2F0UmVjdEUKQEAgLTE2MTMsNyArMTYxMyw3IEBAIF9fWk43V2ViQ29yZTlQ
YWdlQ2FjaGUxMHNldE1heFNpemVFagogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTE0cHJ1bmVUb1Np
emVOb3dFak5TXzEzUHJ1bmluZ1JlYXNvbkUKIF9fWk43V2ViQ29yZTlQYWdlQ2FjaGUzNG1hcmtQ
YWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGNFdgogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZy
ZW1vdmVFUk5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2
CitfX1pON1dlYkNvcmU5UGFnZUNhY2hlOXNpbmdsZXRvbkV2CiBfX1pON1dlYkNvcmU5UGFnZUdy
b3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIxMW1v
dXNlRXhpdGVkRXYKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIxMm1vdXNlRW50ZXJlZEV2CkBAIC0z
MTM3LDggKzMxMzcsOCBAQCBfX1pOSzdXZWJDb3JlN0VsZW1lbnQyNWNvbnRhaW5zRnVsbFNjcmVl
bkVsZW1lbnRFdgogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiBfX1pON1dlYkNvcmUxNUdhbWVwYWRQ
cm92aWRlcjE3c2V0U2hhcmVkUHJvdmlkZXJFUlMwXwotX19aTjdXZWJDb3JlMTVHYW1lcGFkUHJv
dmlkZXI2c2hhcmVkRXYKLV9fWk43V2ViQ29yZTE4SElER2FtZXBhZFByb3ZpZGVyNnNoYXJlZEV2
CitfX1pON1dlYkNvcmUxNUdhbWVwYWRQcm92aWRlcjlzaW5nbGV0b25FdgorX19aTjdXZWJDb3Jl
MThISURHYW1lcGFkUHJvdmlkZXI5c2luZ2xldG9uRXYKICNlbmRpZgogCiAjaWYgRU5BQkxFKEdF
T0xPQ0FUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKaW5kZXggNzY5ZDcyZGUwODhhMTc0ZWNjMDNj
OGY3M2QxMjY0ZGYzZDRhMTQyYS4uNjRkNTZkOTcwYTc0ZTVkYzFhZWFhMzg1OTViNTZiZDFlNjM0
NmZlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Ny
eXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCkBAIC03OSw3ICs3OSw3IEBAIGJvb2wgSlNDcnlw
dG9BbGdvcml0aG1EaWN0aW9uYXJ5OjpnZXRBbGdvcml0aG1JZGVudGlmaWVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIUNy
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5nZXRJZGVudGlmaWVyRm9yTmFtZShhbGdv
cml0aG1OYW1lLCBhbGdvcml0aG1JZGVudGlmaWVyKSkgeworICAgIGlmICghQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmdldElkZW50aWZpZXJGb3JOYW1lKGFsZ29yaXRobU5h
bWUsIGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRp
b25KV0suY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLLmNwcAppbmRleCAwMmZhMWMwNWNjY2ViZTc2NmZjY2Q5NjQ3Yzk3MTRiY2FlOGFi
NDczLi42NTliMzk3ZDExM2FhMzQ5MWFhNTVhMTM2MjIwMjk4MzNmZjYxMDgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0su
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXph
dGlvbkpXSy5jcHAKQEAgLTE3Myw0NiArMTczLDQ2IEBAIGJvb2wgSlNDcnlwdG9LZXlTZXJpYWxp
emF0aW9uSldLOjpyZWNvbmNpbGVBbGdvcml0aG0oc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gYWxnb3JpdGhtOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPiBwYXJhbWV0ZXJzOwogICAg
IGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkhTMjU2IikgewotICAgICAgICBhbGdvcml0aG0g
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRo
bUlkZW50aWZpZXI6OkhNQUMpOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhN
QUMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlSE1BQ1BhcmFtZXRlcnMoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1Nik7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRo
bU5hbWUgPT0gIkhTMzg0IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMp
OworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMpOwogICAgICAgICBwYXJh
bWV0ZXJzID0gY3JlYXRlSE1BQ1BhcmFtZXRlcnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
U0hBXzM4NCk7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkhTNTEyIikg
ewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCku
Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkhNQUMpOworICAgICAgICBhbGdvcml0
aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OkhNQUMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlSE1B
Q1BhcmFtZXRlcnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMik7CiAgICAgfSBl
bHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTMjU2IikgewotICAgICAgICBhbGdvcml0
aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKKyAgICAgICAgYWxnb3JpdGhtID0g
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBj
cmVhdGVSU0FLZXlQYXJhbWV0ZXJzV2l0aEhhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
U0hBXzI1Nik7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTMzg0Iikg
ewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCku
Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKKyAg
ICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNy
ZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSk7CiAgICAg
ICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVSU0FLZXlQYXJhbWV0ZXJzV2l0aEhhc2goQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6U0hBXzM4NCk7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRo
bU5hbWUgPT0gIlJTNTEyIikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNT
QV9QS0NTMV92MV81KTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0Ff
UEtDUzFfdjFfNSk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVSU0FLZXlQYXJhbWV0ZXJz
V2l0aEhhc2goQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzUxMik7CiAgICAgfSBlbHNl
IGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIlJTQTFfNSIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81KTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5
cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81KTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6
bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2UgaWYg
KG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlNBLU9BRVAiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6UlNBX09BRVApOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlJTQV9PQUVQKTsKICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNX
aXRoSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMSk7CiAgICAgfSBlbHNlIGlm
IChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkExMjhDQkMiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6QUVTX0NCQyk7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
QUVTX0NCQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUg
PT0gIkExOTJDQkMiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lz
dHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7
CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CiAgICAgICAgIHBh
cmFtZXRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7
CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkEyNTZDQkMiKSB7Ci0gICAg
ICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUo
Q3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CisgICAgICAgIGFsZ29yaXRobSA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNlIGlmIChtX2p3
a0FsZ29yaXRobU5hbWUgPT0gIkExMjhLVyIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpBRVNfS1cpOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7
CiAgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBh
cmFtZXRlcnM+KCk7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkExOTJL
VyIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJl
ZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1cpOworICAgICAgICBh
bGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBz
dGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNl
IGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkEyNTZLVyIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpBRVNfS1cpOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19LVyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0Fs
Z29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgdGhyb3dUeXBlRXJy
b3IobV9leGVjLCAiVW5zdXBwb3J0ZWQgSldLIGFsZ29yaXRobSAiICsgbV9qd2tBbGdvcml0aG1O
YW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5
cHRvQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxlQ3J5cHRv
Q3VzdG9tLmNwcAppbmRleCBiMmE2NDg4OGRmYTY1Y2QxZDkzNDUzYjFmMmM2ZGIwMTY5YTQyMjk3
Li42YmFlZmNkNmViZDE5NDUxNjliYTRhZDJhM2FmYmEyMWNkZmE2NDI3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCkBAIC02
Nyw3ICs2Nyw3IEBAIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3JpdGhtPiBjcmVh
dGVBbGdvcml0aG1Gcm9tSlNWYWx1ZShFeGVjU3RhdGUqIGV4CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAotICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6
OnNoYXJlZCgpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKKyAgICBhdXRvIHJlc3VsdCA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoYWxnb3JpdGhtSWRl
bnRpZmllcik7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBOT1RfU1VQUE9SVEVEX0VSUik7CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCmluZGV4IDdmNGVlZTM0
YTRjODljZGJmODYxOTkyYWQ5OTVjMWEzZjE1ZDRhYTUuLjQwZGQyYzkzNWQzNTM4NTA1NjU2YzVm
NWMzNTRkNWIzNDA0MDI2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9Dcnlw
dG9BbGdvcml0aG1SZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5JiBDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2hhcmVkKCkKK0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5JiBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnk+IHJlZ2lzdHJ5OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
cnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9D
cnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oCmluZGV4IGYwOTQ4MTQxZjgzNWY5ZmI5YTQ5NjAzMDY1
MTFhYWY4MGVhNmI1M2EuLmJkNjRiMTQxNzk4ZjE5ZDNhZjk3YTE3YWJhNzQ2OTVkOTkwNjhlM2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5o
CkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5IHsKICAgICBm
cmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk+OwogCiBw
dWJsaWM6Ci0gICAgc3RhdGljIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5JiBzaGFyZWQoKTsKKyAg
ICBzdGF0aWMgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkmIHNpbmdsZXRvbigpOwogCiAgICAgYm9v
bCBnZXRJZGVudGlmaWVyRm9yTmFtZShjb25zdCBTdHJpbmcmLCBDcnlwdG9BbGdvcml0aG1JZGVu
dGlmaWVyJik7CiAgICAgU3RyaW5nIG5hbWVGb3JJZGVudGlmaWVyKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcAppbmRleCBiYTJmMDJhOWFk
NWJkZWU5Zjc2ZDlkNjc0MTAyMTliNDc4MjU5YTYyLi41M2QxYzFlYjU0NWY2MTQxZWUwNTE3MjY1
YWIxM2M2OTgyNWQ5NjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRv
S2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcApAQCAtNjMs
NyArNjMsNyBAQCBTdHJpbmcgQ3J5cHRvS2V5Ojp0eXBlKCkgY29uc3QKIAogdm9pZCBDcnlwdG9L
ZXk6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25C
dWlsZGVyJiBidWlsZGVyKSBjb25zdAogewotICAgIGJ1aWxkZXIuYWRkKCJuYW1lIiwgQ3J5cHRv
QWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1fYWxnb3JpdGht
KSk7CisgICAgYnVpbGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2lu
Z2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsKICAgICAvLyBTdWJjbGFz
c2VzIHdpbGwgYWRkIG90aGVyIGtleXMuCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tl
eXMvQ3J5cHRvS2V5SE1BQy5jcHAKaW5kZXggNWZhMTM4NDFiZDllNzAzNjk4YTUwZWQ5ZGZmZWZk
ZTRjNWIzNjRkNC4uYjU1MWY3YTllYzYwODY0NWNiMzA4MzUzODRhYzdkZTE3YWEzZDk4MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAKQEAgLTcyLDcg
KzcyLDcgQEAgdm9pZCBDcnlwdG9LZXlITUFDOjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENy
eXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYKICAgICBDcnlwdG9LZXk6OmJ1aWxkQWxn
b3JpdGhtRGVzY3JpcHRpb24oYnVpbGRlcik7CiAKICAgICBhdXRvIGhhc2hEZXNjcmlwdGlvbkJ1
aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsKLSAgICBoYXNoRGVzY3JpcHRpb25C
dWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkubmFt
ZUZvcklkZW50aWZpZXIobV9oYXNoKSk7CisgICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRk
KCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVu
dGlmaWVyKG1faGFzaCkpOwogICAgIGJ1aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlv
bkJ1aWxkZXIpOwogCiAgICAgYnVpbGRlci5hZGQoImxlbmd0aCIsIG1fa2V5LnNpemUoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKaW5kZXggYjU2
YWMyMjk0YjA2YjdiNjg3OTY3ZDQxNTNmZTczNmFiZDdmZmIwNC4uYjMzYTY0ZTU3YWNhYjQ5YTY1
YTU2Yjg3Mjk4MjRkZjZiNTAxYWM3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMv
Q3J5cHRvS2V5UlNBTWFjLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgQ3J5cHRvS2V5UlNB
OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVp
bGRlciYKIAogICAgIGlmIChtX3Jlc3RyaWN0ZWRUb1NwZWNpZmljSGFzaCkgewogICAgICAgICBh
dXRvIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIgPSBidWlsZGVyLmNyZWF0ZUVtcHR5Q2xvbmUoKTsK
LSAgICAgICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNoYXJlZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOworICAgICAg
ICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7CiAgICAgICAgIGJ1
aWxkZXIuYWRkKCJoYXNoIiwgKmhhc2hEZXNjcmlwdGlvbkJ1aWxkZXIpOwogICAgIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAppbmRleCBiM2FkNjE5N2Uy
YjcxZTFhZDgzODFmM2M3M2M2ZGVkYzRlMDA1OGI4Li5lYWU2MmJjNzFmODYzODBjNzI1MTZiN2U3
MGQ3MWNlN2FlM2I1MDUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuY3BwCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgQmFja0ZvcndhcmRMaXN0OjphZGRJdGVtKFBh
c3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0pCiAgICAgICAgICAgICBSZWZQdHI8SGlzdG9y
eUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgpOwogICAgICAgICAgICAgbV9lbnRyaWVzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgICAgIG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAg
ICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAgICAgICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNzgsNyArNzgsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRy
PEhpc3RvcnlJdGVtPiBwcnBJdGVtKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0g
PSBtX2VudHJpZXNbMF07CiAgICAgICAgIG1fZW50cmllcy5yZW1vdmUoMCk7CiAgICAgICAgIG1f
ZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1v
dmUoKml0ZW0pOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7
CiAgICAgICAgIG1fY3VycmVudC0tOwogICAgIH0KIApAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQg
QmFja0ZvcndhcmRMaXN0OjpzZXRDYXBhY2l0eShpbnQgc2l6ZSkKICAgICAgICAgUmVmUHRyPEhp
c3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzLmxhc3QoKTsKICAgICAgICAgbV9lbnRyaWVzLnJl
bW92ZUxhc3QoKTsKICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICB9CiAKICAgICBpZiAoIXNpemUpCkBAIC0yNDUs
NyArMjQ1LDcgQEAgYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiAg
ICAgZm9yIChhdXRvJiBpdGVtIDogbV9lbnRyaWVzKSB7CiAgICAgICAgIGlmIChpdGVtLT5pc0lu
UGFnZUNhY2hlKCkpIHsKICAgICAgICAgICAgIGRpZFJlbW92ZUF0TGVhc3RPbmVJdGVtID0gdHJ1
ZTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAg
ICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgfQog
ICAgIH0KICAgICByZXR1cm4gZGlkUmVtb3ZlQXRMZWFzdE9uZUl0ZW07CkBAIC0yNTUsNyArMjU1
LDcgQEAgYm9vbCBCYWNrRm9yd2FyZExpc3Q6OmNsZWFyQWxsUGFnZUNhY2hlcygpCiB2b2lkIEJh
Y2tGb3J3YXJkTGlzdDo6Y2xvc2UoKQogewogICAgIGZvciAoYXV0byYgaXRlbSA6IG1fZW50cmll
cykKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOworICAgICAgICBQ
YWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgbV9lbnRyaWVzLmNsZWFy
KCk7CiAgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKICAgICBtX3BhZ2UgPSBudWxscHRyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAppbmRleCBlY2Y0ZWE4NmU3YTI1YjlkYzRi
MzIxYmJhNjlkYjdmMDU2NDRmMTE2Li5lNjVjZTZlNjZmYzFmNTk4OWVhNmMzMzUwYTI2OTYwYzcy
NTA5MTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtMTczLDcg
KzE3Myw3IEBAIENhY2hlZEZyYW1lOjpDYWNoZWRGcmFtZShGcmFtZSYgZnJhbWUpCiAKICAgICBm
cmFtZS5sb2FkZXIoKS5jbGllbnQoKS5zYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZSh0aGlz
KTsKIAotICAgIGlmIChtX2lzQ29tcG9zaXRlZCAmJiBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNob3Vs
ZENsZWFyQmFja2luZ1N0b3JlcygpKQorICAgIGlmIChtX2lzQ29tcG9zaXRlZCAmJiBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLnNob3VsZENsZWFyQmFja2luZ1N0b3JlcygpKQogICAgICAgICBmcmFt
ZS52aWV3KCktPmNsZWFyQmFja2luZ1N0b3JlcygpOwogCiAgICAgLy8gZG9jdW1lbnRXaWxsU3Vz
cGVuZEZvclBhZ2VDYWNoZSgpIGNhbiBzZXQgdXAgYSBsYXlvdXQgdGltZXIgb24gdGhlIEZyYW1l
Vmlldywgc28gY2xlYXIgdGltZXJzIGFmdGVyIHRoYXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlz
dG9yeUl0ZW0uY3BwCmluZGV4IDFiNTI1ZGYyOGM0NDc2ZmYyMGYzMjY1MTFhM2ExNGFjNTUyYmQ2
MWMuLmMzYzM2N2Y0M2M0MzU1ZTQ2OTI0ZDMyODUzZTBkN2E2MzdkZDViNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBIaXN0
b3J5SXRlbTo6c2V0VVJMU3RyaW5nKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogCiB2b2lkIEhp
c3RvcnlJdGVtOjpzZXRVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5yZW1vdmUoKnRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCp0
aGlzKTsKICAgICBzZXRVUkxTdHJpbmcodXJsLnN0cmluZygpKTsKICAgICBjbGVhckRvY3VtZW50
U3RhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCAyMmQ2ODAy
NThmM2NkNGFhZGE4MjdkMzhhNzg3YjdiMGI2NDc0MzYyLi45NjIwOTkwMzg1YTNjMzUwMTQwOTJi
MGM5ZWJlZjhlMGM4YWNkYWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1Bh
Z2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCkBA
IC0yOTEsNyArMjkxLDcgQEAgc3RhdGljIHZvaWQgbG9nQ2FuQ2FjaGVQYWdlRGVjaXNpb24oUGFn
ZSYgcGFnZSkKICAgICBkaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5sb2dEaWFnbm9zdGljTWVzc2Fn
ZVdpdGhSZXN1bHQoRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpwYWdlQ2FjaGVLZXkoKSwgZW1wdHlT
dHJpbmcoKSwgcmVqZWN0UmVhc29ucyA/IERpYWdub3N0aWNMb2dnaW5nUmVzdWx0RmFpbCA6IERp
YWdub3N0aWNMb2dnaW5nUmVzdWx0UGFzcyk7CiB9CiAKLVBhZ2VDYWNoZSYgUGFnZUNhY2hlOjpz
aGFyZWQoKQorUGFnZUNhY2hlJiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFBhZ2VDYWNoZT4gZ2xvYmFsUGFnZUNhY2hlOwogICAgIHJldHVybiBn
bG9iYWxQYWdlQ2FjaGU7CkBAIC00ODQsNyArNDg0LDcgQEAgQ2FjaGVkUGFnZSogUGFnZUNhY2hl
OjpnZXQoSGlzdG9yeUl0ZW0mIGl0ZW0sIFBhZ2UqIHBhZ2UpIGNvbnN0CiAgICAgaWYgKGNhY2hl
ZFBhZ2UtPmhhc0V4cGlyZWQoKSkgewogICAgICAgICBMT0coUGFnZUNhY2hlLCAiTm90IHJlc3Rv
cmluZyBwYWdlIGZvciAlcyBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZSBiZWNhdXNlIGNhY2hlIGVu
dHJ5IGhhcyBleHBpcmVkIiwgaXRlbS51cmwoKS5zdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7CiAg
ICAgICAgIGxvZ1BhZ2VDYWNoZUZhaWx1cmVEaWFnbm9zdGljTWVzc2FnZShwYWdlLCBEaWFnbm9z
dGljTG9nZ2luZ0tleXM6OmV4cGlyZWRLZXkoKSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVk
KCkucmVtb3ZlKGl0ZW0pOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShp
dGVtKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogICAgIHJldHVybiBjYWNoZWRQ
YWdlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKaW5kZXggOTUzNmE5Zjg2ZGYyMTRkYTMx
YWM0YWZlOWUzNzQyN2E0ODY1MzkxZi4uMGYyZmI0OTYzODJiNzVlY2M3OTY3NWIwYzlmMDkyNjJh
YTEwNzE1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCkBAIC00NCw3ICs0NCw3IEBA
IGNsYXNzIFBhZ2VDYWNoZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUNhY2hlKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgLy8gRnVuY3Rpb24gdG8gb2J0
YWluIHRoZSBnbG9iYWwgcGFnZSBjYWNoZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFn
ZUNhY2hlJiBzaGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUGFnZUNhY2hlJiBz
aW5nbGV0b24oKTsKIAogICAgIGJvb2wgY2FuQ2FjaGUoUGFnZSopIGNvbnN0OwogCkBAIC03Myw3
ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyhi
b29sIGZsYWcpIHsgbV9zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMgPSBmbGFnOyB9CiAKIHByaXZh
dGU6Ci0gICAgUGFnZUNhY2hlKCkgPSBkZWZhdWx0OyAvLyBVc2Ugc2hhcmVkKCkgaW5zdGVhZC4K
KyAgICBQYWdlQ2FjaGUoKSA9IGRlZmF1bHQ7IC8vIFVzZSBzaW5nbGV0b24oKSBpbnN0ZWFkLgog
ICAgIH5QYWdlQ2FjaGUoKSA9IGRlbGV0ZTsgLy8gTWFrZSBzdXJlIG5vYm9keSBhY2NpZGVudGFs
bHkgY2FsbHMgZGVsZXRlIC0tIFdlYkNvcmUgZG9lcyBub3QgZGVsZXRlIHNpbmdsZXRvbnMuCiAK
ICAgICBzdGF0aWMgYm9vbCBjYW5DYWNoZVBhZ2VDb250YWluaW5nVGhpc0ZyYW1lKEZyYW1lJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZS5jcHAKaW5kZXggOGQxZWM0MmYzYTEwZjAyZmUwYTg5YTQyYTE2NGFkNmZi
ZmM1NjUyOS4uYTBmMjhkYzgwNTg0ZDZmN2ZmZmQwODQzNTUyNjk2OTEyZmEwY2MxYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2Fj
aGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJl
c3VsdENhY2hlLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGJvb2wgQ3Jvc3NPcmlnaW5QcmVmbGln
aHRSZXN1bHRDYWNoZUl0ZW06OmFsbG93c1JlcXVlc3QoU3RvcmVkQ3JlZGVudGlhbHMgaW5jbHVk
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLUNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUm
IENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpCitDcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlJiBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5n
bGV0b24oKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmggYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oCmlu
ZGV4IGU3ZDI4MWI3OTE3ZjAwNmM3Mjc2MzM5ZDM4YzgxYWNkM2RlMDc4YTYuLmY0Nzg1ZmZmMjg4
OGFiZThiMTE1YTdmZDg4MWMxNWQ5ZDk5NTUyMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaApAQCAtNjYsNyAr
NjYsNyBAQCBjbGFzcyBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSYgc2hhcmVkKCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUmIHNpbmdsZXRvbigp
OwogCiAgICAgdm9pZCBhcHBlbmRFbnRyeShjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgVVJM
Jiwgc3RkOjp1bmlxdWVfcHRyPENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtPik7
CiAgICAgYm9vbCBjYW5Ta2lwUHJlZmxpZ2h0KGNvbnN0IFN0cmluZyYgb3JpZ2luLCBjb25zdCBV
UkwmLCBTdG9yZWRDcmVkZW50aWFscywgY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIHJlcXVlc3RIZWFkZXJzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAKaW5kZXggOTUyOTgxMTgyZDBkM2Q0YmVkZmZh
MDRiMWQzYjNlMWE3ZDkzMmE3Zi4uZTFhYjEzODkxOGQxZDk3YzcyMDgzMWZmNTg3MjhkY2RkYjM5
ZTdmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJs
ZUxvYWRlci5jcHAKQEAgLTEwNCw3ICsxMDQsNyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxv
YWRlcjo6bWFrZUNyb3NzT3JpZ2luQWNjZXNzUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlcwog
ICAgICAgICBtX3NpbXBsZVJlcXVlc3QgPSBmYWxzZTsKICAgICAgICAgbV9hY3R1YWxSZXF1ZXN0
ID0gV1RGOjptb3ZlKGNyb3NzT3JpZ2luUmVxdWVzdCk7CiAKLSAgICAgICAgaWYgKENyb3NzT3Jp
Z2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmNhblNraXBQcmVmbGlnaHQoc2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgbV9vcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIG1fYWN0
dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKKyAgICAgICAgaWYgKENyb3NzT3JpZ2lu
UHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmNhblNraXBQcmVmbGlnaHQoc2VjdXJp
dHlPcmlnaW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgbV9vcHRpb25z
LmFsbG93Q3JlZGVudGlhbHMoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwTWV0aG9kKCksIG1fYWN0
dWFsUmVxdWVzdC0+aHR0cEhlYWRlckZpZWxkcygpKSkKICAgICAgICAgICAgIHByZWZsaWdodFN1
Y2Nlc3MoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWFrZUNyb3NzT3JpZ2luQWNjZXNz
UmVxdWVzdFdpdGhQcmVmbGlnaHQoKm1fYWN0dWFsUmVxdWVzdCk7CkBAIC0yNTYsNyArMjU2LDcg
QEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnMKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmFw
cGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1fYWN0dWFsUmVxdWVzdC0+
dXJsKCksIFdURjo6bW92ZShwcmVmbGlnaHRSZXN1bHQpKTsKKyAgICAgICAgQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuYXBwZW5kRW50cnkoc2VjdXJpdHlPcmln
aW4oKS0+dG9TdHJpbmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgV1RGOjptb3ZlKHByZWZs
aWdodFJlc3VsdCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV9zYW1lT3JpZ2luUmVx
dWVzdCAmJiBtX29wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID09IFVzZUFjY2Vzc0Nv
bnRyb2wpIHsKICAgICAgICAgICAgIGlmICghcGFzc2VzQWNjZXNzQ29udHJvbENoZWNrKHJlc3Bv
bnNlLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygpLCBzZWN1cml0eU9yaWdpbigpLCBhY2Nl
c3NDb250cm9sRXJyb3JEZXNjcmlwdGlvbikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2Fk
ZXIuY3BwCmluZGV4IDczMTkwODg3NWYxYTBkYmEzMzcwMmI3ODE1OGEwMjc0NTFhZTYzZmIuLmY4
ODRmODlhOTkyNzcxM2M5YjlkNjQ4ZDQxNWViN2Q2NWZhYjNmNGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMTc0MSw3ICsxNzQxLDcgQEAgdm9pZCBGcmFtZUxvYWRl
cjo6Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQ
YWdlPiBjYWNoZWRQYWdlOwogICAgIGlmIChtX2xvYWRpbmdGcm9tQ2FjaGVkUGFnZSAmJiBoaXN0
b3J5KCkucHJvdmlzaW9uYWxJdGVtKCkpCi0gICAgICAgIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6
OnNoYXJlZCgpLnRha2UoKmhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSwgbV9mcmFtZS5wYWdl
KCkpOworICAgICAgICBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS50YWtlKCpo
aXN0b3J5KCkucHJvdmlzaW9uYWxJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKIAogICAgIExPRyhQ
YWdlQ2FjaGUsICJXZWJDb3JlTG9hZGluZyAlczogQWJvdXQgdG8gY29tbWl0IHByb3Zpc2lvbmFs
IGxvYWQgZnJvbSBwcmV2aW91cyBVUkwgJyVzJyB0byBuZXcgVVJMICclcyciLCBtX2ZyYW1lLnRy
ZWUoKS51bmlxdWVOYW1lKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwKICAgICAgICAgbV9mcmFt
ZS5kb2N1bWVudCgpID8gbV9mcmFtZS5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmdDZW50ZXJFbGxp
cHNpemVkVG9MZW5ndGgoKS51dGY4KCkuZGF0YSgpIDogIiIsCkBAIC0xNzU4LDExICsxNzU4LDEx
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFsTG9hZCgpCiAgICAgICAgICAg
ICBMT0coTWVtb3J5UHJlc3N1cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSB1bmRlciBt
ZW1vcnkgcHJlc3N1cmUgYXQ6ICVzIiwgX19QUkVUVFlfRlVOQ1RJT05fXyk7CiAgICAgICAgICAg
ICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRvIDAgZHVlIHRvIG1lbW9yeSBw
cmVzc3VyZSIpOwogICAgICAgICAgICAgLy8gRG9uJ3QgY2FjaGUgYW55IHBhZ2UgaWYgd2UgYXJl
IHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
cHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOworICAgICAg
ICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVh
c29uOjpNZW1vcnlQcmVzc3VyZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3lzdGVtTWVtb3J5TGV2
ZWwoKSA8PSBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpIHsKICAgICAgICAg
ICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFnZSBjYWNoZSBiZWNhdXNlIHN5c3Rl
bSBtZW1vcnkgbGV2ZWwgaXMgJWQgYXQ6ICVzIiwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgX19QUkVU
VFlfRlVOQ1RJT05fXyk7Ci0gICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmluZyBwYWdl
IGNhY2hlIHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAlZCBsZXNzIG9yIGVxdWFsIHRv
ICVkIHRocmVzaG9sZCkiLCBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUoKSAvIDIsIHN5c3Rl
bU1lbW9yeUxldmVsKCksIG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VDYWNoZSk7Ci0g
ICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KFBhZ2VDYWNoZTo6
c2hhcmVkKCkubWF4U2l6ZSgpIC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwor
ICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAlZCBkdWUg
dG8gbG93IG1lbW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0byAlZCB0aHJlc2hvbGQpIiwg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXhTaXplKCkgLyAyLCBzeXN0ZW1NZW1vcnlMZXZlbCgp
LCBtZW1vcnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpOworICAgICAgICAgICAgUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdyhQYWdlQ2FjaGU6OnNpbmdsZXRvbigp
Lm1heFNpemUoKSAvIDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKICAgICAgICAg
fQogICAgIH0KICNlbmRpZgpAQCAtMTc3Miw4ICsxNzcyLDggQEAgdm9pZCBGcmFtZUxvYWRlcjo6
Y29tbWl0UHJvdmlzaW9uYWxMb2FkKCkKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0
byBjYWNoZSB0aGUgcGFnZSB3ZSBhcmUgbmF2aWdhdGluZyBhd2F5IGZyb20gaW50byB0aGUgYmFj
ay9mb3J3YXJkIGNhY2hlLgogICAgIC8vIFdlIGFyZSBkb2luZyB0aGlzIGhlcmUgYmVjYXVzZSB3
ZSBrbm93IGZvciBzdXJlIHRoYXQgYSBuZXcgcGFnZSBpcyBhYm91dCB0byBiZSBsb2FkZWQuCiAg
ICAgSGlzdG9yeUl0ZW0mIGl0ZW0gPSAqaGlzdG9yeSgpLmN1cnJlbnRJdGVtKCk7Ci0gICAgaWYg
KCFtX2ZyYW1lLnRyZWUoKS5wYXJlbnQoKSAmJiBQYWdlQ2FjaGU6OnNoYXJlZCgpLmNhbkNhY2hl
KG1fZnJhbWUucGFnZSgpKSAmJiAhaXRlbS5pc0luUGFnZUNhY2hlKCkpCi0gICAgICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkuYWRkKGl0ZW0sICptX2ZyYW1lLnBhZ2UoKSk7CisgICAgaWYgKCFtX2Zy
YW1lLnRyZWUoKS5wYXJlbnQoKSAmJiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLmNhbkNhY2hlKG1f
ZnJhbWUucGFnZSgpKSAmJiAhaXRlbS5pc0luUGFnZUNhY2hlKCkpCisgICAgICAgIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkuYWRkKGl0ZW0sICptX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBpZiAobV9s
b2FkVHlwZSAhPSBGcmFtZUxvYWRUeXBlOjpSZXBsYWNlKQogICAgICAgICBjbG9zZU9sZERhdGFT
b3VyY2VzKCk7CkBAIC0zMTU5LDcgKzMxNTksNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlm
ZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQog
ICAgIC8vIFJlbWVtYmVyIHRoaXMgaXRlbSBzbyB3ZSBjYW4gdHJhdmVyc2UgYW55IGNoaWxkIGl0
ZW1zIGFzIGNoaWxkIGZyYW1lcyBsb2FkCiAgICAgaGlzdG9yeSgpLnNldFByb3Zpc2lvbmFsSXRl
bSgmaXRlbSk7CiAKLSAgICBpZiAoQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6
c2hhcmVkKCkuZ2V0KGl0ZW0sIG1fZnJhbWUucGFnZSgpKSkgeworICAgIGlmIChDYWNoZWRQYWdl
KiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5nZXQoaXRlbSwgbV9mcmFtZS5w
YWdlKCkpKSB7CiAgICAgICAgIGF1dG8gZG9jdW1lbnRMb2FkZXIgPSBjYWNoZWRQYWdlLT5kb2N1
bWVudExvYWRlcigpOwogICAgICAgICBkb2N1bWVudExvYWRlci0+c2V0VHJpZ2dlcmluZ0FjdGlv
bihOYXZpZ2F0aW9uQWN0aW9uKGRvY3VtZW50TG9hZGVyLT5yZXF1ZXN0KCksIGxvYWRUeXBlLCBm
YWxzZSkpOwogICAgICAgICBkb2N1bWVudExvYWRlci0+c2V0TGFzdENoZWNrZWRSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0
b3J5Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCmluZGV4IDgzM2U1ODg0YmFhMDdiMzViMWIzNWU1ZjRiYWMzN2RiMzljOWRkYTIuLmFj
ZjkwOTA2ZWFkZDIwOWQwZDA0YjRhOGRmODcwZTgwZjVlOTdkZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcApAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQg
SGlzdG9yeUNvbnRyb2xsZXI6OmludmFsaWRhdGVDdXJyZW50SXRlbUNhY2hlZFBhZ2UoKQogICAg
ICAgICByZXR1cm47CiAKICAgICAvLyBXaGVuIHdlIGFyZSBwcmUtY29tbWl0LCB0aGUgY3VycmVu
dEl0ZW0gaXMgd2hlcmUgYW55IHBhZ2UgY2FjaGUgZGF0YSByZXNpZGVzLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWNoZWRQYWdlPiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtl
KCpjdXJyZW50SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPENh
Y2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnRha2UoKmN1cnJl
bnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKICAgICBpZiAoIWNhY2hlZFBhZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMzM2LDcgKzMzNiw3IEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnVw
ZGF0ZUZvclJlbG9hZCgpCiAjZW5kaWYKIAogICAgIGlmIChtX2N1cnJlbnRJdGVtKSB7Ci0gICAg
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCptX2N1cnJlbnRJdGVtKTsKKyAgICAgICAg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKm1fY3VycmVudEl0ZW0pOwogICAgIAogICAg
ICAgICBpZiAobV9mcmFtZS5sb2FkZXIoKS5sb2FkVHlwZSgpID09IEZyYW1lTG9hZFR5cGU6OlJl
bG9hZCB8fCBtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVs
b2FkRnJvbU9yaWdpbikKICAgICAgICAgICAgIHNhdmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0
ZVRvSXRlbShtX2N1cnJlbnRJdGVtLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApp
bmRleCBjYjM5NGVhNjU3Nzg4NzI2MzU2YzE4NTQ4NWE1ZjI4ZDExZjkzNTkxLi5lYTE2MTU4ZTcw
Y2EwNjE4YjJmYzI2YmE1OTY0ZjViYjYxYWU4OGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
Y3BwCkBAIC00NTMsNyArNDUzLDcgQEAgRE9NV2luZG93Ojp+RE9NV2luZG93KCkKIAogI2lmIEVO
QUJMRShHQU1FUEFEKQogICAgIGlmIChtX2dhbWVwYWRFdmVudExpc3RlbmVyQ291bnQpCi0gICAg
ICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS51bnJlZ2lzdGVyRE9NV2luZG93KHRoaXMpOwor
ICAgICAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRPTVdpbmRvdyh0
aGlzKTsKICNlbmRpZgogfQogCkBAIC01MTksNyArNTE5LDcgQEAgdm9pZCBET01XaW5kb3c6Ondp
bGxEZXRhY2hEb2N1bWVudEZyb21GcmFtZSgpCiB2b2lkIERPTVdpbmRvdzo6aW5jcmVtZW50R2Ft
ZXBhZEV2ZW50TGlzdGVuZXJDb3VudCgpCiB7CiAgICAgaWYgKCsrbV9nYW1lcGFkRXZlbnRMaXN0
ZW5lckNvdW50ID09IDEpCi0gICAgICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3Rl
ckRPTVdpbmRvdyh0aGlzKTsKKyAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNpbmdsZXRvbigpLnJl
Z2lzdGVyRE9NV2luZG93KHRoaXMpOwogfQogCiB2b2lkIERPTVdpbmRvdzo6ZGVjcmVtZW50R2Ft
ZXBhZEV2ZW50TGlzdGVuZXJDb3VudCgpCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBET01XaW5k
b3c6OmRlY3JlbWVudEdhbWVwYWRFdmVudExpc3RlbmVyQ291bnQoKQogICAgIEFTU0VSVChtX2dh
bWVwYWRFdmVudExpc3RlbmVyQ291bnQpOwogCiAgICAgaWYgKCEtLW1fZ2FtZXBhZEV2ZW50TGlz
dGVuZXJDb3VudCkKLSAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpLnVucmVnaXN0ZXJE
T01XaW5kb3codGhpcyk7CisgICAgICAgIEdhbWVwYWRNYW5hZ2VyOjpzaW5nbGV0b24oKS51bnJl
Z2lzdGVyRE9NV2luZG93KHRoaXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
ZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKaW5kZXggYjRhYjZjYTA5YTA1Mzc1MDczMTgyOTRmOGQ5MmI5
YzMxZTBhODJiNC4uY2UxMTQ4YmIwZTA5MjQwZjM2MDFjZGZlZjdiNWU4MzJkNDMzNzc5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKQEAgLTIxMCw3ICsyMTAs
NyBAQCB2b2lkIFJlZ2lvbk92ZXJsYXk6OnJlY29tcHV0ZVJlZ2lvbigpCiAgICAgICAgIG1fb3Zl
cmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7CiB9CiAKLURlYnVnUGFnZU92ZXJsYXlzJiBEZWJ1Z1Bh
Z2VPdmVybGF5czo6c2hhcmVkKCkKK0RlYnVnUGFnZU92ZXJsYXlzJiBEZWJ1Z1BhZ2VPdmVybGF5
czo6c2luZ2xldG9uKCkKIHsKICAgICBpZiAoIXNoYXJlZERlYnVnT3ZlcmxheXMpCiAgICAgICAg
IHNoYXJlZERlYnVnT3ZlcmxheXMgPSBuZXcgRGVidWdQYWdlT3ZlcmxheXM7CkBAIC0yOTYsNyAr
Mjk2LDcgQEAgdm9pZCBEZWJ1Z1BhZ2VPdmVybGF5czo6c2V0dGluZ3NDaGFuZ2VkKE1haW5GcmFt
ZSYgZnJhbWUpCiAgICAgaWYgKCFhY3RpdmVPdmVybGF5UmVnaW9ucyAmJiAhaGFzT3ZlcmxheXMo
ZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6c2hhcmVk
KCkudXBkYXRlT3ZlcmxheVJlZ2lvblZpc2liaWxpdHkoZnJhbWUsIGFjdGl2ZU92ZXJsYXlSZWdp
b25zKTsKKyAgICBEZWJ1Z1BhZ2VPdmVybGF5czo6c2luZ2xldG9uKCkudXBkYXRlT3ZlcmxheVJl
Z2lvblZpc2liaWxpdHkoZnJhbWUsIGFjdGl2ZU92ZXJsYXlSZWdpb25zKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5oCmluZGV4IDFmNjQxZmQyOGE0MjMyY2I0
Nzk1M2Q2MjBmNWJmNGRmNTQ4MDZiZWMuLjU0NjEwYTI0NGJiNjk0N2IwZDk4YWI2ZjM0ZTRmNTFl
YjFjYzM5YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3Zlcmxh
eXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmgKQEAgLTM3
LDcgKzM3LDcgQEAgY2xhc3MgUmVnaW9uT3ZlcmxheTsKIAogY2xhc3MgRGVidWdQYWdlT3Zlcmxh
eXMgewogcHVibGljOgotICAgIHN0YXRpYyBEZWJ1Z1BhZ2VPdmVybGF5cyYgc2hhcmVkKCk7Cisg
ICAgc3RhdGljIERlYnVnUGFnZU92ZXJsYXlzJiBzaW5nbGV0b24oKTsKIAogICAgIGVudW0gY2xh
c3MgUmVnaW9uVHlwZSB7CiAgICAgICAgIFdoZWVsRXZlbnRIYW5kbGVycywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKaW5kZXggNzhjYjE5MzUzMzg5Yjc2ODhlNDdiNWI1ZjZiMmY1MDAwZDA0N2U5Ny4uOTg4
YWQwNmRjYzk0Y2I4MWZkODA0YjFlMTRiOGY3ODdiZTJhZWVhZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIEZyYW1lOjpzZXRQYWdlQW5kVGV4dFpvb21GYWN0
b3JzKGZsb2F0IHBhZ2Vab29tRmFjdG9yLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcgogICAgIH0KIAog
ICAgIGlmIChpc01haW5GcmFtZSgpKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQ
YWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqcGFnZSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xl
dG9uKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKIH0KIAogZmxvYXQgRnJh
bWU6OmZyYW1lU2NhbGVGYWN0b3IoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggN2Q5N2Fl
ZjBlMmJhMjIyZTU1OWU1Y2JmOGRlYjI4NmRhMmRlNzA3Yy4uMjdjMDRiNTk1OGRjYmFmMmRiNTVm
NmZiZTIzYTUxN2JmNmQyMTU1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC04MzksOSArODM5LDkg
QEAgdm9pZCBQYWdlOjpzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZUZhY3RvcikKICAg
ICBzZXROZWVkc1JlY2FsY1N0eWxlSW5BbGxGcmFtZXMoKTsKIAogICAgIG1haW5GcmFtZSgpLmRl
dmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKCp0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNp
bmdsZXRvbigpLm1hcmtQYWdlc0ZvckRldmljZVNjYWxlQ2hhbmdlZCgqdGhpcyk7CiAKLSAgICBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7Cisg
ICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRo
aXMpOwogICAgIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRlRG9jdW1lbnRNYXJrZXJSZXNvdXJjZXMo
KTsKIAogICAgIG1haW5GcmFtZSgpLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmRpZENoYW5nZURl
dmljZVNjYWxlRmFjdG9yKCk7CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBQYWdlOjpzZXRQYWdp
bmF0aW9uKGNvbnN0IFBhZ2luYXRpb24mIHBhZ2luYXRpb24pCiAgICAgbV9wYWdpbmF0aW9uID0g
cGFnaW5hdGlvbjsKIAogICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwotICAg
IFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsK
KyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygq
dGhpcyk7CiB9CiAKIHVuc2lnbmVkIFBhZ2U6OnBhZ2VDb3VudCgpIGNvbnN0CkBAIC0xNjYxLDcg
KzE2NjEsNyBAQCB2b2lkIFBhZ2U6OnNldFZpc2l0ZWRMaW5rU3RvcmUoUmVmPFZpc2l0ZWRMaW5r
U3RvcmU+JiYgdmlzaXRlZExpbmtTdG9yZSkKICAgICBtX3Zpc2l0ZWRMaW5rU3RvcmUtPmFkZFBh
Z2UoKnRoaXMpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0gICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOworICAg
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlz
KTsKIH0KIAogU2Vzc2lvbklEIFBhZ2U6OnNlc3Npb25JRCgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VHcm91cC5jcHAKaW5kZXggZGFjMjZmMjc4ZDdhMTc1MjFmMjlkN2ZhMmNkMTFjNTQ2MmUyOTRi
Ny4uYTA4YTkyOWJlZmJkM2I5M2QwNjU3NDIxMDEzNDc2MWFjZTUwYzIwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHZvaWQgUGFnZUdyb3VwOjpjYXB0
aW9uUHJlZmVyZW5jZXNDaGFuZ2VkKCkKIHsKICAgICBmb3IgKGF1dG8gaXQgPSBtX3BhZ2VzLmJl
Z2luKCksIGVuZCA9IG1fcGFnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgKCpp
dCktPmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
Lm1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKKyAgICBQYWdlQ2FjaGU6
OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvckNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKTsKIH0K
IAogQ2FwdGlvblVzZXJQcmVmZXJlbmNlcyogUGFnZUdyb3VwOjpjYXB0aW9uUHJlZmVyZW5jZXMo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAppbmRleCBmN2JkYzRjNjAwMDQ1ZDk3MmUyZGQ2ZGY2
MTAyNjk0NzVkN2JjZmM0Li41M2QyZjk1NTVmMzAxNmYyMmFlZTdmNmI0NmNjMmQyYzliNGYyMTQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgU2V0
dGluZ3M6OnNldFVzZXNQYWdlQ2FjaGUoYm9vbCB1c2VzUGFnZUNhY2hlKQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIW1fdXNlc1BhZ2VDYWNoZSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFy
ZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25lKTsKKyAgICAgICAgUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpOb25l
KTsKIH0KIAogdm9pZCBTZXR0aW5nczo6c2V0Rm9udFJlbmRlcmluZ01vZGUoRm9udFJlbmRlcmlu
Z01vZGUgbW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1RocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdUaHJlYWQuY3BwCmluZGV4IDljOGUyZDE5OTNmMjQyZDdlY2M5NTlmYTJlZTNhNWY3MjM0MTU1
NzUuLmYyNjNkMGFkOTQ0OWZmMzc5M2I0ZDYyNjdjNGMzOThmOWM0MWJiY2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcApAQCAtNDAs
MjIgKzQwLDIyIEBAIFNjcm9sbGluZ1RocmVhZDo6U2Nyb2xsaW5nVGhyZWFkKCkKIAogYm9vbCBT
Y3JvbGxpbmdUaHJlYWQ6OmlzQ3VycmVudFRocmVhZCgpCiB7Ci0gICAgaWYgKCFzaGFyZWQoKS5t
X3RocmVhZElkZW50aWZpZXIpCisgICAgaWYgKCFzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZp
ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkg
PT0gc2hhcmVkKCkubV90aHJlYWRJZGVudGlmaWVyOworICAgIHJldHVybiBjdXJyZW50VGhyZWFk
KCkgPT0gc2luZ2xldG9uKCkubV90aHJlYWRJZGVudGlmaWVyOwogfQogCiB2b2lkIFNjcm9sbGlu
Z1RocmVhZDo6ZGlzcGF0Y2goc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKIHsKLSAg
ICBzaGFyZWQoKS5jcmVhdGVUaHJlYWRJZk5lZWRlZCgpOworICAgIHNpbmdsZXRvbigpLmNyZWF0
ZVRocmVhZElmTmVlZGVkKCk7CiAKICAgICB7Ci0gICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6
Om11dGV4PiBsb2NrKHNoYXJlZCgpLm1fZnVuY3Rpb25zTXV0ZXgpOwotICAgICAgICBzaGFyZWQo
KS5tX2Z1bmN0aW9ucy5hcHBlbmQoZnVuY3Rpb24pOworICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8
c3RkOjptdXRleD4gbG9jayhzaW5nbGV0b24oKS5tX2Z1bmN0aW9uc011dGV4KTsKKyAgICAgICAg
c2luZ2xldG9uKCkubV9mdW5jdGlvbnMuYXBwZW5kKGZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBz
aGFyZWQoKS53YWtlVXBSdW5Mb29wKCk7CisgICAgc2luZ2xldG9uKCkud2FrZVVwUnVuTG9vcCgp
OwogfQogCiB2b2lkIFNjcm9sbGluZ1RocmVhZDo6ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rp
b248dm9pZCAoKT4gZnVuY3Rpb24pCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgU2Nyb2xsaW5nVGhy
ZWFkOjpkaXNwYXRjaEJhcnJpZXIoc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKICAg
ICB9KTsKIH0KIAotU2Nyb2xsaW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNoYXJlZCgpCitT
Y3JvbGxpbmdUaHJlYWQmIFNjcm9sbGluZ1RocmVhZDo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U2Nyb2xsaW5nVGhyZWFkPiBzY3JvbGxpbmdUaHJlYWQ7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKaW5kZXgg
N2YxMzY4ZTYzYjRiMzM1NDhkOWJlMjk5ZmQ4MTM4ZjQyMmVjZmE5Ny4uMjYyY2RmMThhOTY0ODI0
N2Q5OTdiNWMyZDhiMzE1NWQ0NDdhZmFhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFNjcm9sbGluZ1RocmVhZCgpOwogCi0gICAgc3RhdGljIFNjcm9sbGluZ1RocmVhZCYgc2hh
cmVkKCk7CisgICAgc3RhdGljIFNjcm9sbGluZ1RocmVhZCYgc2luZ2xldG9uKCk7CiAKICAgICB2
b2lkIGNyZWF0ZVRocmVhZElmTmVlZGVkKCk7CiAgICAgc3RhdGljIHZvaWQgdGhyZWFkQ2FsbGJh
Y2sodm9pZCogc2Nyb2xsaW5nVGhyZWFkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1l
cGFkUHJvdmlkZXIuY3BwCmluZGV4IDA1MDRhNjhiOGU1NzllMmM4ZTMxZjY3NGI1NTNhNjcwNmJm
OTBmM2YuLmIwZjQ5MjdmMTIzYjEwOTlmNGMwOGI2NWU1NWZjMWExMGU0MzgwYmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtMzMsNyArMzMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBHYW1lcGFkUHJvdmlkZXIqIHNoYXJlZFBy
b3ZpZGVyID0gbnVsbHB0cjsKIAotR2FtZXBhZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpCitHYW1lcGFkUHJvdmlkZXImIEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKIHsK
ICAgICBpZiAoIXNoYXJlZFByb3ZpZGVyKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxHYW1lcGFkUHJvdmlkZXI+IGRlZmF1bHRQcm92aWRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR2FtZXBhZFByb3ZpZGVyLmgKaW5kZXggMjRhOWM3ZTQyNDQ5YjkwODBmZjJkMTAzZWU3OWMw
NWMwZDQ0ZTIwMi4uOGQxYzUzMTRhZDRhYjQ2MDZlODlhNDJlMGJlNzgwMmU1YWQxOGY1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmgKQEAgLTM5LDcgKzM5LDcg
QEAgY2xhc3MgR2FtZXBhZFByb3ZpZGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HYW1lcGFk
UHJvdmlkZXIoKSB7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHYW1lcGFkUHJvdmlk
ZXImIHNoYXJlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBHYW1lcGFkUHJvdmlkZXIm
IHNpbmdsZXRvbigpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIHNldFNoYXJlZFBy
b3ZpZGVyKEdhbWVwYWRQcm92aWRlciYpOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRv
cmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKaW5kZXggYjUwMmRlYjMwZWUz
ZWM0ZjU5ZTY0NGQ4OThiYzYwNzVjMWQzZTdkNy4uZTUyNDY5NjFmM2ZhMTQ1NzlkMTY3ZjgxY2Fk
YzUyODVmM2U3NDgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQ
cmVzc3VyZUhhbmRsZXIuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXI6OnJlbGVhc2VDcml0aWNhbE1lbW9yeSgpCiAgICAgICAgIFJlbGllZkxvZ2dlciBs
b2coIkVtcHR5IHRoZSBQYWdlQ2FjaGUiKTsKICAgICAgICAgLy8gUmlnaHQgbm93LCB0aGUgb25s
eSByZWFzb24gd2UgY2FsbCByZWxlYXNlIGNyaXRpY2FsIG1lbW9yeSB3aGlsZSBub3QgdW5kZXIg
bWVtb3J5IHByZXNzdXJlIGlzIGlmIHRoZSBwcm9jZXNzIGlzIGFib3V0IHRvIGJlIHN1c3BlbmRl
ZC4KICAgICAgICAgUHJ1bmluZ1JlYXNvbiBwcnVuaW5nUmVhc29uID0gbWVtb3J5UHJlc3N1cmVI
YW5kbGVyKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgPyBQcnVuaW5nUmVhc29uOjpNZW1vcnlQ
cmVzc3VyZSA6IFBydW5pbmdSZWFzb246OlByb2Nlc3NTdXNwZW5kZWQ7Ci0gICAgICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgcHJ1bmluZ1JlYXNvbik7CisgICAgICAg
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgcHJ1bmluZ1JlYXNvbik7
CiAgICAgfQogCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAppbmRleCA0ZmJkOTk5ZDZmNzk0OTA0OTY2MGY5YWQ3ZThmNzk0NjhjYmFj
ODIwLi4zYWU1NzIxNjQ4OWFiZjljNzNjOTk0NGVkMDQzNDQ2MzA0NmI0NWMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTI3LDcg
KzEyNyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9wdXJnZVRpbWVyLnN0YXJ0T25lU2hvdChzY3Jh
dGNoQnVmZmVyUHVyZ2VJbnRlcnZhbCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBTY3JhdGNo
QnVmZmVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgU2NyYXRjaEJ1ZmZlciYgc2luZ2xldG9uKCk7
CiAKIHByaXZhdGU6CiAgICAgdm9pZCB0aW1lckZpcmVkKCkKQEAgLTE1OSw3ICsxNTksNyBAQCBw
cml2YXRlOgogI2VuZGlmCiB9OwogCi1TY3JhdGNoQnVmZmVyJiBTY3JhdGNoQnVmZmVyOjpzaGFy
ZWQoKQorU2NyYXRjaEJ1ZmZlciYgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkKIHsKICAgICBE
RVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoU2NyYXRjaEJ1ZmZlciwgc2NyYXRjaEJ1ZmZl
ciwgKCkpOwogICAgIHJldHVybiBzY3JhdGNoQnVmZmVyOwpAQCAtNTY3LDcgKzU2Nyw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3ND
b250ZXh0LCBjb25zdCBGbG9hdFJlCiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsK
LSAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVm
ZmVyKGxheWVyUmVjdC5zaXplKCkpOworICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6
OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CiAgICAgaWYg
KCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTc1LDcgKzU3NSw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjCiAgICAgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QubW92
ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKIAogICAgIC8vIE9ubHkgcmVkcmF3IGluIHRo
ZSBzY3JhdGNoIGJ1ZmZlciBpZiBpdHMgY2FjaGVkIGNvbnRlbnRzIGRvbid0IG1hdGNoIG91ciBu
ZWVkcwotICAgIGJvb2wgcmVkcmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0
Q2FjaGVkU2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNl
RGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVNoYWRvd2VkUmVjdCwgc2hhZG93ZWRSZWN0LnJhZGlp
KCksIG1fbGF5ZXJTaXplKTsKKyAgICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6
OnNpbmdsZXRvbigpLnNldENhY2hlZFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENvbG9yOjpi
bGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHNo
YWRvd2VkUmVjdC5yYWRpaSgpLCBtX2xheWVyU2l6ZSk7CiAgICAgaWYgKHJlZHJhd05lZWRlZCkg
ewogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2Ut
PmNvbnRleHQoKTsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpzaGFkb3dDb250ZXh0KTsKQEAgLTU5NywxMiArNTk3LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250
ZXh0LCBjCiAgICAgCiAgICAgZHJhd1NoYWRvd0J1ZmZlcihncmFwaGljc0NvbnRleHQpOwogICAg
IG1fbGF5ZXJJbWFnZSA9IDA7Ci0gICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVT
Y3JhdGNoQnVmZmVyUHVyZ2UoKTsKKyAgICBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zY2hl
ZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNl
dFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNv
bnN0IEludFJlY3QmIGxheWVyUmVjdCkKIHsKLSAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVm
ZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOworICAgIG1f
bGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIo
bGF5ZXJSZWN0LnNpemUoKSk7CiAgICAgaWYgKCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKICAgICBidWZm
ZXJSZWxhdGl2ZUhvbGVSZWN0Lm1vdmUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAKICAg
ICAvLyBPbmx5IHJlZHJhdyBpbiB0aGUgc2NyYXRjaCBidWZmZXIgaWYgaXRzIGNhY2hlZCBjb250
ZW50cyBkb24ndCBtYXRjaCBvdXIgbmVlZHMKLSAgICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0
Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENhY2hlZEluc2V0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1
cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWxhdGl2ZVJlY3Qs
IGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSZWN0LnJhZGlpKCkpOworICAgIGJvb2wgcmVk
cmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2V0Q2FjaGVkSW5zZXRTaGFk
b3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Is
IGJ1ZmZlclJlbGF0aXZlUmVjdCwgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCwgaG9sZVJlY3QucmFk
aWkoKSk7CiAgICAgaWYgKHJlZHJhd05lZWRlZCkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQq
IHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKQEAgLTYzOCw3
ICs2MzgsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmco
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgCiAgICAgZHJhd1NoYWRvd0J1
ZmZlcihncmFwaGljc0NvbnRleHQpOwogICAgIG1fbGF5ZXJJbWFnZSA9IDA7Ci0gICAgU2NyYXRj
aEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKKyAgICBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQog
CiAvKgpAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIGhvbGVSZWN0LCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUm
IGVkZ2VTaXplKQogewotICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgp
LmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKKyAgICBtX2xheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAg
ICAgaWYgKCFtX2xheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg0LDcgKzY4NCw3
IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uCiAgICAgRmxvYXRSZWN0IHRlbXBsYXRlSG9sZSA9
IEZsb2F0UmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxhdGVT
aXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgp
IC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIC8vIE9ubHkgcmVkcmF3IGluIHRoZSBz
Y3JhdGNoIGJ1ZmZlciBpZiBpdHMgY2FjaGVkIGNvbnRlbnRzIGRvbid0IG1hdGNoIG91ciBuZWVk
cwotICAgIGJvb2wgcmVkcmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0Q2Fj
aGVkSW5zZXRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2Us
IHRlbXBsYXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUsIGhvbGVSZWN0LnJhZGlpKCkpOworICAgIGJv
b2wgcmVkcmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2V0Q2FjaGVkSW5z
ZXRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBs
YXRlQm91bmRzLCB0ZW1wbGF0ZUhvbGUsIGhvbGVSZWN0LnJhZGlpKCkpOwogICAgIGlmIChyZWRy
YXdOZWVkZWQpIHsKICAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byBhIG5ldyBJbWFnZUJ1ZmZl
ci4KICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdl
LT5jb250ZXh0KCk7CkBAIC03MzUsMTkgKzczNSwxOSBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJ
bnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bgogICAgIGRyYXdMYXllclBpZWNlcyhncmFwaGljc0NvbnRleHQsIGRlc3RIb2xlQm91bmRzLCBo
b2xlUmVjdC5yYWRpaSgpLCBlZGdlU2l6ZSwgdGVtcGxhdGVTaXplLCBJbm5lclNoYWRvdyk7CiAK
ICAgICBtX2xheWVySW1hZ2UgPSAwOwotICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVk
dWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCku
c2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgSW50U2l6ZSYgdGVtcGxh
dGVTaXplLCBjb25zdCBJbnRTaXplJiBlZGdlU2l6ZSkKIHsKLSAgICBtX2xheWVySW1hZ2UgPSBT
Y3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7Cisg
ICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1
ZmZlcih0ZW1wbGF0ZVNpemUpOwogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1
cm47CiAKICAgICBGbG9hdFJlY3QgdGVtcGxhdGVTaGFkb3cgPSBGbG9hdFJlY3QoZWRnZVNpemUu
d2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53aWR0aCgpIC0gMiAqIGVk
Z2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIgKiBlZGdlU2l6ZS5oZWln
aHQoKSk7CiAKICAgICAvLyBPbmx5IHJlZHJhdyBpbiB0aGUgc2NyYXRjaCBidWZmZXIgaWYgaXRz
IGNhY2hlZCBjb250ZW50cyBkb24ndCBtYXRjaCBvdXIgbmVlZHMKLSAgICBib29sIHJlZHJhd05l
ZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENhY2hlZFNoYWRvd1ZhbHVlcyhtX2Js
dXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVTaGFkb3csIHNoYWRvd2Vk
UmVjdC5yYWRpaSgpLCBtX2xheWVyU2l6ZSk7CisgICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVz
LCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93LCBzaGFkb3dlZFJlY3QucmFk
aWkoKSwgbV9sYXllclNpemUpOwogICAgIGlmIChyZWRyYXdOZWVkZWQpIHsKICAgICAgICAgLy8g
RHJhdyBzaGFkb3cgaW50byB0aGUgSW1hZ2VCdWZmZXIuCiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwpAQCAtNzgwLDcgKzc4
MCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNz
Q29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zCiAgICAgZHJhd0xheWVyUGllY2VzKGdyYXBo
aWNzQ29udGV4dCwgc2hhZG93Qm91bmRzLCBzaGFkb3dlZFJlY3QucmFkaWkoKSwgZWRnZVNpemUs
IHRlbXBsYXRlU2l6ZSwgT3V0ZXJTaGFkb3cpOwogCiAgICAgbV9sYXllckltYWdlID0gMDsKLSAg
ICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwor
ICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0xheWVyUGllY2VzKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHNoYWRvd0JvdW5kcywgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBjb25zdCBJbnRTaXplJiBidWZmZXJQYWRk
aW5nLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIFNoYWRvd0RpcmVjdGlvbiBkaXJlY3Rp
b24pCkBAIC04OTUsOCArODk1LDggQEAgR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dCbHVyOjpiZWdp
blNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4dCwgY29uc3QgRmwKIAogICAgIC8v
IFdlIHJlc2V0IHRoZSBzY3JhdGNoIGJ1ZmZlciB2YWx1ZXMgaGVyZSwgYmVjYXVzZSB0aGUgYnVm
ZmVyIHdpbGwgbm8gbG9uZ2VyIGNvbnRhaW4KICAgICAvLyBkYXRhIGZyb20gYW55IHByZXZpb3Vz
IHJlY3RhbmdsZSBvciBpbnNldCBzaGFkb3dzIGRyYXduIHZpYSB0aGUgdGlsaW5nIHBhdGguCi0g
ICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0Q2FjaGVkU2hhZG93VmFsdWVzKEZsb2F0U2l6
ZSgpLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFJlY3QoKSwgRmxvYXRS
b3VuZGVkUmVjdDo6UmFkaWkoKSwgbV9sYXllclNpemUpOwotICAgIG1fbGF5ZXJJbWFnZSA9IFNj
cmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7
CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2V0Q2FjaGVkU2hhZG93VmFsdWVzKEZs
b2F0U2l6ZSgpLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IsIEludFJlY3QoKSwg
RmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoKSwgbV9sYXllclNpemUpOworICAgIG1fbGF5ZXJJbWFn
ZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0
LnNpemUoKSk7CiAKICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVy
SW1hZ2UtPmNvbnRleHQoKTsKICAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7CkBAIC05MTksNyAr
OTE5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjplbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQpCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29s
b3JTcGFjZURldmljZVJHQiwgRmxvYXRSZWN0KHJvdW5kZWRJbnRQb2ludChtX2xheWVyT3JpZ2lu
KSwgbV9sYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBtX2xheWVyU2l6ZSksIGNv
bnRleHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKIAogICAgIG1fbGF5ZXJJbWFnZSA9IDA7Ci0g
ICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsK
KyAgICBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJn
ZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNw
cAppbmRleCBiNzU1OWIwMGJmOWJlNWUzMjg3MzljNzU4M2MzMmNiMzI1YjI1YzRkLi5jN2U4MzFk
OGNjNmQxZjBhOWM3OTllMjdhNDM1MjQ4NTVjNjYzY2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTIyMCwxNCArMjIwLDE0IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmxheWVy
VHJlZURpZENoYW5nZSgpCiAgICAgLy8gVGhlIGxheWVyIHRyZWUgaXMgY2hhbmdpbmcgYXMgYSBy
ZXN1bHQgb2Ygc29tZW9uZSBtb2RpZnlpbmcgYSBQbGF0Zm9ybUNBTGF5ZXIgdGhhdCBkb2Vzbid0
CiAgICAgLy8gaGF2ZSBhIGNvcnJlc3BvbmRpbmcgR3JhcGhpY3NMYXllci4gU2NoZWR1bGUgYSBm
bHVzaCBzaW5jZSB3ZSB3b24ndCBzY2hlZHVsZSBvbmUgdGhyb3VnaCB0aGUKICAgICAvLyBub3Jt
YWwgR3JhcGhpY3NMYXllciBtZWNoYW5pc21zLgotICAgIExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNo
YXJlZCgpLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhpcyk7CisgICAgTGF5ZXJDaGFu
Z2VzRmx1c2hlcjo6c2luZ2xldG9uKCkuZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbih0aGlz
KTsKIH0KIAogdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6ZGVzdHJveVJlbmRlcmVyKCkKIHsKICAg
ICBtX3Jvb3RMYXllciA9IDA7CiAgICAgbV9yb290Q2hpbGRMYXllciA9IDA7Ci0gICAgTGF5ZXJD
aGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuY2FuY2VsUGVuZGluZ0ZsdXNoKHRoaXMpOworICAgIExh
eWVyQ2hhbmdlc0ZsdXNoZXI6OnNpbmdsZXRvbigpLmNhbmNlbFBlbmRpbmdGbHVzaCh0aGlzKTsK
IH0KIAogc3RhdGljIHZvaWQgZ2V0RGlydHlSZWN0cyhIV05EIHdpbmRvdywgVmVjdG9yPENHUmVj
dD4mIG91dFJlY3RzKQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6
OnBhaW50KCkKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5
ZXJDaGFuZ2VzU29vbigpCiB7CiAgICAgbV9zaG91bGRGbHVzaFBlbmRpbmdHcmFwaGljc0xheWVy
Q2hhbmdlcyA9IHRydWU7Ci0gICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuZmx1c2hQ
ZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbih0aGlzKTsKKyAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpz
aW5nbGV0b24oKS5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNTb29uKHRoaXMpOwogfQogCiB2b2lk
IENBQ0ZMYXllclRyZWVIb3N0OjpzZXRTaG91bGRJbnZlcnRDb2xvcnMoYm9vbCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNG
bHVzaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXll
ckNoYW5nZXNGbHVzaGVyLmNwcAppbmRleCA0YjAzNmNhNDBjZjhiZGEwNjU2OGRlMGZhNTFiNGYw
MzFjODViMjY3Li4zOTE4NzU1ZWU3YWY1OGQ2YzllZDIyYzBjZGZlOGM5MmIyOTZkNzk3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFu
Z2VzRmx1c2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL0xheWVyQ2hhbmdlc0ZsdXNoZXIuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotTGF5ZXJDaGFuZ2VzRmx1c2hlciYgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6
c2hhcmVkKCkKK0xheWVyQ2hhbmdlc0ZsdXNoZXImIExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNpbmds
ZXRvbigpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKExheWVyQ2hhbmdl
c0ZsdXNoZXIsIGZsdXNoZXIsICgpKTsKICAgICByZXR1cm4gZmx1c2hlcjsKQEAgLTc0LDcgKzc0
LDcgQEAgTFJFU1VMVCBMYXllckNoYW5nZXNGbHVzaGVyOjpob29rQ2FsbGJhY2soaW50IGNvZGUs
IFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0KICAgICAvLyBjcmFzaCBmb3IgZGVidWdnaW5n
IHB1cnBvc2VzIGlmIGFuIGV4Y2VwdGlvbiBpcyBoaXQuIAogICAgIEV4Y2VwdGlvblJlZ2lzdHJh
dGlvbiByZWdpc3RyYXRpb25TdHJ1Y3Q7IC8vIE5vdGU6IG11c3QgYmUgc3RhY2sgYWxsb2NhdGVk
LgogICAgIFN0cnVjdHVyZWRFeGNlcHRpb25IYW5kbGVyU3VwcHJlc3NvciBzdXByZXNzb3IocmVn
aXN0cmF0aW9uU3RydWN0KTsKLSAgICByZXR1cm4gc2hhcmVkKCkuaG9va0ZpcmVkKGNvZGUsIHdQ
YXJhbSwgbFBhcmFtKTsKKyAgICByZXR1cm4gc2luZ2xldG9uKCkuaG9va0ZpcmVkKGNvZGUsIHdQ
YXJhbSwgbFBhcmFtKTsKIH0KIAogTFJFU1VMVCBMYXllckNoYW5nZXNGbHVzaGVyOjpob29rRmly
ZWQoaW50IGNvZGUsIFdQQVJBTSB3UGFyYW0sIExQQVJBTSBsUGFyYW0pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdl
c0ZsdXNoZXIuaAppbmRleCBmY2IzMWU3YjlkZTIyNGY3Mjc1OGQ1NjZkZDgyYzEyNjIyMTAyOWM3
Li4yOGU2NmI5ODUzOWYwM2Q3MTE0ZTZhODIwNzIwMTRmZTE2YmYwZDIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNo
YW5nZXNGbHVzaGVyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQWJzdHJhY3RDQUNGTGF5ZXJU
cmVlSG9zdDsKIGNsYXNzIExheWVyQ2hhbmdlc0ZsdXNoZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKExheWVyQ2hhbmdlc0ZsdXNoZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBMYXllckNo
YW5nZXNGbHVzaGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgTGF5ZXJDaGFuZ2VzRmx1c2hlciYg
c2luZ2xldG9uKCk7CiAKICAgICB2b2lkIGZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24oQWJz
dHJhY3RDQUNGTGF5ZXJUcmVlSG9zdCopOwogICAgIHZvaWQgY2FuY2VsUGVuZGluZ0ZsdXNoKEFi
c3RyYWN0Q0FDRkxheWVyVHJlZUhvc3QqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmNwcAppbmRleCBl
NzAzNmMxN2I0ZjkyZGFlZTFlMjUwYjA5YTYwMGNkZmRkODk3ZGNiLi5kMTZiOTUzODRlYjcwNWEx
NGFmYTVkOTIyYTJmMTRlM2FjMGYwNTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuY3BwCkBAIC0z
Myw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRmxvYXRpbmdQb2ludEVudmly
b25tZW50JiBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgpCitGbG9hdGluZ1BvaW50
RW52aXJvbm1lbnQmIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2luZ2xldG9uKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RmxvYXRpbmdQb2ludEVudmlyb25tZW50PiBmbG9hdGlu
Z1BvaW50RW52aXJvbm1lbnQ7CiAgICAgcmV0dXJuIGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2lu
dEVudmlyb25tZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5n
UG9pbnRFbnZpcm9ubWVudC5oCmluZGV4IDAzZjRkM2YwZmJjZDI0NTZmNWE4ZGJlNzNkYTY4ZmE5
MzAxOTY4YTkuLjY1MTFiZjBlMDc1OWIxNTI3Y2FhYTRlMzNlYTdhZTNhMWFkN2QyODQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmly
b25tZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1Bv
aW50RW52aXJvbm1lbnQuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzYXZlTWFpblRocmVhZEVudmlyb25tZW50KCk7CiAgICAgdm9pZCBwcm9wYWdh
dGVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBG
bG9hdGluZ1BvaW50RW52aXJvbm1lbnQmIHNoYXJlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQmIHNpbmdsZXRvbigpOwogCiBwcml2YXRlOgog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJl
YWQubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0K
aW5kZXggNGIwOWQxZjA2ZGE4MjM4ZjczNjA0MzVjMTdmM2ExOWE5NWMzYjNjOS4uZDlkMTM5NjUy
OWZkOGUzN2RhYTA3NzAxMmI3MThlNjAyN2Q2NDYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQpAQCAtNjQyLDcgKzY0Miw3IEBAIE5P
X1JFVFVSTgogI2VuZGlmCiB2b2lkICpSdW5XZWJUaHJlYWQodm9pZCAqYXJnKQogewotICAgIEZs
b2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2hhcmVkKCkucHJvcGFnYXRlTWFpblRocmVhZEVudmly
b25tZW50KCk7CisgICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5nbGV0b24oKS5wcm9w
YWdhdGVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKIAogICAgIFVOVVNFRF9QQVJBTShhcmcpOwog
ICAgIC8vIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKSBuZWVkcyB0byBiZSBjYWxsZWQgYmVm
b3JlIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpIHNpbmNlIHRoZQpAQCAtNzU3LDcgKzc1Nyw3
IEBAIHN0YXRpYyB2b2lkIFN0YXJ0V2ViVGhyZWFkKCkKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KHJlc3VsdCA9PSAwLCAic3RhcnR1cCBsb2NrIGZhaWxlZCB3aXRoIGNvZGU6JWQiLCByZXN1bHQp
OwogCiAgICAgLy8gUHJvcGFnYXRlIHRoZSBtYWluVGhyZWFkJ3MgZmVudiB0byB3b3JrZXJzICYg
dGhlIHdlYiB0aHJlYWQuCi0gICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFyZWQoKS5z
YXZlTWFpblRocmVhZEVudmlyb25tZW50KCk7CisgICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50
OjpzaW5nbGV0b24oKS5zYXZlTWFpblRocmVhZEVudmlyb25tZW50KCk7CiAKICAgICBwdGhyZWFk
X2NyZWF0ZSgmd2ViVGhyZWFkLCAmdGF0dHIsIFJ1bldlYlRocmVhZCwgTlVMTCk7CiAgICAgcHRo
cmVhZF9hdHRyX2Rlc3Ryb3koJnRhdHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAKaW5kZXggMjRmMWIwODQ3NWM3NWM0OTEzNDYz
OTQxZmEwZTVmYTJiMDFjNWRiYi4uNjk3YTQ5YzYxODBhYWIxOGZjMjM3YjBiOGU2ZDlmNDU3YzY0
NDgwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQ
cm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQ
cm92aWRlci5jcHAKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIHZvaWQgZGV2aWNlVmFsdWVzQ2hh
bmdlZENhbGxiYWNrKHZvaWQqIGNvbnRleHQsIElPUmV0dXJuIHJlc3VsdCwgdm9pZCosIEkKICAg
ICBsaXN0ZW5lci0+dmFsdWVzQ2hhbmdlZCh2YWx1ZSk7CiB9CiAKLUhJREdhbWVwYWRQcm92aWRl
ciYgSElER2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKQorSElER2FtZXBhZFByb3ZpZGVyJiBISURH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PEhJREdhbWVwYWRQcm92aWRlcj4gc2hhcmVkTGlzdGVuZXI7CiAgICAgcmV0dXJuIHNoYXJlZExp
c3RlbmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVw
YWRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92
aWRlci5oCmluZGV4IDgwZTMwZWVjYjA1MzE2NTk1NjAyMTBmM2JlY2M3ZDg2ZWMyNTI5Y2QuLjVh
MDY4ZGY2YmIxOWQ1NDU4MGJkNTcxN2VmMWFkNmMzN2U4OTA5M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmgKQEAgLTQ2LDcgKzQ2LDcg
QEAgY2xhc3MgSElER2FtZXBhZFByb3ZpZGVyIDogcHVibGljIEdhbWVwYWRQcm92aWRlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSElER2FtZXBhZFByb3ZpZGVyKTsKICAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPjsKIHB1YmxpYzoKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBzaGFyZWQoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgSElER2FtZXBhZFByb3ZpZGVyJiBzaW5nbGV0b24oKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJD
bGllbnQqKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcE1vbml0b3JpbmdHYW1lcGFkcyhHYW1lcGFk
UHJvdmlkZXJDbGllbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAppbmRleCAzODkxMzhjOWI0MGVmNTE3
OWU4YzRmYmI1OTllNDdkOWIwOGM4NjRiLi5jYzVhNWNiZTFmMmE4OTI4MTE5YzgyODJlYjA3ZGEw
NTMzZDM1MTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwCkBAIC00NSw3ICs0NSw3IEBAIHN0YXRpYyBN
ZWRpYVN0cmVhbUNlbnRlciomIG1lZGlhU3RyZWFtQ2VudGVyT3ZlcnJpZGUoKQogICAgIHJldHVy
biBvdmVycmlkZTsKIH0KIAotTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2VudGVyOjpz
aGFyZWQoKQorTWVkaWFTdHJlYW1DZW50ZXImIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24o
KQogewogICAgIE1lZGlhU3RyZWFtQ2VudGVyKiBvdmVycmlkZSA9IG1lZGlhU3RyZWFtQ2VudGVy
T3ZlcnJpZGUoKTsKICAgICBpZiAob3ZlcnJpZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaAppbmRleCA3ZDU0MGI5
NGRlOTU4NjA0YzdhNDQwNGI3M2IwNWQwZGU0MzMxMzMyLi5lNjk3ZjAyZTBkNTRiNjc2NTRjMzhh
MTdjZjNhNDAyODZhM2RjMmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xh
c3MgTWVkaWFTdHJlYW1DZW50ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfk1lZGlhU3RyZWFt
Q2VudGVyKCk7CiAKLSAgICBzdGF0aWMgTWVkaWFTdHJlYW1DZW50ZXImIHNoYXJlZCgpOworICAg
IHN0YXRpYyBNZWRpYVN0cmVhbUNlbnRlciYgc2luZ2xldG9uKCk7CiAgICAgc3RhdGljIHZvaWQg
c2V0U2hhcmVkU3RyZWFtQ2VudGVyKE1lZGlhU3RyZWFtQ2VudGVyKik7CiAKICAgICB2aXJ0dWFs
IHZvaWQgdmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUNy
ZWF0aW9uQ2xpZW50PiwgUGFzc1JlZlB0cjxNZWRpYUNvbnN0cmFpbnRzPiBhdWRpb0NvbnN0cmFp
bnRzLCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IHZpZGVvQ29uc3RyYWludHMpID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCmluZGV4IDhlZmU0MTU5OTRhN2UwNjYzMjQ2
NmVhNTVkNjBhMjI2ZmFjNTNjNWMuLmEzODkzYzBlNDMxNTU5YmM4YzhkNjIwNzQ5Mjg2NDY4YmE1
NjNhMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaApAQCAtNDUsNyArNDUsNyBA
QCBjbGFzcyBDYXB0dXJlRGV2aWNlOwogCiBjbGFzcyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2hhcmVkKCk7Cisg
ICAgc3RhdGljIEFWQ2FwdHVyZURldmljZU1hbmFnZXImIHNpbmdsZXRvbigpOwogICAgIHN0YXRp
YyBib29sIGlzQXZhaWxhYmxlKCk7CiAKICAgICBWZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5m
bz4+IGdldFNvdXJjZXNJbmZvKGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNl
TWFuYWdlci5tbQppbmRleCA5YWZkOWVkYWFmYWMyMWRjYzAxZTJkM2Y4ZDhhYzczMTlkYWU0Y2Y1
Li5iMGIyNmY2YzM1NTYwZGI0NTYyOGQwOGE3ZWIxMmJlNTllM2VlYWEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFu
YWdlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZD
YXB0dXJlRGV2aWNlTWFuYWdlci5tbQpAQCAtMTE3LDcgKzExNyw3IEBAIHN0YXRpYyBWZWN0b3I8
Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VMaXN0KCkKICAgICBpZiAoZmlyc3RUaW1lICYm
ICFjYXB0dXJlRGV2aWNlTGlzdC5zaXplKCkpIHsKICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7
CiAgICAgICAgIHJlZnJlc2hDYXB0dXJlRGV2aWNlTGlzdCgpOwotICAgICAgICBBVkNhcHR1cmVE
ZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3RlckZvckRldmljZU5vdGlmaWNhdGlvbnMoKTsK
KyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJGb3JE
ZXZpY2VOb3RpZmljYXRpb25zKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNhcHR1cmVEZXZpY2VM
aXN0OwpAQCAtMTc0LDcgKzE3NCw3IEBAIGJvb2wgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6aXNB
dmFpbGFibGUoKQogICAgIHJldHVybiBBVkZvdW5kYXRpb25MaWJyYXJ5KCk7CiB9CiAKLUFWQ2Fw
dHVyZURldmljZU1hbmFnZXImIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpCitBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyJiBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKQog
ewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChBVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLCBtYW5hZ2VyLCAoKSk7CiAgICAgcmV0dXJuIG1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFt
Q2VudGVyTWFjLmNwcAppbmRleCA4ZDhkOTBkZjE0YzJjZmNhYjJkMGI1N2U4YTlmNWE4NzZlNGM1
NGZmLi41MzRlNDdlMTI1NzUzYTlmNTZiM2MxZDdmNzdmMjExZmZjNjdiYzA1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50
ZXJNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9N
ZWRpYVN0cmVhbUNlbnRlck1hYy5jcHAKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBNZWRpYVN0cmVh
bUNlbnRlck1hYzo6dmFsaWRhdGVSZXF1ZXN0Q29uc3RyYWludHMoUGFzc1JlZlB0cjxNZWRpYVN0
cmVhbUNyZWEKIAogICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CiAgICAgICAgIFN0cmluZyBp
bnZhbGlkQ29uc3RyYWludDsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVk
KCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlv
LCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwg
aW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgY2xpZW50LT5jb25zdHJhaW50c0ludmFsaWQoaW52YWxpZENv
bnN0cmFpbnQpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzQsNyArNzQsNyBAQCB2b2lkIE1l
ZGlhU3RyZWFtQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ3JlYQogCiAgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKICAgICAgICAg
U3RyaW5nIGludmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2Vy
OjpzaGFyZWQoKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJj
ZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAg
ICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWlu
dHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRz
LmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFp
bnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChp
bnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC05NSwxMyArOTUsMTMg
QEAgdm9pZCBNZWRpYVN0cmVhbUNlbnRlck1hYzo6Y3JlYXRlTWVkaWFTdHJlYW0oUGFzc1JlZlB0
cjxNZWRpYVN0cmVhbUNyZWF0aW9uQ2xpZW4KICAgICAKICAgICBpZiAoYXVkaW9Db25zdHJhaW50
cykgewogICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1l
ZGlhU3RyZWFtU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENv
bnN0cmFpbnQpOworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52
ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1
ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFp
bnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+ZmFpbGVk
VG9DcmVhdGVTdHJlYW1XaXRoQ29uc3RyYWludHNFcnJvcihpbnZhbGlkQ29uc3RyYWludCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVNvdXJjZT4gYXVkaW9Tb3VyY2UgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpz
aGFyZWQoKS5iZXN0U291cmNlRm9yVHlwZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNl
OjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxNZWRpYVN0
cmVhbVNvdXJjZT4gYXVkaW9Tb3VyY2UgPSBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0
b24oKS5iZXN0U291cmNlRm9yVHlwZUFuZENvbnN0cmFpbnRzKE1lZGlhU3RyZWFtU291cmNlOjpB
dWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSk7CiAgICAgICAgIEFTU0VSVChhdWRpb1NvdXJj
ZSk7CiAgICAgICAgIAogICAgICAgICBhdWRpb1NvdXJjZXMuYXBwZW5kKGF1ZGlvU291cmNlLnJl
bGVhc2UoKSk7CkBAIC0xMDksMTMgKzEwOSwxMyBAQCB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFj
OjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbgog
ICAgIAogICAgIGlmICh2aWRlb0NvbnN0cmFpbnRzKSB7CiAgICAgICAgIFN0cmluZyBpbnZhbGlk
Q29uc3RyYWludDsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkudmVy
aWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRl
b0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBl
KE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxp
ZENvbnN0cmFpbnQpOwogICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50
c0Vycm9yKGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB2aWRlb1NvdXJj
ZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBlQW5k
Q29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdl
dCgpKTsKKyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiB2aWRlb1NvdXJjZSA9IEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29u
c3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgp
KTsKICAgICAgICAgQVNTRVJUKHZpZGVvU291cmNlKTsKICAgICAgICAgCiAgICAgICAgIHZpZGVv
U291cmNlcy5hcHBlbmQodmlkZW9Tb3VyY2UucmVsZWFzZSgpKTsKQEAgLTEyOCw3ICsxMjgsNyBA
QCBib29sIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpnZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtVHJhYwogewogICAgIFJlZlB0cjxNZWRpYVN0cmVhbVRyYWNr
U291cmNlc1JlcXVlc3RDbGllbnQ+IHJlcXVlc3RDbGllbnQgPSBwcnBDbGllbnQ7CiAKLSAgICBW
ZWN0b3I8UmVmUHRyPFRyYWNrU291cmNlSW5mbz4+IHNvdXJjZXMgPSBBVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyOjpzaGFyZWQoKS5nZXRTb3VyY2VzSW5mbyhyZXF1ZXN0Q2xpZW50LT5yZXF1ZXN0T3Jp
Z2luKCkpOworICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291cmNlcyA9IEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmdldFNvdXJjZXNJbmZvKHJlcXVlc3RD
bGllbnQtPnJlcXVlc3RPcmlnaW4oKSk7CiAKICAgICByZXF1ZXN0Q2xpZW50LT5kaWRDb21wbGV0
ZVJlcXVlc3Qoc291cmNlcyk7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAKaW5kZXggODVlYTY2NzFj
MDIwNzk3NDE5YTVkNGFjMzQ2ZTVjODUzM2I4NWJjMi4uMzcwNmI1YzM4MGI0MTNjZmMxYjhlMTY0
NTJjYTkxYjg4ZTIyMTE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ETlNSZXNvbHZlUXVldWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmNwcApAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgY29uc3Qg
aW50IGdNYXhSZXF1ZXN0c1RvUXVldWUgPSA2NDsKIC8vIElmIHRoZXJlIHdlcmUgcXVldWVkIG5h
bWVzIHRoYXQgY291bGRuJ3QgYmUgc2VudCBzaW11bHRhbmVvdXNseSwgY2hlY2sgdGhlIHN0YXRl
IG9mIHJlc29sdmVycyBhZnRlciB0aGlzIGRlbGF5Lgogc3RhdGljIGNvbnN0IGRvdWJsZSBnUmV0
cnlSZXNvbHZpbmdJblNlY29uZHMgPSAwLjE7CiAKLUROU1Jlc29sdmVRdWV1ZSYgRE5TUmVzb2x2
ZVF1ZXVlOjpzaGFyZWQoKQorRE5TUmVzb2x2ZVF1ZXVlJiBETlNSZXNvbHZlUXVldWU6OnNpbmds
ZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEROU1Jlc29sdmVRdWV1ZT4gcXVl
dWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVz
b2x2ZVF1ZXVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVR
dWV1ZS5oCmluZGV4IGNkOWJhMGZjMGUyYTU2ZWY0ZGFhNGZiOTY2ZDdjOWU0MzI5NDBjYmYuLjI3
ZjAwZDhiZDAxOTM3NjA2MDI5ZTc3YThlMzc1Mzc5OGU3OTVlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuaApAQCAtMzksNyArMzks
NyBAQCBjbGFzcyBETlNSZXNvbHZlUXVldWUgewogICAgIGZyaWVuZCBOZXZlckRlc3Ryb3llZDxE
TlNSZXNvbHZlUXVldWU+OwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIEROU1Jlc29sdmVRdWV1ZSYg
c2hhcmVkKCk7CisgICAgc3RhdGljIEROU1Jlc29sdmVRdWV1ZSYgc2luZ2xldG9uKCk7CiAKICAg
ICB2b2lkIGFkZChjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKICAgICB2b2lkIGRlY3JlbWVudFJl
cXVlc3RDb3VudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2NmL0ROU0NGTmV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5T
Q0ZOZXQuY3BwCmluZGV4IGJkNDA1NzJkOWYxYjBiODRmNTBiM2EwY2E5ZTQwZGMyMzFhNjA1MDMu
LmU2ZmVhNmQwZGQ2NzNkNmQ3NTRlMWU5Y2Q4ZjE0YmQxYTE3MWI1MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwCkBAIC03Nyw3ICs3Nyw3
IEBAIGJvb2wgRE5TUmVzb2x2ZVF1ZXVlOjpwbGF0Zm9ybVByb3h5SXNFbmFibGVkSW5TeXN0ZW1Q
cmVmZXJlbmNlcygpCiAKIHN0YXRpYyB2b2lkIGNsaWVudENhbGxiYWNrKENGSG9zdFJlZiB0aGVI
b3N0LCBDRkhvc3RJbmZvVHlwZSwgY29uc3QgQ0ZTdHJlYW1FcnJvciosIHZvaWQqKQogewotICAg
IEROU1Jlc29sdmVRdWV1ZTo6c2hhcmVkKCkuZGVjcmVtZW50UmVxdWVzdENvdW50KCk7IC8vIEl0
J3Mgb2sgdG8gY2FsbCBzaGFyZWQoKSBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgdGhlIHN0YXRp
YyB2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGJ5IG5vdy4KKyAgICBETlNS
ZXNvbHZlUXVldWU6OnNpbmdsZXRvbigpLmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOyAvLyBJdCdz
IG9rIHRvIGNhbGwgc2luZ2xldG9uKCkgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQsIHRoZSBzdGF0
aWMgdmFyaWFibGUgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZCBieSBub3cuCiAgICAgQ0ZS
ZWxlYXNlKHRoZUhvc3QpOwogfQogCkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBwcmVmZXRjaERO
Uyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAg
ICAgaWYgKGhvc3RuYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEROU1Jlc29s
dmVRdWV1ZTo6c2hhcmVkKCkuYWRkKGhvc3RuYW1lKTsKKyAgICBETlNSZXNvbHZlUXVldWU6OnNp
bmdsZXRvbigpLmFkZChob3N0bmFtZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcAppbmRleCBjYTQxNDg0N2Y1ZjlkZTEwYTc3
YmFiNjEwYjljNWY0Yzg5ZWRlNzU5Li5hNGZiMjRiZDY2N2I4NTAyMDA3NDAwMWJmOWUwNDg5OTlm
Y2FhNDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
RE5TU291cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0RO
U1NvdXAuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIGJvb2wgRE5TUmVzb2x2ZVF1ZXVlOjpwbGF0Zm9y
bVByb3h5SXNFbmFibGVkSW5TeXN0ZW1QcmVmZXJlbmNlcygpCiAKIHN0YXRpYyB2b2lkIHJlc29s
dmVkQ2FsbGJhY2soU291cEFkZHJlc3MqLCBndWludCwgdm9pZCopCiB7Ci0gICAgRE5TUmVzb2x2
ZVF1ZXVlOjpzaGFyZWQoKS5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsKKyAgICBETlNSZXNvbHZl
UXVldWU6OnNpbmdsZXRvbigpLmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOwogfQogCiB2b2lkIERO
U1Jlc29sdmVRdWV1ZTo6cGxhdGZvcm1SZXNvbHZlKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgcHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkK
ICAgICBpZiAoaG9zdG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBETlNS
ZXNvbHZlUXVldWU6OnNoYXJlZCgpLmFkZChob3N0bmFtZSk7CisgICAgRE5TUmVzb2x2ZVF1ZXVl
OjpzaW5nbGV0b24oKS5hZGQoaG9zdG5hbWUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKaW5kZXggYjNkMWFhODQ5ZjAyZWFkY2E3ZGFlODIwZmI2MDFmNmI2NWEwMjg2
Ni4uODdkZTc1Njk2NzI1NDFkNzIwNGEzMTI5ZWJkYTQ3OWIwMTJjOWViMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMzA0LDcgKzMwNCw3IEBAIHZvaWQgSW50ZXJuYWxz
OjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UqIHBhZ2UpCiAgICAgQVhPYmplY3RDYWNoZTo6
ZGlzYWJsZUFjY2Vzc2liaWxpdHkoKTsKICNlbmRpZgogCi0gICAgTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50OjpzaGFyZWQoKS51bmluc3RhbGxBbGxPdmVybGF5cygpOworICAgIE1vY2tQYWdlT3Zlcmxh
eUNsaWVudDo6c2luZ2xldG9uKCkudW5pbnN0YWxsQWxsT3ZlcmxheXMoKTsKIH0KIAogSW50ZXJu
YWxzOjpJbnRlcm5hbHMoRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMjQzMSw3ICsyNDMxLDcgQEAg
dm9pZCBJbnRlcm5hbHM6Omluc3RhbGxNb2NrUGFnZU92ZXJsYXkoY29uc3QgU3RyaW5nJiBvdmVy
bGF5VHlwZSwgRXhjZXB0aW9uQ29kZSYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIE1v
Y2tQYWdlT3ZlcmxheUNsaWVudDo6c2hhcmVkKCkuaW5zdGFsbE92ZXJsYXkoZG9jdW1lbnQtPmZy
YW1lKCktPm1haW5GcmFtZSgpLCBvdmVybGF5VHlwZSA9PSAidmlldyIgPyBQYWdlT3ZlcmxheTo6
T3ZlcmxheVR5cGU6OlZpZXcgOiBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsK
KyAgICBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNpbmdsZXRvbigpLmluc3RhbGxPdmVybGF5KGRv
Y3VtZW50LT5mcmFtZSgpLT5tYWluRnJhbWUoKSwgb3ZlcmxheVR5cGUgPT0gInZpZXciID8gUGFn
ZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpWaWV3IDogUGFnZU92ZXJsYXk6Ok92ZXJsYXlUeXBlOjpE
b2N1bWVudCk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OnBhZ2VPdmVybGF5TGF5ZXJUcmVlQXNU
ZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdApAQCAtMjQ0NCw3ICsyNDQ0LDcgQEAgU3RyaW5n
IEludGVybmFsczo6cGFnZU92ZXJsYXlMYXllclRyZWVBc1RleHQoRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAKLSAgICByZXR1cm4gTW9j
a1BhZ2VPdmVybGF5Q2xpZW50OjpzaGFyZWQoKS5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQtPmZy
YW1lKCktPm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gTW9ja1BhZ2VPdmVybGF5Q2xpZW50Ojpz
aW5nbGV0b24oKS5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQtPmZyYW1lKCktPm1haW5GcmFtZSgp
KTsKIH0KIAogdm9pZCBJbnRlcm5hbHM6OnNldFBhZ2VNdXRlZChib29sIG11dGVkKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCmluZGV4IGJl
MDljM2Q2MDZjMWQxYWNlN2QyOTFiNjY5ZDEwMDVmZjYwMWUzYzUuLjYxZjE5YmYxNjUwMWE5ZGZm
MTZkN2I5ZTg5ODIwNDg0ZTIxMTE1ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1Nb2NrUGFnZU92ZXJsYXlDbGllbnQmIE1vY2tQYWdlT3ZlcmxheUNsaWVu
dDo6c2hhcmVkKCkKK01vY2tQYWdlT3ZlcmxheUNsaWVudCYgTW9ja1BhZ2VPdmVybGF5Q2xpZW50
OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxNb2NrUGFnZU92ZXJs
YXlDbGllbnQ+IHNoYXJlZENsaWVudDsKICAgICByZXR1cm4gc2hhcmVkQ2xpZW50LmdldCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmgKaW5kZXgg
N2Q0NjNmMjM2ODI4MjgzYmQ3YWE0YWJhODZiYWVhMGYzOGNhZTg5NC4uMWRkMjk3YjM5YTBkNzM4
YjdjMTQyMmRhYjQ3YjkxMjRhYWRiMWZiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tQYWdlT3ZlcmxheUNsaWVudC5oCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIE1haW5GcmFt
ZTsKIGNsYXNzIE1vY2tQYWdlT3ZlcmxheUNsaWVudCBmaW5hbCA6IHB1YmxpYyBQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8TW9ja1BhZ2VPdmVy
bGF5Q2xpZW50PjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTW9ja1BhZ2VPdmVybGF5Q2xpZW50JiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgTW9ja1BhZ2VPdmVybGF5Q2xpZW50JiBzaW5nbGV0b24oKTsK
IAogICAgIGV4cGxpY2l0IE1vY2tQYWdlT3ZlcmxheUNsaWVudCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKaW5kZXggMGZiZWIxZDcxNGM4NDE1YzI2MDM2ZWQwZTMy
YzA5ZWUwZjVhNmIzYS4uM2MyZGNhNTUxY2E0NmYyZGM2MGQxZWYyNjA0YmZhNzhiMzFlZDFjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcApAQCAtMTQxLDcgKzE0MSw3
IEBAIHZvaWQgV29ya2VyVGhyZWFkOjp3b3JrZXJUaHJlYWQoKQogewogICAgIC8vIFByb3BhZ2F0
ZSB0aGUgbWFpblRocmVhZCdzIGZlbnYgdG8gd29ya2Vycy4KICNpZiBQTEFURk9STShJT1MpCi0g
ICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFyZWQoKS5wcm9wYWdhdGVNYWluVGhyZWFk
RW52aXJvbm1lbnQoKTsKKyAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigp
LnByb3BhZ2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogI2VuZGlmCiAKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKaW5kZXggNmJlODI5
YWI0NDMzYjc5NThiYjljMjg2YjI4ZmQ2Mzg0ZTRlZDA1Yi4uZDE1MGVjYTQ0YzkxMDU2MWYwMTFi
MDFjZjQyZjcyODUzZGI2MWFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dl
YkRhdGFiYXNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRh
YmFzZVByb3ZpZGVyLmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAotV2ViRGF0YWJhc2VQcm92aWRlciYgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKCkK
K1dlYkRhdGFiYXNlUHJvdmlkZXImIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpCiB7
CiAgICAgc3RhdGljIFdlYkRhdGFiYXNlUHJvdmlkZXImIGRhdGFiYXNlUHJvdmlkZXIgPSBhZG9w
dFJlZigqbmV3IFdlYkRhdGFiYXNlUHJvdmlkZXIpLmxlYWtSZWYoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJL
aXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKaW5kZXggMzJkYzI3YTEyNmQ5OWQzYTgy
NDMxYmJjZTEwMzBjNmE4OTE1NjQzZC4uY2EyMTE4MGQ3NDczODNlOTI4MzcxYmZmNDE4YWRiMGQ2
NjY0YTAwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJv
dmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5o
CkBAIC0zMiw3ICszMiw3IEBACiBjbGFzcyBXZWJEYXRhYmFzZVByb3ZpZGVyIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OkRhdGFiYXNlUHJvdmlkZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRl
c3Ryb3llZDxXZWJEYXRhYmFzZVByb3ZpZGVyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2ViRGF0
YWJhc2VQcm92aWRlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFdlYkRhdGFiYXNlUHJvdmlkZXIm
IHNpbmdsZXRvbigpOwogICAgIHZpcnR1YWwgfldlYkRhdGFiYXNlUHJvdmlkZXIoKTsKIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0hpc3RvcnkvV2ViQmFja0Zvcndh
cmRMaXN0Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3Qu
bW0KaW5kZXggNmI0NTAwMjFjNDI3ODYyNjM2MzI5MTM2MzEwMjc3MmMyNWMxMmUxZi4uZWJmYmQ0
ZDAwNDEwMjNjMjVjMmM2OWU4NDc5MDgyYzhjNDI2MzU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KKysrIGIvU291cmNlL1dlYktp
dC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0KQEAgLTM1NSw3ICszNTUsNyBAQCBz
dGF0aWMgYm9vbCBidW1wZXJDYXJCYWNrRm9yd2FyZEhhY2tOZWVkZWQoKQogCiAtIChOU1VJbnRl
Z2VyKXBhZ2VDYWNoZVNpemUKIHsKLSAgICByZXR1cm4gW2tpdChjb3JlKHNlbGYpLT5wYWdlKCkp
IHVzZXNQYWdlQ2FjaGVdID8gUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkgOiAwOworICAg
IHJldHVybiBba2l0KGNvcmUoc2VsZiktPnBhZ2UoKSkgdXNlc1BhZ2VDYWNoZV0gPyBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLm1heFNpemUoKSA6IDA7CiB9CiAKIC0gKGludCliYWNrTGlzdENvdW50
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tIGIvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRleCBiYWVlM2QwNzU3MGJiM2QzZGMxZWRi
NzhlMzIyYzgwOGU4MDI1NzExLi40NDMxYTkwMDFhOTk0YTljYzczYjViZWU2ODQzOWI1OWQ3OWJi
MDNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KQEAgLTEyMiw3ICsxMjIsNyBAQAog
ICAgIFdlYkNvcmU6OmNhY2hlU3RvcmFnZSgpLmVtcHR5KCk7CiAKICAgICAvLyBFbXB0eSB0aGUg
Q3Jvc3MtT3JpZ2luIFByZWZsaWdodCBjYWNoZQotICAgIFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmVtcHR5KCk7CisgICAgV2ViQ29yZTo6Q3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuZW1wdHkoKTsKIH0KIAogI2lm
IFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29y
ZVN0YXRpc3RpY3MubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNz
Lm1tCmluZGV4IDU2M2VjOGU5OTA2ZDhhZDgxNTY3OTE2NjFiZjQwOTdlNWRiOTFjYjYuLmU4ZGNi
MjQ0MjJkZWRiYjg0YWNiOWU4MTRlYzNhYTZlZDdhNGRkZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQpAQCAtMjI0LDEyICsyMjQsMTIgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKICsgKGludCljYWNoZWRQYWdlQ291bnQKIHsKLSAgICByZXR1
cm4gUGFnZUNhY2hlOjpzaGFyZWQoKS5wYWdlQ291bnQoKTsKKyAgICByZXR1cm4gUGFnZUNhY2hl
OjpzaW5nbGV0b24oKS5wYWdlQ291bnQoKTsKIH0KIAogKyAoaW50KWNhY2hlZEZyYW1lQ291bnQK
IHsKLSAgICByZXR1cm4gUGFnZUNhY2hlOjpzaGFyZWQoKS5mcmFtZUNvdW50KCk7CisgICAgcmV0
dXJuIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuZnJhbWVDb3VudCgpOwogfQogCiAvLyBEZXByZWNh
dGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2Fw
ZVBsdWdpbkhvc3RNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9O
ZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgKaW5kZXggMTQ4NmQ5MmQ3NDZlMTg0YzRhMjcyOGVl
ZDJiNWM5NjY5NGVmNGRhZS4uZmNiMjIwYWFjNjkwNzk1NmVkZjNmMTcxMzQ0ZTA0NmU2OTVlNjJm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaApAQCAtNDIsNyArNDIsNyBAQCBjbGFzcyBOZXRz
Y2FwZVBsdWdpbkhvc3RQcm94eTsKIAogY2xhc3MgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIHNoYXJlZCgp
OworICAgIHN0YXRpYyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyJiBzaW5nbGV0b24oKTsKICAg
ICAKICAgICBQYXNzUmVmUHRyPE5ldHNjYXBlUGx1Z2luSW5zdGFuY2VQcm94eT4gaW5zdGFudGlh
dGVQbHVnaW4oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBjcHVfdHlwZV90IHBsdWdpbkFyY2hp
dGVjdHVyZSwgY29uc3QgU3RyaW5nJiBidW5kbGVJZGVudGlmaWVyLCBXZWJIb3N0ZWROZXRzY2Fw
ZVBsdWdpblZpZXcgKiwgTlNTdHJpbmcgKm1pbWVUeXBlLCBOU0FycmF5ICphdHRyaWJ1dGVLZXlz
LCBOU0FycmF5ICphdHRyaWJ1dGVWYWx1ZXMsIE5TU3RyaW5nICp1c2VyQWdlbnQsIE5TVVJMICpz
b3VyY2VVUkwsIGJvb2wgZnVsbEZyYW1lLCBib29sIGlzUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwg
Ym9vbCBpc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkLCBib29sIGhvc3RMYXllcnNJbldp
bmRvd1NlcnZlcik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVn
aW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCmluZGV4IDFmOWZhY2JiZGYy
MDU0ODk3YWU2MTcxYWM1MTgwYmU5N2YwZWU3OGQuLjQwZWNiMjA2MjM1YWRmZjZlNzVmYzM0OGMx
OWYwMDQ1YzAxZTRlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQpAQCAtNDksNyArNDks
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJl
ZCgpCitOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyJiBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpzaW5nbGV0b24oKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyLCBwbHVnaW5Ib3N0TWFuYWdlciwgKCkpOwogICAgIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5tbQppbmRleCA1NzA1Y2ZiM2IxN2VlOGEyNWM4NDc0NTcyZDMyZWIzMjZm
NDRiOTFmLi45Y2Q2NTVjOWY3MTA1MzVhOWRmMmFmNDU3ZDcwNDQ2YTZkOWI2ZTY3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQ
cm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5tbQpAQCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgTmV0c2NhcGVQbHVnaW5I
b3N0UHJveHk6OnBsdWdpbkhvc3REaWVkKCkKICAgICBmb3IgKFBsdWdpbkluc3RhbmNlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IGluc3RhbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAg
ICAgICAgIGl0LT52YWx1ZS0+cGx1Z2luSG9zdERpZWQoKTsKICAgICAKLSAgICBOZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyOjpzaGFyZWQoKS5wbHVnaW5Ib3N0RGllZCh0aGlzKTsKKyAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Ib3N0RGllZCh0aGlzKTsK
ICAgICAKICAgICAvLyBUaGUgcGx1Zy1pbiBjcmFzaGVkIHdoaWxlIGl0cyBtZW51IGJhciB3YXMg
aGlkZGVuLiBNYWtlIHN1cmUgdG8gc2hvdyBpdC4KICAgICBpZiAoIW1fbWVudUJhcklzVmlzaWJs
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3Rl
ZE5ldHNjYXBlUGx1Z2luVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQppbmRleCBlNDI5N2ZhZWIyZmFiNzllMTUz
YzZjYjdjNTA2NzU3YTExYjIxMWQ5Li43NjAwNTgzNjkwZDc5NjBjNWQ4YTU5YTczZTcyZDAyNWRi
MmNmZjM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJI
b3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lu
cy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCkBAIC0xMzAsNyArMTMwLDcg
QEAgZXh0ZXJuICJDIiB7CiAgICAgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQgPSBbW1tz
ZWxmIHdlYlZpZXddIHByZWZlcmVuY2VzXSBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZF07
CiAgICAgX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIgPSBbc2VsZiB3aW5kb3dIb3N0c0xheWVy
c0luV2luZG93U2VydmVyXTsKIAotICAgIF9wcm94eSA9IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXI6OnNoYXJlZCgpLmluc3RhbnRpYXRlUGx1Z2luKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwYXRo
XSwgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmVdLCBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0sIHNlbGYsIF9NSU1FVHlwZS5nZXQoKSwg
X2F0dHJpYnV0ZUtleXMuZ2V0KCksIF9hdHRyaWJ1dGVWYWx1ZXMuZ2V0KCksIHVzZXJBZ2VudCwg
X3NvdXJjZVVSTC5nZXQoKSwKKyAgICBfcHJveHkgPSBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2Vy
OjpzaW5nbGV0b24oKS5pbnN0YW50aWF0ZVBsdWdpbihbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGF0
aF0sIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwbHVnaW5Ib3N0QXJjaGl0ZWN0dXJlXSwgW19wbHVn
aW5QYWNrYWdlLmdldCgpIGJ1bmRsZUlkZW50aWZpZXJdLCBzZWxmLCBfTUlNRVR5cGUuZ2V0KCks
IF9hdHRyaWJ1dGVLZXlzLmdldCgpLCBfYXR0cmlidXRlVmFsdWVzLmdldCgpLCB1c2VyQWdlbnQs
IF9zb3VyY2VVUkwuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX21vZGUgPT0gTlBfRlVMTCwgX2lzUHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZCwgYWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIF9ob3N0c0xh
eWVyc0luV2luZG93U2VydmVyKTsKICAgICBpZiAoIV9wcm94eSkgCiAgICAgICAgIHJldHVybiBO
TzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvV2ViTmV0c2NhcGVQbHVn
aW5QYWNrYWdlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blBhY2thZ2UubW0KaW5kZXggOWUzNDU4MmE0NmE3MjE0MjhiOWJhZmFlODYxZDFjY2IwMTFjZTM5
OS4uMTkwNmVmMzY3ZGI1NGE2Y2EyYThiZDE0NTMzODIyYTkxMmU2NmI4ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0KKysr
IGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0K
QEAgLTIyMSw3ICsyMjEsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLSAodm9pZClj
cmVhdGVQcm9wZXJ0eUxpc3RGaWxlCiB7Ci0gICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6
c2hhcmVkKCkuY3JlYXRlUHJvcGVydHlMaXN0RmlsZShwYXRoLCBwbHVnaW5Ib3N0QXJjaGl0ZWN0
dXJlLCBbc2VsZiBidW5kbGVJZGVudGlmaWVyXSk7CisgICAgTmV0c2NhcGVQbHVnaW5Ib3N0TWFu
YWdlcjo6c2luZ2xldG9uKCkuY3JlYXRlUHJvcGVydHlMaXN0RmlsZShwYXRoLCBwbHVnaW5Ib3N0
QXJjaGl0ZWN0dXJlLCBbc2VsZiBidW5kbGVJZGVudGlmaWVyXSk7CiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1t
CmluZGV4IGM1MGJjMmE0Yzc3ODZiNzFhMTA3NGRiYzdmZGM0MTU2NjliY2Y0NDguLjgzZDQ4NjU5
NDFhZmM3NjEwNWU3MzlhOGU5ZGJhOWU1MzRhMmRjMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0KQEAgLTI5Nyw3ICsyOTcs
NyBAQCBQYWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsIGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdAogCiAjaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NF
U1MpICYmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmIChuZXdXZWJWaWV3KQot
ICAgICAgICBXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLmRpZENy
ZWF0ZVdpbmRvdygpOworICAgICAgICBXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNpbmdsZXRvbigpLmRpZENyZWF0ZVdpbmRvdygpOwogI2VuZGlmCiAgICAgCiAgICAgcmV0dXJu
IGNvcmUobmV3V2ViVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCmluZGV4IDg0NDcxNjQzMTRkNTU0ZjQ1
NjkxZTljMjI5OGM2ZTRkYzNmYmIwNTQuLmUxZjM3ZGJiMDVmYTMyNWYzNzA1ZTc5NDcyYmRiNTgw
MjNjNmU0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tCkBAIC04NDIsNyArODQyLDcgQEAgRnJhbWUqIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaENyZWF0ZVBhZ2UoY29uc3QgTmF2aWdhdGlvbkFj
dGlvbiYpCiAgICAgCiAjaWYgVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpICYmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIGlmIChuZXdXZWJWaWV3KQotICAgICAgICBXZWJLaXQ6Ok5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLmRpZENyZWF0ZVdpbmRvdygpOworICAg
ICAgICBXZWJLaXQ6Ok5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpLmRpZENy
ZWF0ZVdpbmRvdygpOwogI2VuZGlmCiAgICAgICAgIAogICAgIHJldHVybiBjb3JlKFtuZXdXZWJW
aWV3IG1haW5GcmFtZV0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0KaW5kZXggNGYyZTIyMTcwMjVlZTU3YTFmYTM0
ODEyYmU2ZGZmY2RlMjljYmQ1NC4uMzMyZjZlYjAwMTkxOTY0Y2IyNjllZTEyZTBjZDRmNjFlNmZh
YmYxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlz
aXRlZExpbmtTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJWaXNpdGVkTGlua1N0b3JlLm1tCkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgV2ViVmlzaXRlZExp
bmtTdG9yZTo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKIHsKICAgICBmb3IgKGF1dG8mIHZpc2l0
ZWRMaW5rU3RvcmUgOiB2aXNpdGVkTGlua1N0b3JlcygpKQogICAgICAgICB2aXNpdGVkTGlua1N0
b3JlLT5yZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lk
IFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKE5TU3RyaW5nICp1cmxTdHJpbmcp
CkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNp
dGVkTGluayhOU1N0cmluZyAqdXJsU3RyaW5nKQogICAgIG1fdmlzaXRlZExpbmtIYXNoZXMucmVt
b3ZlKGxpbmtIYXNoKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKGxpbmtIYXNoKTsK
LSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNh
bGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5r
U3R5bGVSZWNhbGMoKTsKIH0KIAogYm9vbCBXZWJWaXNpdGVkTGlua1N0b3JlOjppc0xpbmtWaXNp
dGVkKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtIYXNoLCBjb25zdCBVUkwmIGJhc2VVUkwsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQg
V2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNo
KQogICAgIG1fdmlzaXRlZExpbmtIYXNoZXMuYWRkKGxpbmtIYXNoKTsKIAogICAgIGludmFsaWRh
dGVTdHlsZXNGb3JMaW5rKGxpbmtIYXNoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQ
YWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRv
bigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBXZWJW
aXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggMGMwNWYyYzUwODg4MGRhODlkZDQ0ZWQ0MmQ4MTg1MjNj
M2U0MWYzZS4uNWM2ZmQ2NDU5MzY0OWQwMDE0ZDE3ZGE5YjY2OTZhZWZhMjUyMmMyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtODQ5LDcgKzg0OSw3IEBAIHN0YXRpYyB2
b2lkIFdlYktpdEluaXRpYWxpemVHYW1lcGFkUHJvdmlkZXJJZk5lY2Vzc2FyeSgpCiAgICAgaWYg
KGluaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnNldFNoYXJlZFByb3ZpZGVyKEhJREdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkpOwor
ICAgIEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkuc2V0U2hhcmVkUHJvdmlkZXIoSElER2Ft
ZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKSk7CiAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwogfQog
I2VuZGlmCkBAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUdh
bWVwYWRQcm92aWRlcklmTmVjZXNzYXJ5KCkKICAgICBwYWdlQ29uZmlndXJhdGlvbi5hbHRlcm5h
dGl2ZVRleHRDbGllbnQgPSBuZXcgV2ViQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KHNlbGYpOwogICAg
IHBhZ2VDb25maWd1cmF0aW9uLmxvYWRlckNsaWVudEZvck1haW5GcmFtZSA9IG5ldyBXZWJGcmFt
ZUxvYWRlckNsaWVudDsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGll
bnQgPSBuZXcgV2ViUHJvZ3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwotICAgIHBhZ2VDb25maWd1
cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKCk7
CisgICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVBy
b3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIo
KTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSAmX3ByaXZh
dGUtPmdyb3VwLT51c2VyQ29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlv
bi52aXNpdGVkTGlua1N0b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExpbmtTdG9yZSgp
OwpAQCAtMTE5MCw3ICsxMTkwLDcgQEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUdhbWVw
YWRQcm92aWRlcklmTmVjZXNzYXJ5KCkKICAgICBwYWdlQ29uZmlndXJhdGlvbi5pbnNwZWN0b3JD
bGllbnQgPSBuZXcgV2ViSW5zcGVjdG9yQ2xpZW50KHNlbGYpOwogICAgIHBhZ2VDb25maWd1cmF0
aW9uLmxvYWRlckNsaWVudEZvck1haW5GcmFtZSA9IG5ldyBXZWJGcmFtZUxvYWRlckNsaWVudDsK
ICAgICBwYWdlQ29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBuZXcgV2ViUHJv
Z3Jlc3NUcmFja2VyQ2xpZW50KHNlbGYpOwotICAgIHBhZ2VDb25maWd1cmF0aW9uLmRhdGFiYXNl
UHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKCk7CisgICAgcGFnZUNvbmZp
Z3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0
b24oKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSAm
X3ByaXZhdGUtPmdyb3VwLT5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIoKTsKICAgICBwYWdlQ29u
ZmlndXJhdGlvbi51c2VyQ29udGVudENvbnRyb2xsZXIgPSAmX3ByaXZhdGUtPmdyb3VwLT51c2Vy
Q29udGVudENvbnRyb2xsZXIoKTsKICAgICBwYWdlQ29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0
b3JlID0gJl9wcml2YXRlLT5ncm91cC0+dmlzaXRlZExpbmtTdG9yZSgpOwpAQCAtMTg2OCwxMiAr
MTg2OCwxMiBAQCBzdGF0aWMgYm9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogI2lm
IEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogKyAodm9pZClfZW5hYmxlUmVtb3RlSW5zcGVjdG9y
CiB7Ci0gICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zdGFydCgpOworICAgIFJlbW90ZUlu
c3BlY3Rvcjo6c2luZ2xldG9uKCkuc3RhcnQoKTsKIH0KIAogKyAodm9pZClfZGlzYWJsZVJlbW90
ZUluc3BlY3RvcgogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc3RvcCgpOworICAg
IFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc3RvcCgpOwogfQogCiArICh2b2lkKV9kaXNh
YmxlQXV0b1N0YXJ0UmVtb3RlSW5zcGVjdG9yCkBAIC0xODgzLDEyICsxODgzLDEyIEBAIHN0YXRp
YyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAKICsgKEJPT0wpX2lzUmVtb3Rl
SW5zcGVjdG9yRW5hYmxlZAogewotICAgIHJldHVybiBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgp
LmVuYWJsZWQoKTsKKyAgICByZXR1cm4gUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5lbmFi
bGVkKCk7CiB9CiAKICsgKEJPT0wpX2hhc1JlbW90ZUluc3BlY3RvclNlc3Npb24KIHsKLSAgICBy
ZXR1cm4gUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5oYXNBY3RpdmVEZWJ1Z1Nlc3Npb24oKTsK
KyAgICByZXR1cm4gUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5oYXNBY3RpdmVEZWJ1Z1Nl
c3Npb24oKTsKIH0KIAogLSAoQk9PTClhbGxvd3NSZW1vdGVJbnNwZWN0aW9uCkBAIC0xOTI2LDcg
KzE5MjYsNyBAQCBzdGF0aWMgYm9vbCBmYXN0RG9jdW1lbnRUZWFyZG93bkVuYWJsZWQoKQogLSAo
dm9pZClfc2V0SG9zdEFwcGxpY2F0aW9uUHJvY2Vzc0lkZW50aWZpZXI6KHBpZF90KXBpZCBhdWRp
dFRva2VuOihhdWRpdF90b2tlbl90KWF1ZGl0VG9rZW4KIHsKICAgICBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBhdWRpdERhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZShudWxscHRyLCAoY29uc3QgVUlu
dDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKLSAgICBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpLnNldFBhcmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWQsIGF1ZGl0RGF0YSk7
CisgICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5zZXRQYXJlbnRQcm9jZXNzSW5mb3Jt
YXRpb24ocGlkLCBhdWRpdERhdGEpOwogfQogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKICNlbmRp
ZiAvLyBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKQEAgLTc5MTUsOSArNzkxNSw5IEBAIHN0YXRp
YyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQogCiAgICAg
bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1h
eERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNl
dERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNp
emUpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXpl
KTsKICNpZiBQTEFURk9STShJT1MpCi0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRTaG91bGRD
bGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRT
aG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7CiAgICAgbnN1cmxDYWNoZU1lbW9yeUNhcGFj
aXR5ID0gc3RkOjptYXgobnN1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCBbbnN1cmxDYWNoZSBtZW1v
cnlDYXBhY2l0eV0pOwogICAgIENGVVJMQ2FjaGVSZWYgY2ZDYWNoZTsKICAgICBpZiAoW25zdXJs
Q2FjaGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihfQ0ZVUkxDYWNoZSldICYmIChjZkNh
Y2hlID0gW25zdXJsQ2FjaGUgX0NGVVJMQ2FjaGVdKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvd2luL1dlYkNhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNhY2hlLmNwcAppbmRl
eCA3YzJjMGNmOTE1MzkxNzFhNjE1MTJhOTU1NmNkMWYyYjQ2NWZhOWFiLi5kYTI3MjZiNzExOTc0
YjEyMTFhNmQzZGFhYjE3ZWExOTM2NGFlZDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dp
bi9XZWJDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ2FjaGUuY3BwCkBAIC0y
MTUsNyArMjE1LDcgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJDYWNoZTo6ZW1wdHko
IHZvaWQpCiAgICAgV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuZW1wdHkoKTsKIAogICAgIC8vIEVt
cHR5IHRoZSBDcm9zcy1PcmlnaW4gUHJlZmxpZ2h0IGNhY2hlCi0gICAgV2ViQ29yZTo6Q3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuZW1wdHkoKTsKKyAgICBXZWJDb3Jl
OjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5lbXB0eSgpOwog
CiAgICAgcmV0dXJuIFNfT0s7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJD
b3JlU3RhdGlzdGljcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5j
cHAKaW5kZXggYjQzMDcxYzI1MjhkYTZlNzhlOGJkMTI3MTUxMGZjMTU3YjRhNzM3Yi4uMTY4MDI2
NWFkODJmOGZiYjI2NDI0M2Y2MTJhY2UwNmFiNjI2ZWY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdGF0aXN0aWNzLmNwcApAQCAtMzI3LDcgKzMyNyw3IEBAIEhSRVNVTFQgV2ViQ29yZVN0
YXRpc3RpY3M6OmNhY2hlZFBhZ2VDb3VudChJTlQqIGNvdW50KQogICAgIGlmICghY291bnQpCiAg
ICAgICAgIHJldHVybiBFX1BPSU5URVI7CiAKLSAgICAqY291bnQgPSBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLnBhZ2VDb3VudCgpOworICAgICpjb3VudCA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucGFn
ZUNvdW50KCk7CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTMzNiw2ICszMzYsNiBAQCBIUkVT
VUxUIFdlYkNvcmVTdGF0aXN0aWNzOjpjYWNoZWRGcmFtZUNvdW50KElOVCogY291bnQpCiAgICAg
aWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpjb3VudCA9IFBh
Z2VDYWNoZTo6c2hhcmVkKCkuZnJhbWVDb3VudCgpOworICAgICpjb3VudCA9IFBhZ2VDYWNoZTo6
c2luZ2xldG9uKCkuZnJhbWVDb3VudCgpOwogICAgIHJldHVybiBTX09LOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3Jl
LmNwcAppbmRleCA0OWMwMzc2MmU5N2M5YTFlN2JhZGIzNzRmYWYxYzZiMzE3MmY3YjVjLi5mZjMx
OGExY2EzZmM5ODYyMzZlYzA2YzhjYzNhNTM2ZDUwY2ViMTIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcApA
QCAtMzQsNyArMzQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogc3RhdGljIGJvb2wg
c19zaG91bGRUcmFja1Zpc2l0ZWRMaW5rczsKIAotV2ViVmlzaXRlZExpbmtTdG9yZSYgV2ViVmlz
aXRlZExpbmtTdG9yZTo6c2hhcmVkKCkKK1dlYlZpc2l0ZWRMaW5rU3RvcmUmIFdlYlZpc2l0ZWRM
aW5rU3RvcmU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdlYlZpc2l0ZWRMaW5rU3RvcmUm
IHZpc2l0ZWRMaW5rU3RvcmUgPSAqYWRvcHRSZWYobmV3IFdlYlZpc2l0ZWRMaW5rU3RvcmUpLmxl
YWtSZWYoKTsKICAgICAKQEAgLTYyLDggKzYyLDggQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3Jl
OjpzZXRTaG91bGRUcmFja1Zpc2l0ZWRMaW5rcyhib29sIHNob3VsZFRyYWNrVmlzaXRlZExpbmsK
IAogdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewot
ICAgIHNoYXJlZCgpLnJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7Ci0gICAgUGFnZUNhY2hlOjpz
aGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgc2luZ2xl
dG9uKCkucmVtb3ZlVmlzaXRlZExpbmtIYXNoZXMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRv
bigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBXZWJW
aXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGluayhjb25zdCBTdHJpbmcmIHVybFN0cmluZykK
QEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRM
aW5rSGFzaChMaW5rSGFzaCBsaW5rSGFzaCkKICAgICBtX3Zpc2l0ZWRMaW5rSGFzaGVzLmFkZChs
aW5rSGFzaCk7CiAKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7Ci0gICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7
CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxl
UmVjYWxjKCk7CiB9CiAKIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6cmVtb3ZlVmlzaXRlZExp
bmtIYXNoZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaXRlZExpbmtTdG9yZS5oIGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaXRlZExpbmtTdG9yZS5oCmluZGV4IDdlN2EwNzQ3NTEyYTA5NjlkNmZhYmQwODViODkw
NTI3YTliMTc1NzguLjY0YTk4MGYxZmE0NWM4MDRmZjY2NTdhNGVlZmEyYmE2ZDZhNjRmMWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5r
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVk
TGlua1N0b3JlLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogY2xhc3MgV2ViVmlzaXRlZExpbmtTdG9y
ZSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpWaXNpdGVkTGlua1N0b3JlIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgV2ViVmlzaXRlZExpbmtTdG9yZSYgc2hhcmVkKCk7CisgICAgc3RhdGljIFdlYlZp
c2l0ZWRMaW5rU3RvcmUmIHNpbmdsZXRvbigpOwogICAgIFdlYlZpc2l0ZWRMaW5rU3RvcmUoKTsK
ICAgICB2aXJ0dWFsIH5XZWJWaXNpdGVkTGlua1N0b3JlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAK
aW5kZXggZjRkNWU3ZjhhN2JjNzEzYjc4ZDg3NDdkMDZkMGNjYjE5YzcwZGRjNy4uOTlkMzUzYzAw
OTdmMjgwMzU4ZWJkYzM1ZjBlMDBlMzBlMjY0YWJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAKQEAg
LTY3NSw3ICs2NzUsNyBAQCB2b2lkIFdlYlZpZXc6OnNldENhY2hlTW9kZWwoV2ViQ2FjaGVNb2Rl
bCBjYWNoZU1vZGVsKQogCiAgICAgbWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWlu
RGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsK
ICAgICBtZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVh
ZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5z
ZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2V0
TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFVTRShDRk5FVFdPUkspCiAgICAgLy8gRG9u
J3Qgc2hyaW5rIGEgYmlnIGRpc2sgY2FjaGUsIHNpbmNlIHRoYXQgd291bGQgY2F1c2UgY2h1cm4u
CkBAIC0yODA1LDEwICsyODA1LDEwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViVmll
dzo6aW5pdFdpdGhGcmFtZSgKICAgICBjb25maWd1cmF0aW9uLmRyYWdDbGllbnQgPSBuZXcgV2Vi
RHJhZ0NsaWVudCh0aGlzKTsKICAgICBjb25maWd1cmF0aW9uLmluc3BlY3RvckNsaWVudCA9IG1f
aW5zcGVjdG9yQ2xpZW50OwogICAgIGNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZy
YW1lID0gbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50OwotICAgIGNvbmZpZ3VyYXRpb24uZGF0YWJh
c2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaGFyZWQoKTsKKyAgICBjb25maWd1
cmF0aW9uLmRhdGFiYXNlUHJvdmlkZXIgPSAmV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9u
KCk7CiAgICAgY29uZmlndXJhdGlvbi5zdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIgPSBXZWJTdG9y
YWdlTmFtZXNwYWNlUHJvdmlkZXI6OmNyZWF0ZShsb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgobV9w
cmVmZXJlbmNlcy5nZXQoKSkpOwogICAgIGNvbmZpZ3VyYXRpb24ucHJvZ3Jlc3NUcmFja2VyQ2xp
ZW50ID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVMb2FkZXJDbGllbnQqPihjb25maWd1cmF0aW9uLmxv
YWRlckNsaWVudEZvck1haW5GcmFtZSk7Ci0gICAgY29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0
b3JlID0gJldlYlZpc2l0ZWRMaW5rU3RvcmU6OnNoYXJlZCgpOworICAgIGNvbmZpZ3VyYXRpb24u
dmlzaXRlZExpbmtTdG9yZSA9ICZXZWJWaXNpdGVkTGlua1N0b3JlOjpzaW5nbGV0b24oKTsKIAog
ICAgIG1fcGFnZSA9IG5ldyBQYWdlKGNvbmZpZ3VyYXRpb24pOwogICAgIHByb3ZpZGVHZW9sb2Nh
dGlvblRvKG1fcGFnZSwgbmV3IFdlYkdlb2xvY2F0aW9uQ2xpZW50KHRoaXMpKTsKQEAgLTY0NjQs
NyArNjQ2NCw3IEBAIEhSRVNVTFQgV2ViVmlldzo6aGlzdG9yeURlbGVnYXRlKElXZWJIaXN0b3J5
RGVsZWdhdGUqKiBoaXN0b3J5RGVsZWdhdGUpCiAKIEhSRVNVTFQgV2ViVmlldzo6YWRkVmlzaXRl
ZExpbmtzKEJTVFIqIHZpc2l0ZWRVUkxzLCB1bnNpZ25lZCB2aXNpdGVkVVJMQ291bnQpCiB7Ci0g
ICAgYXV0byYgdmlzaXRlZExpbmtTdG9yZSA9IFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnNoYXJlZCgp
OworICAgIGF1dG8mIHZpc2l0ZWRMaW5rU3RvcmUgPSBXZWJWaXNpdGVkTGlua1N0b3JlOjpzaW5n
bGV0b24oKTsKICAgICBQYWdlR3JvdXAmIGdyb3VwID0gY29yZSh0aGlzKS0+Z3JvdXAoKTsKICAg
ICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdmlzaXRlZFVSTENvdW50OyArK2kpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5j
cHAKaW5kZXggODVhOTAwMDg3OWQ0MjhmNGI3NWUyZjA3MzJiZmZhNzJjZGI1MTRmZC4uOWU1OWVi
ZTNhMWY1ZjNlOWIwZjMyMGE3YjAzOTE2MDNmYmVlMTU4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAgLTQ3LDcgKzQ3LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1EYXRh
YmFzZVByb2Nlc3MmIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkKK0RhdGFiYXNlUHJvY2VzcyYg
RGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxEYXRhYmFzZVByb2Nlc3M+IGRhdGFiYXNlUHJvY2VzczsKICAgICByZXR1cm4gZGF0YWJhc2VQ
cm9jZXNzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFi
YXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJv
Y2Vzcy5oCmluZGV4IGIyYjI0ZWVhMTNmZmI4MWYzY2Y3OTA0N2RmYzcwMTg0NDNmNWFhMTYuLjZl
YWVlZGZhYjVkNjdiYmJiOTI0NThkMDFkMWI3Yjg3MDNjYjFmMzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKQEAgLTQ4LDcgKzQ4LDcg
QEAgY2xhc3MgRGF0YWJhc2VQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHVibGljIFdl
Yk9yaWdpbkRhdGFNYW5hZ2VyU3VwcGxlbWUKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEYXRh
YmFzZVByb2Nlc3MpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxEYXRhYmFzZVBy
b2Nlc3M+OwogcHVibGljOgotICAgIHN0YXRpYyBEYXRhYmFzZVByb2Nlc3MmIHNoYXJlZCgpOwor
ICAgIHN0YXRpYyBEYXRhYmFzZVByb2Nlc3MmIHNpbmdsZXRvbigpOwogICAgIH5EYXRhYmFzZVBy
b2Nlc3MoKTsKIAogICAgIGNvbnN0IFN0cmluZyYgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNz
SURCQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhl
ZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCmluZGV4IDhiZDA2YjNjOTFlOGNj
YmMwMjBiZDlhMDU5YmU4OGJiZWVhZmFmYmQuLjYwMzU4ODA2NzY5NzllZmQ4MjFmZTkxYWY4ODFi
ODU2ZGMyZjQ5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9J
bmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rp
b246OmRpc2Nvbm5lY3RlZEZyb21XZWJQcm9jZXNzKCkKIAogdm9pZCBEYXRhYmFzZVByb2Nlc3NJ
REJDb25uZWN0aW9uOjplc3RhYmxpc2hDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VO
YW1lLCBjb25zdCBTZWN1cml0eU9yaWdpbkRhdGEmIG9wZW5pbmdPcmlnaW4sIGNvbnN0IFNlY3Vy
aXR5T3JpZ2luRGF0YSYgbWFpbkZyYW1lT3JpZ2luKQogewotICAgIG1fdW5pcXVlSURCRGF0YWJh
c2UgPSBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLmdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJh
c2UoVW5pcXVlSURCRGF0YWJhc2VJZGVudGlmaWVyKGRhdGFiYXNlTmFtZSwgb3BlbmluZ09yaWdp
biwgbWFpbkZyYW1lT3JpZ2luKSk7CisgICAgbV91bmlxdWVJREJEYXRhYmFzZSA9IERhdGFiYXNl
UHJvY2Vzczo6c2luZ2xldG9uKCkuZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VOYW1lLCBvcGVuaW5nT3JpZ2luLCBtYWluRnJh
bWVPcmlnaW4pKTsKICAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlLT5yZWdpc3RlckNvbm5lY3Rpb24o
KnRoaXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
SW5kZXhlZERCL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IGIzMDEyMjVhMGEw
YmJiYzU0YzJiZmJiM2UxMmE4OGYxNTAxNjRmMTYuLjE1YzdmMTFkYzA3MjdjNzhmYTlhMzZkNzBi
MjVmZDk3ZWE2NTI3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC02OSw3ICs2
OSw3IEBAIFVuaXF1ZUlEQkRhdGFiYXNlOjpVbmlxdWVJREJEYXRhYmFzZShjb25zdCBVbmlxdWVJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpCiAgICAgLy8gRWFjaCB1bmlxdWUgSW5kZXhl
ZCBEYXRhYmFzZSBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZm9yIHRoZSBkYXRhYmFzZSwg
d2hpY2ggZXhpc3RzIGluIGEgZGlyZWN0b3J5IHJlcHJlc2VudGluZyBpdHMgb3BlbmluZyBvcmln
aW4uCiAgICAgbV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5ID0gcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGRhdGFiYXNlRmlsZW5hbWVJZGVudGlmaWVyKGlkZW50aWZpZXIub3BlbmluZ09yaWdp
bigpKSwgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSk7CiAKLSAgICBEYXRhYmFzZVByb2Nlc3M6
OnNoYXJlZCgpLmVuc3VyZUluZGV4ZWREYXRhYmFzZVJlbGF0aXZlUGF0aEV4aXN0cyhtX2RhdGFi
YXNlUmVsYXRpdmVEaXJlY3RvcnkpOworICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKG1fZGF0YWJhc2VSZWxhdGl2
ZURpcmVjdG9yeSk7CiB9CiAKIFVuaXF1ZUlEQkRhdGFiYXNlOjp+VW5pcXVlSURCRGF0YWJhc2Uo
KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnVucmVnaXN0ZXJD
b25uZWN0aW9uKERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24mIGNvbm5lCiAKICAgICBpZiAo
bV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3Mu
aXNFbXB0eSgpKSB7CiAgICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25U
eXBlOjpOb3JtYWxTaHV0ZG93bik7Ci0gICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCku
cmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOworICAgICAgICBEYXRhYmFzZVByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICB9CiB9CiAK
QEAgLTExMjUsNyArMTEyNSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZpbmFsaXplUm9s
bGJhY2soY29uc3QgV2ViS2l0OjpJREJJZGVudGlmaWVyJiB0cmFuc2FjdGlvCiAgICAgICAgIHJl
c2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JZCwgW3RoaXMsIHRyYW5zYWN0aW9uSWRdKGJvb2wp
IHsKICAgICAgICAgICAgIGlmIChtX2FjY2VwdGluZ05ld1JlcXVlc3RzICYmIG1fY29ubmVjdGlv
bnMuaXNFbXB0eSgpICYmIG1fcGVuZGluZ1RyYW5zYWN0aW9uUm9sbGJhY2tzLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgICAgIHNodXRkb3duKFVuaXF1ZUlEQkRhdGFiYXNlU2h1dGRvd25UeXBl
OjpOb3JtYWxTaHV0ZG93bik7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFy
ZWQoKS5yZW1vdmVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAgICAgICAgICAgRGF0
YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTEzNCw3ICsxMTM0LDcg
QEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluYWxpemVSb2xsYmFjayhjb25zdCBXZWJLaXQ6
OklEQklkZW50aWZpZXImIHRyYW5zYWN0aW8KIFN0cmluZyBVbmlxdWVJREJEYXRhYmFzZTo6YWJz
b2x1dGVEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6Omlz
TWFpbigpKTsKLSAgICByZXR1cm4gRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5hYnNvbHV0ZUlu
ZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgobV9kYXRhYmFzZVJlbGF0
aXZlRGlyZWN0b3J5KTsKKyAgICByZXR1cm4gRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5h
YnNvbHV0ZUluZGV4ZWREYXRhYmFzZVBhdGhGcm9tRGF0YWJhc2VSZWxhdGl2ZVBhdGgobV9kYXRh
YmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKIH0KIAogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6cG9z
dE1haW5UaHJlYWRUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2ssIERhdGFiYXNl
VGFza1R5cGUgdGFza1R5cGUpCkBAIC0xMTg5LDcgKzExODksNyBAQCB2b2lkIFVuaXF1ZUlEQkRh
dGFiYXNlOjpwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxBc3luY1Rhc2s+IHRhc2ss
IERhdGFiYQogICAgIG1fZGF0YWJhc2VUYXNrcy5hcHBlbmQoV1RGOjptb3ZlKHRhc2spKTsKIAog
ICAgIFJlZlB0cjxVbmlxdWVJREJEYXRhYmFzZT4gZGF0YWJhc2UodGhpcyk7Ci0gICAgRGF0YWJh
c2VQcm9jZXNzOjpzaGFyZWQoKS5xdWV1ZSgpLmRpc3BhdGNoKFtkYXRhYmFzZV0geworICAgIERh
dGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkucXVldWUoKS5kaXNwYXRjaChbZGF0YWJhc2VdIHsK
ICAgICAgICAgZGF0YWJhc2UtPnBlcmZvcm1OZXh0RGF0YWJhc2VUYXNrKCk7CiAgICAgfSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQ
SS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcAppbmRleCBjNjAxODhjODRjMjljNmJmNjg3NzIxZDc0
MjQyYzRhYzI2ZDhjM2M3Li5lYTUyMGE5YWY2YjRiZDU1NzkzNWJhNDQxOWY1MjI0Mzc3NWFhNmZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdv
cmtCbG9iUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Zp
bGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OZXR3b3JrQmxvYlJlZ2lz
dHJ5JiBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKQorTmV0d29ya0Jsb2JSZWdpc3RyeSYg
TmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6
aXNNYWluKCkpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrQmxvYlJlZ2lzdHJ5
PiByZWdpc3RyeTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0Zp
bGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmgKaW5kZXggZTVkYjYzZTM4ZGNmYmZiZWFk
ZjcxMjYyYzk2ZGJjOWViZTY1MmMxNy4uMDAzMGUwYzBlZTU4MjUzOTY3N2NlYjRlOGJhOWFhOWYy
Yzg1OTViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQ
SS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3Mg
TmV0d29ya0Jsb2JSZWdpc3RyeSB7CiBXVEZfTUFLRV9OT05DT1BZQUJMRShOZXR3b3JrQmxvYlJl
Z2lzdHJ5KTsKIHB1YmxpYzoKICAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5KCk7Ci0gICAgc3RhdGlj
IE5ldHdvcmtCbG9iUmVnaXN0cnkmIHNoYXJlZCgpOworICAgIHN0YXRpYyBOZXR3b3JrQmxvYlJl
Z2lzdHJ5JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgcmVnaXN0ZXJGaWxlQmxvYlVSTChOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYsIGNvbnN0IFN0
cmluZyYgcGF0aCwgUGFzc1JlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiwgY29uc3QgU3RyaW5nJiBj
b250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckJsb2JVUkwoTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MqLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBWZWN0b3I8V2ViQ29yZTo6QmxvYlBh
cnQ+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAppbmRleCA0NmRlYWJlYWZiYjM4N2U0NmE1ZGYzMWRjMGFjYzg5MTYzNWNkZDRiLi45MTJj
MDU3NTdjNmJjZmY4M2I1OGQ5NzFmODJhYzNkMmI2OTQ0MzMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCkBAIC0xMDYsOCArMTA2LDggQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKICAgICAgICAgbG9hZGVyLT5h
Ym9ydCgpOwogICAgIEFTU0VSVChtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuaXNFbXB0eSgpKTsK
IAotICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NEaWRDbG9zZSh0aGlzKTsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3ModGhpcyk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6c2luZ2xldG9uKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKHRoaXMpOworICAg
IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcyh0aGlzKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKQEAgLTExOCwxNCArMTE4LDE0IEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnNjaGVkdWxlUmVzb3VyY2VMb2FkKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvCiB7CiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4g
bG9hZGVyID0gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUobG9hZFBhcmFtZXRlcnMsIHRo
aXMpOwogICAgIG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5hZGQobG9hZFBhcmFtZXRlcnMuaWRl
bnRpZmllciwgbG9hZGVyKTsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAg
TmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS5zY2hlZHVsZUxvYWRlcihsb2FkZXIuZ2V0KCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpwZXJmb3JtU3luY2hyb25vdXNMb2FkKGNvbnN0IE5ldHdvcmtSZXNv
dXJjZUxvYWRQYXJhbWV0ZXJzJiBsb2FkUGFyYW1ldGVycywgUGFzc1JlZlB0cjxNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OkRl
bGF5ZWRSZXBseT4gcmVwbHkpCiB7CiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4g
bG9hZGVyID0gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjcmVhdGUobG9hZFBhcmFtZXRlcnMsIHRo
aXMsIHJlcGx5KTsKICAgICBtX25ldHdvcmtSZXNvdXJjZUxvYWRlcnMuYWRkKGxvYWRQYXJhbWV0
ZXJzLmlkZW50aWZpZXIsIGxvYWRlcik7Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5l
dHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZUxvYWRlcihsb2FkZXIuZ2V0KCkp
OworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKIH0KIAogdm9pZCBOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3ZlTG9hZElkZW50aWZpZXIoUmVzb3VyY2VMb2Fk
SWRlbnRpZmllciBpZGVudGlmaWVyKQpAQCAtMTc2LDE4ICsxNzYsMTggQEAgc3RhdGljIE5ldHdv
cmtTdG9yYWdlU2Vzc2lvbiYgc3RvcmFnZVNlc3Npb24oU2Vzc2lvbklEIHNlc3Npb25JRCkKIHZv
aWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnN0YXJ0RG93bmxvYWQoU2Vzc2lvbklE
LCB1aW50NjRfdCBkb3dubG9hZElELCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7
CiAgICAgLy8gRklYTUU6IERvIHNvbWV0aGluZyB3aXRoIHRoZSBzZXNzaW9uIElELgotICAgIE5l
dHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKGRv
d25sb2FkSUQsIHJlcXVlc3QpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5kb3du
bG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QpOwogfQogCiB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjb252ZXJ0TWFpblJlc291cmNlTG9h
ZFRvRG93bmxvYWQodWludDY0X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXIsIHVpbnQ2NF90
IGRvd25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgaWYgKCFtYWluUmVzb3VyY2VMb2FkSWRlbnRp
ZmllcikgewotICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuc3RhcnREb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0KTsKKyAgICAgICAgTmV0d29ya1By
b2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoZG93bmxv
YWRJRCwgcmVxdWVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBOZXR3b3JrUmVz
b3VyY2VMb2FkZXIqIGxvYWRlciA9IG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5nZXQobWFpblJl
c291cmNlTG9hZElkZW50aWZpZXIpOwotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5kb3du
bG9hZE1hbmFnZXIoKS5jb252ZXJ0SGFuZGxlVG9Eb3dubG9hZChkb3dubG9hZElELCBsb2FkZXIt
PmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmds
ZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKGRvd25sb2Fk
SUQsIGxvYWRlci0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKIAogICAgIC8vIFVuYmxv
Y2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4KICAgICBsb2FkZXItPmhhbmRs
ZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwpAQCAtMjI5LDMyICsyMjksMzIgQEAg
dm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVnaXN0ZXJGaWxlQmxvYlVSTChj
b25zdCBVUkwmIHVybCwgY29uc3QgU3QKIHsKICAgICBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4g
ZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKGV4dGVuc2lvbkhhbmRsZSk7CiAK
LSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckZpbGVCbG9iVVJMKHRo
aXMsIHVybCwgcGF0aCwgZXh0ZW5zaW9uLnJlbGVhc2UoKSwgY29udGVudFR5cGUpOworICAgIE5l
dHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyRmlsZUJsb2JVUkwodGhpcywg
dXJsLCBwYXRoLCBleHRlbnNpb24ucmVsZWFzZSgpLCBjb250ZW50VHlwZSk7CiB9CiAKIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwm
IHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYgY29udGVudFR5
cGUpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0ZXJCbG9iVVJM
KHRoaXMsIHVybCwgV1RGOjptb3ZlKGJsb2JQYXJ0cyksIGNvbnRlbnRUeXBlKTsKKyAgICBOZXR3
b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBX
VEY6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUpOwogfQogCiB2b2lkIE5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxGcm9tVVJMKGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBVUkwmIHNyY1VSTCkKIHsKLSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQo
KS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBzcmNVUkwpOworICAgIE5ldHdvcmtCbG9iUmVn
aXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwsIHNyY1VSTCk7CiB9
CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVSTEZv
clNsaWNlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgaW50NjRfdCBzdGFydCwg
aW50NjRfdCBlbmQpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkucmVnaXN0
ZXJCbG9iVVJMRm9yU2xpY2UodGhpcywgdXJsLCBzcmNVUkwsIHN0YXJ0LCBlbmQpOworICAgIE5l
dHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKHRo
aXMsIHVybCwgc3JjVVJMLCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAg
TmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkudW5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJs
KTsKKyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyQmxvYlVS
TCh0aGlzLCB1cmwpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpi
bG9iU2l6ZShjb25zdCBVUkwmIHVybCwgdWludDY0X3QmIHJlc3VsdFNpemUpCiB7Ci0gICAgcmVz
dWx0U2l6ZSA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmJsb2JTaXplKHRoaXMsIHVy
bCk7CisgICAgcmVzdWx0U2l6ZSA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLmJs
b2JTaXplKHRoaXMsIHVybCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDkwOWFm
MGU2MDc2Y2EyNWRlZGNhOTRiZDlhZTg0NTRiNTVjZTk0OWYuLmFmNWVmODQzMWUxOWVjZWMxYzRl
ZWEzNjU1ZDk0NWUzMjM0YjUzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTYwLDcgKzYwLDcgQEAgdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OZXR3b3JrUHJvY2VzcyYgTmV0d29y
a1Byb2Nlc3M6OnNoYXJlZCgpCitOZXR3b3JrUHJvY2VzcyYgTmV0d29ya1Byb2Nlc3M6OnNpbmds
ZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE5ldHdvcmtQcm9jZXNzPiBuZXR3
b3JrUHJvY2VzczsKICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3M7CkBAIC0xOTEsNyArMTkxLDcg
QEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0
aW9uKiBjb25uZWN0aW9uKQogICAgIENoaWxkUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24o
Y29ubmVjdGlvbik7CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hp
bTo6c2hhcmVkKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAgU2VjSXRl
bVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogI2Vu
ZGlmCiAKICAgICBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9zdXBwbGVtZW50cy5iZWdpbigpOwpAQCAtMjg4LDE0ICsyODgsMTQgQEAgdm9pZCBOZXR3
b3JrUHJvY2Vzczo6c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oYm9vbCB2
YWx1ZSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0TmV0d29ya1Byb2Nlc3NTdGF0aXN0aWNz
KHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgTmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxl
ciYgc2NoZWR1bGVyID0gTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBzY2hlZHVs
ZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcigpOwogCiAgICAgU3RhdGlzdGljc0RhdGEgZGF0YTsKIAogICAgIGRhdGEuc3RhdGlzdGlj
c051bWJlcnMuc2V0KCJMb2Fkc1BlbmRpbmdDb3VudCIsIHNjaGVkdWxlci5sb2Fkc1BlbmRpbmdD
b3VudCgpKTsKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiTG9hZHNBY3RpdmVDb3Vu
dCIsIHNjaGVkdWxlci5sb2Fkc0FjdGl2ZUNvdW50KCkpOwotICAgIGRhdGEuc3RhdGlzdGljc051
bWJlcnMuc2V0KCJEb3dubG9hZHNBY3RpdmVDb3VudCIsIHNoYXJlZCgpLmRvd25sb2FkTWFuYWdl
cigpLmFjdGl2ZURvd25sb2FkQ291bnQoKSk7Ci0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5z
ZXQoIk91dHN0YW5kaW5nQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ291bnQiLCBzaGFyZWQoKS5h
dXRoZW50aWNhdGlvbk1hbmFnZXIoKS5vdXRzdGFuZGluZ0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
Q291bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkRvd25sb2Fkc0FjdGl2
ZUNvdW50Iiwgc2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuYWN0aXZlRG93bmxvYWRDb3Vu
dCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiT3V0c3RhbmRpbmdBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXNDb3VudCIsIHNpbmdsZXRvbigpLmF1dGhlbnRpY2F0aW9uTWFuYWdl
cigpLm91dHN0YW5kaW5nQXV0aGVudGljYXRpb25DaGFsbGVuZ2VDb3VudCgpKTsKIAogICAgIHBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpE
aWRHZXRTdGF0aXN0aWNzKGRhdGEsIGNhbGxiYWNrSUQpLCAwKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGQ1N2Y3NTFhZWI2MTg0
YzlmMWZhMTEwYjI4ZjM3ZjIxNjUwMzExZjYuLmFkMWUyOTFkNDYzNjBhOTJhYmJiZTZkYTc1N2M2
NzA5MWVkOTI3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaApAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBOZXR3b3JrUHJvY2VzcyA6IHB1Ymxp
YyBDaGlsZFByb2Nlc3MsIHByaXZhdGUgRG93bmxvYWRNYW5hZ2VyOjpDbGllbnQgewogICAgIGZy
aWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrUHJvY2Vzcz47CiAgICAgZnJpZW5kIGNs
YXNzIE5ldmVyRGVzdHJveWVkPERvd25sb2FkTWFuYWdlcj47CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IE5ldHdvcmtQcm9jZXNzJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgTmV0d29ya1Byb2Nlc3MmIHNp
bmdsZXRvbigpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgVCogc3VwcGxlbWVu
dCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmNwcAppbmRleCBkYWM3NWFmNzIxNjUyNTcxMmNmYTVlNTAzY2FlZjJmMjMw
ZDRkZWM5Li5jZjdhNDcwODY1NDU1NTQ1NWFlNDg5YTkxOGY5NTkyM2ExOGE2NzQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxv
YWRlci5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0
d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzCiAg
ICAgaWYgKG9yaWdpbmFsUmVxdWVzdCgpLmh0dHBCb2R5KCkpIHsKICAgICAgICAgZm9yIChjb25z
dCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgOiBvcmlnaW5hbFJlcXVlc3QoKS5odHRwQm9keSgp
LT5lbGVtZW50cygpKSB7CiAgICAgICAgICAgICBpZiAoZWxlbWVudC5tX3R5cGUgPT0gRm9ybURh
dGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkQmxvYikKLSAgICAgICAgICAgICAgICBtX2ZpbGVSZWZl
cmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5maWxlc0lu
QmxvYihjb25uZWN0aW9uLCBlbGVtZW50Lm1fdXJsKSk7CisgICAgICAgICAgICAgICAgbV9maWxl
UmVmZXJlbmNlcy5hcHBlbmRWZWN0b3IoTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCku
ZmlsZXNJbkJsb2IoY29ubmVjdGlvbiwgZWxlbWVudC5tX3VybCkpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdCgpLnVybCgpLnByb3RvY29sSXMoImJsb2IiKSkg
ewogICAgICAgICBBU1NFUlQoIW1fcGFyYW1ldGVycy5yZXNvdXJjZVNhbmRib3hFeHRlbnNpb24p
OwotICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxvYlJlZ2lz
dHJ5OjpzaGFyZWQoKS5maWxlc0luQmxvYihjb25uZWN0aW9uLCBvcmlnaW5hbFJlcXVlc3QoKS51
cmwoKSkpOworICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxv
YlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5maWxlc0luQmxvYihjb25uZWN0aW9uLCBvcmlnaW5hbFJl
cXVlc3QoKS51cmwoKSkpOwogICAgIH0KIAogICAgIGlmIChzeW5jaHJvbm91c1JlcGx5KQpAQCAt
MTM1LDEzICsxMzUsMTMgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKICAg
ICBtX2N1cnJlbnRSZXF1ZXN0ID0gb3JpZ2luYWxSZXF1ZXN0KCk7CiAKICNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRSkKLSAgICBpZiAoIU5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuaXNFbmFibGVkKCkg
fHwgc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkgeworICAgIGlmICghTmV0d29ya0NhY2hlOjpz
aW5nbGV0b24oKS5pc0VuYWJsZWQoKSB8fCBzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKSB7CiAg
ICAgICAgIHN0YXJ0TmV0d29ya0xvYWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlcih0aGlzKTsKLSAgICBOZXR3b3Jr
Q2FjaGU6OnNoYXJlZCgpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCBbbG9hZGVyXShzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKKyAgICBOZXR3b3JrQ2Fj
aGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFsUmVxdWVzdCgpLCBbbG9hZGVyXShzdGQ6
OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4gZW50cnkpIHsKICAgICAgICAgaWYgKGxv
YWRlci0+aGFzT25lUmVmKCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBsb2FkZXIgaGFzIGJlZW4g
YWJvcnRlZCBhbmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5IHRoaXMgbGFtYmRhLgogICAgICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpzdGFydE5ldHdvcmtMb2FkKCkKICAgICAgICAgbV9idWZmZXJlZERhdGEgPSBXZWJDb3JlOjpT
aGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAg
aWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuaXNFbmFibGVkKCkpCisgICAgaWYgKE5ldHdvcmtD
YWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCiAgICAgICAgIG1fYnVmZmVyZWREYXRhRm9y
Q2FjaGUgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogI2VuZGlmCiAKQEAgLTIw
NCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCgpCiAKICAg
ICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKIAotICAgIE5ldHdvcmtQcm9jZXNzOjpz
aGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMp
OworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMpOwogCiAgICAgbV9oYW5kbGUgPSBudWxscHRyOwog
CkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnMKICAgICBpZiAobV9j
YWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICBib29sIHZhbGlkYXRpb25TdWNjZWVk
ZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0OyAvLyAzMDQgTm90IE1vZGlm
aWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2VlZGVkKQotICAgICAgICAgICAgTmV0d29y
a0NhY2hlOjpzaGFyZWQoKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCksICptX2NhY2hlRW50cnlG
b3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkudXBkYXRlKG9yaWdpbmFsUmVxdWVzdCgpLCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRh
dGlvbiwgbV9yZXNwb25zZSk7CiAgICAgICAgIGlmICghdmFsaWRhdGlvblN1Y2NlZWRlZCB8fCBp
c0NvbmRpdGlvbmFsUmVxdWVzdChvcmlnaW5hbFJlcXVlc3QoKSkpCiAgICAgICAgICAgICBtX2Nh
Y2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbnVsbHB0cjsKICAgICB9CkBAIC0zMTgsNyArMzE4LDcg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmkKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFu
ZGxlID09IG1faGFuZGxlKTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIGlmIChO
ZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmlzRW5hYmxlZCgpKSB7CisgICAgaWYgKE5ldHdvcmtDYWNo
ZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKICAgICAgICAgaWYgKG1fY2FjaGVFbnRyeUZv
clZhbGlkYXRpb24pIHsKICAgICAgICAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQKICAgICAgICAg
ICAgIEFTU0VSVChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0KTsKQEAgLTMzNyw3
ICszMzcsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyhS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmluaQogCiAgICAgICAgIGJvb2wgaXNQcml2
YXRlID0gc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsKICAgICAgICAgaWYgKGhhc0NhY2hlYWJs
ZVJlZGlyZWN0ICYmICFpc1ByaXZhdGUpCi0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNoYXJl
ZCgpLnN0b3JlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3Jlc3BvbnNlLCBtX2J1ZmZlcmVkRGF0YUZv
ckNhY2hlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigp
LnN0b3JlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3Jlc3BvbnNlLCBtX2J1ZmZlcmVkRGF0YUZvckNh
Y2hlLnJlbGVhc2UoKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lk
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KFJlc291cmNlSGFuZGxlKiBoYQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTmV0d29y
a1Byb2Nlc3M6OnNoYXJlZCgpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMud2ViUGFnZUlELCBtX3BhcmFtZXRlcnMu
d2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCku
YXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBjaGFsbGVu
Z2UpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ2FuY2VsQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKQpAQCAtNjMxLDcgKzYzMSw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVjdGlvblNwYWNlQXN5bmMoUmVzb3VyY2VI
CiAKICAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2
ZWwgaWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICAgICBpZiAocHJvdGVj
dGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkgPT0gUHJvdGVjdGlvblNwYWNlQXV0aGVu
dGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRpb25SZXF1ZXN0ZWQKLSAgICAgICAgJiYg
IU5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVh
dGlvbigpKSB7CisgICAgICAgICYmICFOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuY2FuSGFu
ZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkgewogICAgICAgICBjb250aW51ZUNhbkF1
dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoZmFsc2UpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUv
TmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZS5jcHAKaW5kZXggMjcyMDIwY2NjOWVkNThjZmZmZGNjNzEwYzJhODJiNmY4YjFl
YmQ2My4uYzFkYWNjMTJmMzE0YjU3NzA2MTNiMjdkMTQ4NGM4ZWM5YzY0ZWE3NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3Bw
CkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OZXR3b3JrQ2FjaGUm
IE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkKK05ldHdvcmtDYWNoZSYgTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxOZXR3b3JrQ2FjaGU+IGluc3Rh
bmNlOwogICAgIHJldHVybiBpbnN0YW5jZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5kZXggNTdkYTU1Mjk5ZjM3MWU0NTRhNDM0
YmVmNTEzMThhOWQ4MmE5NzVmMC4uNTgzY2EwMTk4NmJjZGY1MTYxN2Y4ZDUyOTNlZGFiNWI3MmVi
YWJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0
d29ya0NhY2hlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBO
ZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtDYWNoZSk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIE5ldHdvcmtDYWNoZSYgc2hhcmVkKCk7CisgICAgc3RhdGljIE5l
dHdvcmtDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICBOZXR3b3JrQ2FjaGUoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3ND
b2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NvY29hL05ldHdvcmtQcm9j
ZXNzQ29jb2EubW0KaW5kZXggMjNmMWQ3ODdmMjMxMjFhYmEwZjJkNmY4Y2Y4ZTJjNmVkZjNmMGRl
MS4uNjI3YjhiZDRkOGRkMWM3OGIyYjg5ZmMyYTNlMzA1OWVjMjMzMzU2MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vz
c0NvY29hLm1tCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3Jt
SW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDCiAgICAg
aWYgKCFtX2Rpc2tDYWNoZURpcmVjdG9yeS5pc051bGwoKSkgewogICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnlF
eHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgICAgICBpZiAo
cGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaGFy
ZWQoKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0b3J5KSkgeworICAgICAgICBpZiAocGFy
YW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUgJiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0b3J5KSkgewogICAgICAgICAgICAgUmV0
YWluUHRyPE5TVVJMQ2FjaGU+IHVybENhY2hlKGFkb3B0TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBp
bml0V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0NhcGFjaXR5OjAgZGlza1BhdGg6bmlsXSkpOwog
ICAgICAgICAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVkVVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCld
OwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM0LDggKzEzNCw4IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAg
ICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1lbW9yeUNhcGFjaXR5LCB1cmxDYWNoZURp
c2tDYXBhY2l0eSk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAoTmV0d29y
a0NhY2hlOjpzaGFyZWQoKS5pc0VuYWJsZWQoKSkgewotICAgICAgICBOZXR3b3JrQ2FjaGU6OnNo
YXJlZCgpLnNldE1heGltdW1TaXplKHVybENhY2hlRGlza0NhcGFjaXR5KTsKKyAgICBpZiAoTmV0
d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkgeworICAgICAgICBOZXR3b3JrQ2Fj
aGU6OnNpbmdsZXRvbigpLnNldE1heGltdW1TaXplKHVybENhY2hlRGlza0NhcGFjaXR5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgTmV0
d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShzdGQ6OmNocm9ubzo6c3lzdGVt
X2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4g
Y29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgTmV0
d29ya0NhY2hlOjpzaGFyZWQoKS5jbGVhcigpOworICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9u
KCkuY2xlYXIoKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3Vw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQ
cm9jZXNzSU9TLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQ
cm9jZXNzSU9TLm1tCmluZGV4IGIyOTlhMzZjMzVhMTg4MjlkMDhhN2JjNWEzYjQzYmY3OTBjMWI3
YzEuLjFkN2UwNTI3Y2Y0MTU2ODFkNjM5MGM0MDE3YTMwMGE2ZDIyODY3NWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1Mu
bW0KQEAgLTgyLDE0ICs4MiwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9y
QWxsT3JpZ2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogICAgIGlmIChyZXNvdXJjZUNhY2hl
c1RvQ2xlYXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsK
ICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmNs
ZWFyKCk7CisgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5jbGVhcigpOwogI2VuZGlmCiB9
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNz
KGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewog
I2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0
aWFsaXplKHRoaXMpOworICAgIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHRo
aXMpOwogI2VuZGlmCiAgICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShw
YXJhbWV0ZXJzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQppbmRleCA3MWQwNjNiMWQ3YWEyMjFiYTRiYTc5ZjBi
NzQwYTFlZDkxNzczMjcyLi5mYWMxMWE0ZjllMjViNzJlZmI3MzE4MGYyYzFmM2NkNTIzYzA0Yzll
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1By
b2Nlc3NNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdv
cmtQcm9jZXNzTWFjLm1tCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6
cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVh
dGkKICAgICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKHBhcmFtZXRlcnMp
OwogCiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2VjSXRlbVNoaW06OnNoYXJlZCgp
LmluaXRpYWxpemUodGhpcyk7CisgICAgU2VjSXRlbVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxp
emUodGhpcyk7CiAjZW5kaWYKIAogICAgIGlmICghcGFyYW1ldGVycy5odHRwUHJveHkuaXNOdWxs
KCkgfHwgIXBhcmFtZXRlcnMuaHR0cHNQcm94eS5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBi
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4
dC5tbQppbmRleCBhZjU0YjgxYTAyYzA0NTNkZGI5YjdjNzdiMWY5ZGQxNGIzZWUwM2I4Li5iNGQ0
MWE1NmM5MDA3YTcwNTQyOWM4OGZmODE4ZWU4Y2E5ODZiYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysr
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250
ZXh0Lm1tCkBAIC02Nyw3ICs2Nyw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFJlbW90ZU5ldHdv
cmtpbmdDb250ZXh0Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYg
UExBVEZPUk0oSU9TKQogICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKLSAgICBpZiAoIU5l
dHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRp
dFRva2VuKGF1ZGl0VG9rZW4pKQorICAgIGlmICghTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZSgw
LCAoY29uc3QgVUludDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKICNlbHNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xs
ZXJQcm94eS5jcHAKaW5kZXggOWRiODFjMWYxYWQ5NjkzMjc1ZjFkM2ExNGM4OTQxNzc2MGE4MjEw
Ni4uZDlhOGY2MGYxM2ZmYTQxMDQzNmJkOTdlMjFhZTNhNmMyNGEyYWY4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cApAQCAtMTA5LDcgKzEwOSw3IEBAIGJvb2wgUGx1Z2luQ29udHJvbGxlclByb3h5Ojppbml0aWFs
aXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QCiAgICAgQVNTRVJU
KCFtX2lzSW5pdGlhbGl6aW5nKTsKICAgICBtX2lzSW5pdGlhbGl6aW5nID0gdHJ1ZTsgLy8gQ2Fu
bm90IHVzZSBUZW1wb3JhcnlDaGFuZ2UgaGVyZSwgYmVjYXVzZSB0aGlzIG9iamVjdCBjYW4gYmUg
ZGVsZXRlZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuCiAKLSAgICBtX3BsdWdpbiA9IE5l
dHNjYXBlUGx1Z2luOjpjcmVhdGUoUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkubmV0c2NhcGVQbHVn
aW5Nb2R1bGUoKSk7CisgICAgbV9wbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6Y3JlYXRlKFBsdWdp
blByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHNjYXBlUGx1Z2luTW9kdWxlKCkpOwogICAgIGlmICgh
bV9wbHVnaW4pIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUgcGx1Zy1pbiBjb250
cm9sbGVyIHByb3h5IG9iamVjdC4KICAgICAgICAgbV9jb25uZWN0aW9uLT5yZW1vdmVQbHVnaW5D
b250cm9sbGVyUHJveHkodGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVn
aW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9QbHVnaW5Qcm9jZXNzLmNwcAppbmRleCA1N2E2NmEwNzViMjdkOTYxMzQ5ZGRlYWVmYmI0Yzcy
MjJjYWUzNjJlLi5lY2I5Y2Y5MTdkMTM5MzBhYWNkMWIwM2RjMzlmNGU1NTUyOTRjNWM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAKQEAgLTQ4
LDcgKzQ4LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCi1QbHVnaW5Qcm9jZXNzJiBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKQorUGx1Z2luUHJvY2Vz
cyYgUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8UGx1Z2luUHJvY2Vzcz4gcGx1Z2luUHJvY2VzczsKICAgICByZXR1cm4gcGx1Z2luUHJvY2Vz
czsKQEAgLTcwLDggKzcwLDggQEAgUGx1Z2luUHJvY2Vzczo6flBsdWdpblByb2Nlc3MoKQogdm9p
ZCBQbHVnaW5Qcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKGJvb2wgY3JpdGljYWwpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKGNyaXRpY2FsKTsKLSAgICBpZiAoc2hhcmVkKCkuc2hvdWxkVGVybWluYXRl
KCkpCi0gICAgICAgIHNoYXJlZCgpLnRlcm1pbmF0ZSgpOworICAgIGlmIChzaW5nbGV0b24oKS5z
aG91bGRUZXJtaW5hdGUoKSkKKyAgICAgICAgc2luZ2xldG9uKCkudGVybWluYXRlKCk7CiB9CiAK
IHZvaWQgUGx1Z2luUHJvY2Vzczo6aW5pdGlhbGl6ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNz
SW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Qcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaAppbmRleCAzNTY4ZDA5YWVmOGY5MTE0YzFmMWI3
ZmIyZjY3Mjc5NDdjMThmNmY0Li4wMDlkZDc1OWUzYzkxNGQ4ZWQ1OWI2YTBlOTBhYmIzMjUwM2Fj
ZmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaApA
QCAtNTAsNyArNTAsNyBAQCBjbGFzcyBQbHVnaW5Qcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2Vz
cywgcHJpdmF0ZSBXZWJDb3JlOjpBdWRpb0hhcmR3YXJlTGlzdGVuZQogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFBsdWdpblByb2Nlc3MpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxQbHVnaW5Qcm9jZXNzPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGx1Z2luUHJvY2VzcyYgc2hh
cmVkKCk7CisgICAgc3RhdGljIFBsdWdpblByb2Nlc3MmIHNpbmdsZXRvbigpOwogCiAgICAgdm9p
ZCByZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9jZXNzQ29ubmVjdGlvbiopOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwCmluZGV4IDNhNzRjNzg0MjVhMzdiNWUyZmI3ZDc3MzI3M2UyYWY4ZjBjYTJjNDUuLjBm
ZTM1ZDAxMGViZTIzYWIyYzhiMThkMDMxNDkxMjQ5MTVhMjU3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC0x
MDYsMTIgKzEwNiwxMiBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpyZW1vdmVQbHVnaW5D
b250cm9sbGVyUHJveHkoUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbAogICAgIG1fY29ubmVjdGlv
biA9IG51bGxwdHI7CiAKICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgdXMgdG8gYmUgZGVsZXRlZC4g
ICAgCi0gICAgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlV2ViUHJvY2Vzc0Nvbm5lY3Rp
b24odGhpcyk7CisgICAgUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb24odGhpcyk7CiB9CiAKIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OnNldEds
b2JhbEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmluZykKIHsKLSAgICBJUEM6
OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLmN1cnJl
bnQoKTsKKyAgICBJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24gPSBDb25uZWN0aW9uU3RhY2s6
OnNpbmdsZXRvbigpLmN1cnJlbnQoKTsKICAgICBpZiAoIWNvbm5lY3Rpb24pCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OnNl
dEdsb2JhbEV4Y2VwdGlvbihjb25zdCBTdHJpbmcmIGV4Y2VwdGlvblN0cmluZykKIAogdm9pZCBX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyKQogewotICAgIENvbm5lY3Rp
b25TdGFjazo6Q3VycmVudENvbm5lY3Rpb25QdXNoZXIgY3VycmVudENvbm5lY3Rpb24oQ29ubmVj
dGlvblN0YWNrOjpzaGFyZWQoKSwgJmNvbm5lY3Rpb24pOworICAgIENvbm5lY3Rpb25TdGFjazo6
Q3VycmVudENvbm5lY3Rpb25QdXNoZXIgY3VycmVudENvbm5lY3Rpb24oQ29ubmVjdGlvblN0YWNr
OjpzaW5nbGV0b24oKSwgJmNvbm5lY3Rpb24pOwogCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGRpZFJlY2VpdmVXZWJQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6Ok0KIAogdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6TWVzc2FnZUVuY29kZXI+JiByZXBseUVu
Y29kZXIpCiB7Ci0gICAgQ29ubmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBj
dXJyZW50Q29ubmVjdGlvbihDb25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLCAmY29ubmVjdGlvbik7
CisgICAgQ29ubmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29u
bmVjdGlvbihDb25uZWN0aW9uU3RhY2s6OnNpbmdsZXRvbigpLCAmY29ubmVjdGlvbik7CiAKICAg
ICB1aW50NjRfdCBkZXN0aW5hdGlvbklEID0gZGVjb2Rlci5kZXN0aW5hdGlvbklEKCk7CiAKQEAg
LTE4Myw3ICsxODMsNyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2lu
KHVpbnQ2NF90IHBsdWdpbkluc3RhbmNlSUQsIGJvb2wgYXN5bmNocgogICAgIHJlcGx5LT5zZW5k
KCk7CiAKICAgICAvLyBFbnN1cmUgd2UgZG9uJ3QgY2xhbXAgYW55IHRpbWVycyBkdXJpbmcgZGVz
dHJ1Y3Rpb24KLSAgICBBY3Rpdml0eUFzc2VydGlvbiBhY3Rpdml0eUFzc2VydGlvbihQbHVnaW5Q
cm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uQWN0aXZpdHkoKSk7CisgICAgQWN0aXZpdHlBc3Nl
cnRpb24gYWN0aXZpdHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVj
dGlvbkFjdGl2aXR5KCkpOwogCiAgICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250
cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChwbHVnaW5JbnN0YW5jZUlEKTsK
ICAgICAKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVh
dGVQbHVnaW5JbnRlcm5hbChjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmCiB2b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW4oY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJh
bWV0ZXJzJiBjcmVhdGlvblBhcmFtZXRlcnMsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7CiAgICAg
Ly8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9u
Ci0gICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZpdHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6
c2hhcmVkKCkuY29ubmVjdGlvbkFjdGl2aXR5KCkpOworICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFj
dGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbm5lY3Rpb25BY3Rp
dml0eSgpKTsKIAogICAgIFBsdWdpbkNvbnRyb2xsZXJQcm94eSogcGx1Z2luQ29udHJvbGxlclBy
b3h5ID0gbV9wbHVnaW5Db250cm9sbGVycy5nZXQoY3JlYXRpb25QYXJhbWV0ZXJzLnBsdWdpbklu
c3RhbmNlSUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21h
Yy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0KaW5kZXggZmM1ODc3NjRhMmE1M2E0
ZjI0MzY5ZWRjZDI5OGQxZGE4NGM5ZjQ0OS4uYjAxNTkyOTRlODlmMDUxZmUxY2MyNjkyMTQ1ODg0
MzUxODI0YThkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMv
UGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbQpAQCAtNTIsMTIgKzUyLDEyIEBA
IHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRDb21wbGV4VGV4dElucHV0U3RhdGUoUGx1
Z2luQ29tcGxleFRleHRJbnB1dFN0YXRlCiAKIGNvbnN0IE1hY2hTZW5kUmlnaHQmIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6Y29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkKIHsKLSAgICByZXR1
cm4gUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCk7
CisgICAgcmV0dXJuIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVy
U2VydmVyUG9ydCgpOwogfQogCiB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6b3BlblBsdWdp
blByZWZlcmVuY2VQYW5lKCkKIHsKLSAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9jZXNzUHJveHk6Ok9w
ZW5QbHVnaW5QcmVmZXJlbmNlUGFuZSgpLCAwKTsKKyAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpQbHVnaW5Qcm9j
ZXNzUHJveHk6Ok9wZW5QbHVnaW5QcmVmZXJlbmNlUGFuZSgpLCAwKTsKIH0KIAogdm9pZCBQbHVn
aW5Db250cm9sbGVyUHJveHk6OnBsYXRmb3JtSW5pdGlhbGl6ZShjb25zdCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycykKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lk
IFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6dXBkYXRlTGF5ZXJIb3N0aW5nQ29udGV4dChMYXllckhv
c3RpbmdNb2RlIGxheWVySG9zdAogCiAgICAgc3dpdGNoIChsYXllckhvc3RpbmdNb2RlKSB7CiAg
ICAgICAgIGNhc2UgTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOgotICAgICAgICAgICAgbV9s
YXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yUG9ydChQ
bHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSk7Cisg
ICAgICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0Ojpj
cmVhdGVGb3JQb3J0KFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVy
U2VydmVyUG9ydCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogI2lmIEhBVkUoT1VUX09GX1BST0NF
U1NfTEFZRVJfSE9TVElORykKICAgICAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlBy
b2Nlc3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVn
aW5Qcm9jZXNzTWFjLm1tIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2lu
UHJvY2Vzc01hYy5tbQppbmRleCBlOGY0ZWIwMThlZmQxNDA1MmIwODBjOGVlZDEzMjBmNTlkNTQz
YjNlLi4wNDJkNDE3OGI4ZWYyNWZjNjQwYWQ4MWQ3ZDYyMDZlYzM5OTAyNWJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0K
QEAgLTExNCw3ICsxMTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEZ1bGxzY3JlZW5X
aW5kb3dUcmFja2VyOjp3aW5kb3dTaG93bihUIHdpbmRvdykKICAgICAKICAgICAvLyBJZiB0aGlz
IGlzIHRoZSBmaXJzdCBmdWxsIHNjcmVlbiB3aW5kb3cgdG8gYmUgc2hvd24sIG5vdGlmeSB0aGUg
VUkgcHJvY2Vzcy4KICAgICBpZiAod2luZG93U2V0V2FzRW1wdHkpCi0gICAgICAgIFBsdWdpblBy
b2Nlc3M6OnNoYXJlZCgpLnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcodHJ1ZSk7CisgICAg
ICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dp
bmcodHJ1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgRnVsbHNjcmVlbldpbmRv
d1RyYWNrZXI6OndpbmRvd0hpZGRlbihUIHdpbmRvdykKQEAgLTEyOCw3ICsxMjgsNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB2b2lkIEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyOjp3aW5kb3dIaWRk
ZW4oVCB3aW5kb3cpCiAKICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBmdWxsIHNjcmVlbiB3
aW5kb3cgdGhhdCB3YXMgdmlzaWJsZSwgbm90aWZ5IHRoZSBVSSBwcm9jZXNzLgogICAgIGlmICht
X3dpbmRvd3MuaXNFbXB0eSgpKQotICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5zZXRG
dWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZhbHNlKTsKKyAgICAgICAgUGx1Z2luUHJvY2Vzczo6
c2luZ2xldG9uKCkuc2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyhmYWxzZSk7CiB9CiAKIHN0
YXRpYyBGdWxsc2NyZWVuV2luZG93VHJhY2tlciYgZnVsbHNjcmVlbldpbmRvd1RyYWNrZXIoKQpA
QCAtMTk1LDcgKzE5NSw3IEBAIHN0YXRpYyB2b2lkIGNhcmJvbldpbmRvd0hpZGRlbihXaW5kb3dS
ZWYgd2luZG93KQogc3RhdGljIGJvb2wgb3BlbkNGVVJMUmVmKENGVVJMUmVmIHVybCwgaW50MzJf
dCYgc3RhdHVzLCBDRlVSTFJlZiogbGF1bmNoZWRVUkwpCiB7CiAgICAgU3RyaW5nIGxhdW5jaGVk
VVJMU3RyaW5nOwotICAgIGlmICghUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkub3BlblVSTChVUkwo
dXJsKS5zdHJpbmcoKSwgc3RhdHVzLCBsYXVuY2hlZFVSTFN0cmluZykpCisgICAgaWYgKCFQbHVn
aW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5vcGVuVVJMKFVSTCh1cmwpLnN0cmluZygpLCBzdGF0dXMs
IGxhdW5jaGVkVVJMU3RyaW5nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFs
YXVuY2hlZFVSTFN0cmluZy5pc051bGwoKSAmJiBsYXVuY2hlZFVSTCkKQEAgLTIwNyw3ICsyMDcs
NyBAQCBzdGF0aWMgYm9vbCBvcGVuQ0ZVUkxSZWYoQ0ZVUkxSZWYgdXJsLCBpbnQzMl90JiBzdGF0
dXMsIENGVVJMUmVmKiBsYXVuY2hlZFVSTCkKIAogc3RhdGljIHZvaWQgc2V0TW9kYWwoYm9vbCBt
b2RhbFdpbmRvd0lzU2hvd2luZykKIHsKLSAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5zZXRN
b2RhbFdpbmRvd0lzU2hvd2luZyhtb2RhbFdpbmRvd0lzU2hvd2luZyk7CisgICAgUGx1Z2luUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc2V0TW9kYWxXaW5kb3dJc1Nob3dpbmcobW9kYWxXaW5kb3dJc1No
b3dpbmcpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbW9kYWxDb3VudCA9IDA7CkBAIC0yNzUsNyAr
Mjc1LDcgQEAgc3RhdGljIHZvaWQgcmVwbGFjZWROU0NvbmNyZXRlVGFza19sYXVuY2goTlNUYXNr
ICpzZWxmLCBTRUwgX2NtZCkKICAgICBmb3IgKE5TU3RyaW5nICphcmd1bWVudCBpbiBzZWxmLmFy
Z3VtZW50cykKICAgICAgICAgYXJndW1lbnRzLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudCk7CiAK
LSAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkubGF1bmNoUHJvY2VzcyhsYXVuY2hQYXRo
LCBhcmd1bWVudHMpKQorICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5sYXVuY2hQ
cm9jZXNzKGxhdW5jaFBhdGgsIGFyZ3VtZW50cykpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5T
Q29uY3JldGVUYXNrX2xhdW5jaChzZWxmLCBfY21kKTsKQEAgLTI5NSw3ICsyOTUsNyBAQCBzdGF0
aWMgTlNSdW5uaW5nQXBwbGljYXRpb24gKnJlcGxhY2VkTlNXb3Jrc3BhY2VfbGF1bmNoQXBwbGlj
YXRpb25BdFVSTF9vcHRpb25zXwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFBsdWdpblBy
b2Nlc3M6OnNoYXJlZCgpLmxhdW5jaEFwcGxpY2F0aW9uQXRVUkwoVVJMKHVybCkuc3RyaW5nKCks
IGFyZ3VtZW50cykpIHsKKyAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubGF1bmNo
QXBwbGljYXRpb25BdFVSTChVUkwodXJsKS5zdHJpbmcoKSwgYXJndW1lbnRzKSkgewogICAgICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAqZXJyb3IgPSBuaWw7CiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIEJPT0wgKCpOU1dvcmtzcGFjZV9vcGVuRmls
ZSkoTlNXb3Jrc3BhY2UgKiwgU0VMLCBOU1N0cmluZyAqKTsKIAogc3RhdGljIEJPT0wgcmVwbGFj
ZWROU1dvcmtzcGFjZV9vcGVuRmlsZShOU1dvcmtzcGFjZSAqc2VsZiwgU0VMIF9jbWQsIE5TU3Ry
aW5nICpmdWxsUGF0aCkKIHsKLSAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkub3BlbkZp
bGUoZnVsbFBhdGgpKQorICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5vcGVuRmls
ZShmdWxsUGF0aCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIE5TV29ya3Nw
YWNlX29wZW5GaWxlKHNlbGYsIF9jbWQsIGZ1bGxQYXRoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L0Nvbm5lY3Rpb25TdGFjay5jcHAKaW5kZXggNTY1YWRmNTk5YmYzNjczMDYyMTllNmU1OGVhODk4
MTk5ZDUxMjZjYi4uZmI1Mzk3ZDExYWQyNDJmN2MzNjU5MjMyODI4Y2JhZjMxZTI2MmVhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5jcHAKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLUNvbm5lY3Rpb25TdGFjayYgQ29ubmVjdGlvblN0
YWNrOjpzaGFyZWQoKQorQ29ubmVjdGlvblN0YWNrJiBDb25uZWN0aW9uU3RhY2s6OnNpbmdsZXRv
bigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENvbm5lY3Rpb25TdGFjaz4gY29ubmVj
dGlvblN0YWNrOwogICAgIHJldHVybiBjb25uZWN0aW9uU3RhY2s7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvQ29ubmVjdGlvblN0YWNrLmgKaW5kZXggYmQ3NTNhMGU4NWI5MzBmNTYzMzY3ODQ3MTI2OGVk
YmQ4ZmExZWJjZC4uYzUzMjYzODk0NDhlM2VjNTZkNTI1OTZjNWVkN2YwYTk0ZDE1ZDdmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suaApAQCAtMzYsNyArMzYsNyBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgQ29ubmVjdGlvblN0YWNrIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgQ29ubmVjdGlvblN0YWNrJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgQ29ubmVjdGlv
blN0YWNrJiBzaW5nbGV0b24oKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiogY3VycmVudCgpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRp
ZXMvbWFjL0xlZ2FjeVByb2Nlc3MvQ2hpbGRQcm9jZXNzRW50cnlQb2ludC5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL0xlZ2FjeVByb2Nlc3MvQ2hpbGRQ
cm9jZXNzRW50cnlQb2ludC5oCmluZGV4IGRiZjBhMWYxMDY4MjY5NTU4OWVhOWZmYWYzYWQ1YmI1
NTczNmFiNTQuLjFkNGNlM2Y2MjAxMzdkNjVmMWMxZjFkYzllMzAwNzZhZjVhNmM3NjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9MZWdh
Y3lQcm9jZXNzL0NoaWxkUHJvY2Vzc0VudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvTGVnYWN5UHJvY2Vzcy9DaGlsZFByb2Nlc3NF
bnRyeVBvaW50LmgKQEAgLTg3LDcgKzg3LDcgQEAgaW50IENoaWxkUHJvY2Vzc01haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogICAgICAgICBpZiAoIWRlbGVnYXRlLmdldEV4dHJhSW5pdGlhbGl6
YXRpb25EYXRhKHBhcmFtZXRlcnMuZXh0cmFJbml0aWFsaXphdGlvbkRhdGEpKQogICAgICAgICAg
ICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKIAotICAgICAgICBDaGlsZFByb2Nlc3NUeXBlOjpzaGFy
ZWQoKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOworICAgICAgICBDaGlsZFByb2Nlc3NUeXBlOjpz
aW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwogICAgIH0KIAogICAgIGRlbGVnYXRl
LnN0YXJ0UnVuTG9vcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5
UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQ
Q1NlcnZpY2VFbnRyeVBvaW50LmgKaW5kZXggMDk5ODZiZDc1OTg5NTRmNjE2MzBkN2E5ODVmMmE0
Y2Y2MDc0MWIxMy4uZmJiMzJhMzk1MGFiZGNiNzdhZWRjYzhkMmI4YWNhNzQ2YjUxNTkzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQ
Q1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2lu
dC5oCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgWFBDU2VydmljZUluaXRpYWxpemVyKE9TT2JqZWN0
UHRyPHhwY19jb25uZWN0aW9uX3Q+IGNvbm5lY3Rpb24sIHhwY19vYmplY3RfCiAgICAgdm91Y2hl
cl9yZXBsYWNlX2RlZmF1bHRfdm91Y2hlcigpOwogI2VuZGlmCiAKLSAgICBYUENTZXJ2aWNlVHlw
ZTo6c2hhcmVkKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKKyAgICBYUENTZXJ2aWNlVHlwZTo6
c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShwYXJhbWV0ZXJzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxl
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5jcHAKaW5kZXgg
ODI0ODg3Nzc4ZDkxZmUxNTYyNzQ2M2IxM2JjMTY5N2ViN2Y0MjIyOS4uMmZhNDNmZDIxYjAxOGMw
YzJmMTA4ZDQ1YmMzOGVkMGRkMmUzMzY5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hh
cmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJN
ZW1vcnlTYW1wbGVyLmNwcApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
c3RhdGljIGNvbnN0IGNoYXIgc2VwYXJhdG9yID0gJ1x0JzsKIAotV2ViTWVtb3J5U2FtcGxlciog
V2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCkKK1dlYk1lbW9yeVNhbXBsZXIqIFdlYk1lbW9yeVNh
bXBsZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIqIHNoYXJl
ZE1lbW9yeVNhbXBsZXI7CiAgICAgaWYgKCFzaGFyZWRNZW1vcnlTYW1wbGVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgKaW5kZXggZWMyNDQxMDVjOGZkNTQzYTAwZDBk
YTk2ZWMyYWI2NDkxOTU2NjllNC4uNjZmNjJhMmVjOGY0ZmIzY2NkMjkxZGI1YjIzOWZjNmQ1ZmJk
MDNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCkBAIC03MSw3
ICs3MSw3IEBAIHN0cnVjdCBXZWJNZW1vcnlTdGF0aXN0aWNzIHsKIGNsYXNzIFdlYk1lbW9yeVNh
bXBsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYk1lbW9yeVNhbXBsZXIpOwogcHVi
bGljOgotICAgIHN0YXRpYyBXZWJNZW1vcnlTYW1wbGVyKiBzaGFyZWQoKTsKKyAgICBzdGF0aWMg
V2ViTWVtb3J5U2FtcGxlciogc2luZ2xldG9uKCk7CiAgICAgdm9pZCBzdGFydChjb25zdCBkb3Vi
bGUgaW50ZXJ2YWwgPSAwKTsKICAgICB2b2lkIHN0YXJ0KGNvbnN0IFNhbmRib3hFeHRlbnNpb246
OkhhbmRsZSYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGRvdWJsZSBpbnRlcnZhbCA9IDApOwogICAg
IHZvaWQgc3RvcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2lvcy9DaGls
ZFByb2Nlc3NJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lP
Uy5tbQppbmRleCBhZWNjMDQxZWVjMmVkYThlMzQ3MzY0YWMyZWRjODNkNjNkZDdjZGNiLi5lZmM3
YjNiOGZlMDAyYjZhNjRiMWQyYmQyZDg3ZmMyYTQxYTc3YmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENo
aWxkUHJvY2Vzczo6c2V0QXBwbGljYXRpb25Jc0RhZW1vbigpCiAKIHZvaWQgQ2hpbGRQcm9jZXNz
OjpwbGF0Zm9ybUluaXRpYWxpemUoKQogewotICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYg
ZmxvYXRpbmdQb2ludEVudmlyb25tZW50ID0gRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFy
ZWQoKTsgCisgICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50JiBmbG9hdGluZ1BvaW50RW52aXJv
bm1lbnQgPSBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigpOyAKICAgICBmbG9h
dGluZ1BvaW50RW52aXJvbm1lbnQuZW5hYmxlRGVub3JtYWxTdXBwb3J0KCk7IAogICAgIGZsb2F0
aW5nUG9pbnRFbnZpcm9ubWVudC5zYXZlTWFpblRocmVhZEVudmlyb25tZW50KCk7IAogICAgIFtb
TlNGaWxlTWFuYWdlciBkZWZhdWx0TWFuYWdlcl0gY2hhbmdlQ3VycmVudERpcmVjdG9yeVBhdGg6
W1tOU0J1bmRsZSBtYWluQnVuZGxlXSBidW5kbGVQYXRoXV07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5j
cHAKaW5kZXggNThlNzNmOTFmN2NiYjQ1MWYyNGI0OTFmNWVkN2Y5YmZlZGZhOWQwZi4uMTE1OGFl
ZTZhOTA5NGE0NzI0NDcyODc0ZTIwZGY5ODhhN2JiOWY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2Vy
LmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHN0YXRpYyB2b2lkIFNJR1NZU0hhbmRsZXIoaW50IHNp
Z25hbCwgc2lnaW5mb190KiBpbmZvLCB2b2lkKiBkYXRhKQogICAgIGlmICghdWNvbnRleHQpCiAg
ICAgICAgIENSQVNIKCk7CiAKLSAgICBTZWNjb21wQnJva2VyQ2xpZW50KiBjbGllbnQgPSAmU2Vj
Y29tcEJyb2tlckNsaWVudDo6c2hhcmVkKCk7CisgICAgU2VjY29tcEJyb2tlckNsaWVudCogY2xp
ZW50ID0gJlNlY2NvbXBCcm9rZXJDbGllbnQ6OnNpbmdsZXRvbigpOwogCiAgICAgaWYgKGNsaWVu
dC0+aGFuZGxlSWZPcGVuaW5nT25saW5lQ1BVQ291bnQoJnVjb250ZXh0LT51Y19tY29udGV4dCkp
CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
Q29va2llU3RvcmFnZVNoaW0uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3Rv
cmFnZVNoaW0uaAppbmRleCBhMTUxOTU0OTUzM2I4ODJjNDE3OTg0ZjQ1ZDFiYjgyYzkwNTI1Yzlm
Li5hYjM0MjI0NjMzOGZmZTkyN2NkYjlhZGFhM2IxZDhlMzkyMDE4NTE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIENvb2tpZVN0b3JhZ2VTaGltIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb29r
aWVTdG9yYWdlU2hpbSk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPENvb2tpZVN0
b3JhZ2VTaGltPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgQ29va2llU3RvcmFnZVNoaW0mIHNoYXJl
ZCgpOworICAgIHN0YXRpYyBDb29raWVTdG9yYWdlU2hpbSYgc2luZ2xldG9uKCk7CiAKICAgICB2
b2lkIGluaXRpYWxpemUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9Db29raWVTdG9yYWdlU2hpbS5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2ll
U3RvcmFnZVNoaW0ubW0KaW5kZXggMTdiOGM3MmYxYjhhMWQwMzdkNDdhYzA2OGM0NGE2MWJkMjhk
NTgwYi4uMDcwYTg0MTQ0MmU3ZmFhNWU4Y2ViODhjMjc2MTEwZWVjODcyMTQ4YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCkBAIC02MSw3ICs2
MSw3IEBAIHN0YXRpYyBDRkRpY3Rpb25hcnlSZWYgd2ViS2l0Q29va2llU3RvcmFnZUNvcHlSZXF1
ZXN0SGVhZGVyRmllbGRzRm9yVVJMKENGSFRUUENvCiB7CiAgICAgU3RyaW5nIGNvb2tpZXM7CiAg
ICAgVVJMIGZpcnN0UGFydHlGb3JDb29raWVzVVJMOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hh
cmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVs
ZFZhbHVlKFNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpLCBmaXJzdFBhcnR5Rm9yQ29va2ll
c1VSTCwgaW5SZXF1ZXN0VVJMKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShjb29raWVzKSwgMCkpCisgICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGZpcnN0UGFy
dHlGb3JDb29raWVzVVJMLCBpblJlcXVlc3RVUkwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET006OlJlcGx5KGNvb2tpZXMpLCAwKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpZiAoY29va2llcy5pc051bGwoKSkKQEAgLTczLDcgKzczLDcg
QEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiB3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RI
ZWFkZXJGaWVsZHNGb3JVUkwoQ0ZIVFRQQ28KICAgICByZXR1cm4gQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KDAsIGNvb2tpZUtleXMsIGNvb2tpZVZhbHVlcywgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcyk7CiB9CiAKLUNvb2tpZVN0
b3JhZ2VTaGltJiBDb29raWVTdG9yYWdlU2hpbTo6c2hhcmVkKCkKK0Nvb2tpZVN0b3JhZ2VTaGlt
JiBDb29raWVTdG9yYWdlU2hpbTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q29va2llU3RvcmFnZVNoaW0+IHN0b3JhZ2U7CiAgICAgcmV0dXJuIHN0b3JhZ2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0uY3BwCmluZGV4IDZjNjYxYjEzYTQ0
YzA1YTJlMDUwNjRiMGI4NDZiM2Y3MzgxNjJjOTQuLjQwMjlkMjM1ODU1NzJiZTljMTM3NDRjZTRm
YTFlZGUyMTk5NTM1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2Vj
SXRlbVNoaW0uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0u
Y3BwCkBAIC03Miw3ICs3Miw3IEBAIHN0YXRpYyBCbG9ja2luZ1Jlc3BvbnNlTWFwPFNlY0l0ZW1S
ZXNwb25zZURhdGE+JiByZXNwb25zZU1hcCgpCiAKIHN0YXRpYyBDaGlsZFByb2Nlc3MqIHNoYXJl
ZFByb2Nlc3M7CiAKLVNlY0l0ZW1TaGltJiBTZWNJdGVtU2hpbTo6c2hhcmVkKCkKK1NlY0l0ZW1T
aGltJiBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgU2VjSXRlbVNoaW0q
IHNoaW07CiAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5oIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9TZWNJdGVtU2hpbS5oCmluZGV4IDk3YzQ3ODhiNTI2ZDRhYmEyODg2MWFkNDEyYzVi
MzUzODczYzc3OWQuLmNiMzY0MjU5ODQ0YjQ4NTI5YzViN2YxZTQ5Nzk5N2QyODdjMDllNGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0uaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmgKQEAgLTM4LDcgKzM4LDcgQEAg
Y2xhc3MgU2VjSXRlbVJlc3BvbnNlRGF0YTsKIGNsYXNzIFNlY0l0ZW1TaGltIDogcHVibGljIElQ
Qzo6Q29ubmVjdGlvbjo6V29ya1F1ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNlY0l0ZW1TaGltKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU2VjSXRlbVNoaW0mIHNo
YXJlZCgpOworICAgIHN0YXRpYyBTZWNJdGVtU2hpbSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lk
IGluaXRpYWxpemUoQ2hpbGRQcm9jZXNzKik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlv
bihJUEM6OkNvbm5lY3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC91
bml4L0NoaWxkUHJvY2Vzc01haW4uaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC91bml4L0NoaWxk
UHJvY2Vzc01haW4uaAppbmRleCBjZjJjYjAxZmM4MTE1ZmE1ODU1OTY1YzZkZTBiNGMyZTczNTFm
NTkwLi43YjkwMjk0MjBkOThmYjZjZjc5MWFlZmY5MzA3YjJhODVkMWFjMTM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmgKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5oCkBAIC01Nyw3ICs1Nyw3
IEBAIGludCBDaGlsZFByb2Nlc3NNYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBpZiAo
IWNoaWxkTWFpbi5wYXJzZUNvbW1hbmRMaW5lKGFyZ2MsIGFyZ3YpKQogICAgICAgICByZXR1cm4g
RVhJVF9GQUlMVVJFOwogCi0gICAgQ2hpbGRQcm9jZXNzVHlwZTo6c2hhcmVkKCkuaW5pdGlhbGl6
ZShjaGlsZE1haW4uaW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKCkpOworICAgIENoaWxkUHJvY2Vz
c1R5cGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUoY2hpbGRNYWluLmluaXRpYWxpemF0aW9uUGFy
YW1ldGVycygpKTsKICAgICBSdW5Mb29wOjpydW4oKTsKICAgICBjaGlsZE1haW4ucGxhdGZvcm1G
aW5hbGl6ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Mv
V0tUZXh0Q2hlY2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0
Q2hlY2tlci5jcHAKaW5kZXggMmRhOTRkZmMyMDAzOWJmMDE4NzEzYmE1YWRhYzA2MzM1N2RkMDdm
NS4uMzI3OWRkN2E5NjdmODE0OWU1MTZmMjliMjhmOTRkMjRiNTRkNWE0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcApAQCAtMzYsMjUg
KzM2LDI1IEBAIHZvaWQgV0tUZXh0Q2hlY2tlclNldENsaWVudChjb25zdCBXS1RleHRDaGVja2Vy
Q2xpZW50QmFzZSogd2tDbGllbnQpCiB7CiAgICAgaWYgKHdrQ2xpZW50ICYmIHdrQ2xpZW50LT52
ZXJzaW9uKQogICAgICAgICByZXR1cm47Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5z
ZXRDbGllbnQod2tDbGllbnQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+c2V0
Q2xpZW50KHdrQ2xpZW50KTsKIH0KIAogdm9pZCBXS1RleHRDaGVja2VyQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXZWJUZXh0
Q2hlY2tlcjo6c2hhcmVkKCktPmNvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hh
bmdlZChlbmFibGVkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KIAogdm9pZCBX
S1RleHRDaGVja2VyR3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5ncmFtbWFyQ2hlY2tpbmdFbmFi
bGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24o
KS0+Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChlbmFibGVkKTsKIH0KIAogdm9p
ZCBXS1RleHRDaGVja2VyQ2hlY2tTcGVsbGluZyhXS1BhZ2VSZWYgcGFnZSwgYm9vbCBzdGFydEJl
Zm9yZVNlbGVjdGlvbikKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNoZWNrU3Bl
bGxpbmcodG9JbXBsKHBhZ2UpLCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNpbmdsZXRvbigpLT5jaGVja1NwZWxsaW5nKHRvSW1wbChwYWdlKSwgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pOwogfQogCiB2b2lkIFdLVGV4dENoZWNrZXJDaGFuZ2VTcGVsbGluZ1RvV29y
ZChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgd29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tl
cjo6c2hhcmVkKCktPmNoYW5nZVNwZWxsaW5nVG9Xb3JkKHRvSW1wbChwYWdlKSwgdG9XVEZTdHJp
bmcod29yZCkpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2hhbmdlU3BlbGxp
bmdUb1dvcmQodG9JbXBsKHBhZ2UpLCB0b1dURlN0cmluZyh3b3JkKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5jcHAKaW5kZXggMGE5ZjFmNWI1MDA5
OTZjMGRjZTliYTEyMDZmZjIyYjE5ZDYzMjA3NS4uODlkZGUzZjhkMjIyNTI1YTdmMGM5MTg5NjE5
OTlkNTFlOTFkMWI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX21haW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19tYWluLmNwcApAQCAtNjIsNyArNjIsNyBAQCBFd2tNYWluOjpFd2tNYWluKCkKIHsKIH0KIAot
RXdrTWFpbiYgRXdrTWFpbjo6c2hhcmVkKCkKK0V3a01haW4mIEV3a01haW46OnNpbmdsZXRvbigp
CiB7CiAgICAgc3RhdGljIEV3a01haW4gaW5zdGFuY2U7CiAgICAgcmV0dXJuIGluc3RhbmNlOwpA
QCAtMjA5LDEwICsyMDksMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogaW50IGV3a19p
bml0KCkKIHsKLSAgICByZXR1cm4gRXdrTWFpbjo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiBFd2tNYWluOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKCk7CiB9CiAKIGludCBld2tf
c2h1dGRvd24oKQogewotICAgIHJldHVybiBFd2tNYWluOjpzaGFyZWQoKS5maW5hbGl6ZSgpOwor
ICAgIHJldHVybiBFd2tNYWluOjpzaW5nbGV0b24oKS5maW5hbGl6ZSgpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW5fcHJpdmF0ZS5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW5fcHJpdmF0ZS5oCmluZGV4
IDM4MDIzYzYxODg0Mzg4YWNiNDIwMGQwMGY0MDU1MjVkNDQwMTg2ODQuLjFkNGNlMWZhZWYwNDM4
MDkzZjljMzY1YmRkZmE2NjY5ZTE1MTQ1MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbl9wcml2YXRlLmgKQEAgLTMyLDcgKzMyLDcgQEAgZW51
bSBjbGFzcyBFRkxNb2R1bGVJbml0RmFpbHVyZTsKIAogY2xhc3MgRXdrTWFpbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIEV3a01haW4mIHNoYXJlZCgpOworICAgIHN0YXRpYyBFd2tNYWluJiBzaW5n
bGV0b24oKTsKICAgICB+RXdrTWFpbigpOwogICAgIGludCBpbml0aWFsaXplKCk7CiAgICAgaW50
IGZpbmFsaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKaW5kZXggY2JmMWMwNDQ4YTYyOWU2MTM1NGY2MWY2ZDYxMDA3ZGY5NzFlZGVjZi4uYmY4
ZmExODM5MDhkY2QwYjliN2RhZTg1MWE2NmU3ZjM5ZWM0YWE4MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtODAsNyArODAsNyBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc21hcnRfY2xhc3Nfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkp
CiAKIEV2YXNfT2JqZWN0KiBFV0tWaWV3Q3JlYXRlKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1Bh
Z2VHcm91cFJlZiBwYWdlR3JvdXAsIEV2YXMqIGNhbnZhcywgRXZhc19TbWFydCogc21hcnQpCiB7
Ci0gICAgaWYgKCFFd2tNYWluOjpzaGFyZWQoKS5pc0luaXRpYWxpemVkKCkpIHsKKyAgICBpZiAo
IUV3a01haW46OnNpbmdsZXRvbigpLmlzSW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBFSU5BX0xP
R19DUklUKCJFV2ViS2l0IGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4gWW91IG11c3QgY2FsbCBl
d2tfaW5pdCgpIGJlZm9yZSBjcmVhdGluZyB2aWV3LiIpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2Vi
UHJvY2Vzc1Bvb2xDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQ
cm9jZXNzUG9vbENvY29hLm1tCmluZGV4IGE3ZDg0ODE0NjA0YzUzYjA3ZmNjZTUxNTE1NTA2MWNj
ZmQzMTU4MTIuLjkxNjUzZGNlN2RiOWI2MWFhZWI4YjM5NDFmZDVmZWQzM2E0MzcxZGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENv
Y29hLm1tCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6dXBkYXRlUHJv
Y2Vzc1N1cHByZXNzaW9uU3RhdGUoKQogICAgIGlmICghbV9wcm9jZXNzU3VwcHJlc3Npb25EaXNh
YmxlZEZvclBhZ2VDb3VudGVyLnZhbHVlKCkpCiAgICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFn
ZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuID0gbnVsbHB0cjsKICAgICBlbHNlIGlm
ICghbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4p
Ci0gICAgICAgIG1fcGx1Z2luUHJvY2Vzc01hbmFnZXJQcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxl
ZFRva2VuID0gUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLnByb2Nlc3NTdXBwcmVzc2lv
bkRpc2FibGVkVG9rZW4oKTsKKyAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9u
KCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigpOwogI2VuZGlmCiB9CiAKQEAgLTE0
MCw3ICsxNDAsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemUoKQog
ICAgIHJlZ2lzdGVyTm90aWZpY2F0aW9uT2JzZXJ2ZXJzKCk7CiAKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgV2ViS2l0OjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNoYXJlZCgpOworICAgIFdl
YktpdDo6V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKTsKICNlbmRpZgogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
Ykluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9y
U2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKaW5kZXggNWRmZjU0NjMwMzZjMzdkZjU1OTdj
OWJlMmFkOTlkMzg5ZDJlNThlMS4uNjYzODc3NDg1ZWJlYjFmNDk0ZWUyNmJmMmJmY2ZlNjg5ZGM4
OTc0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZl
ci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9J
bnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcApAQCAtNTEsNyArNTEsNyBAQCBz
dGF0aWMgdW5zaWduZWQgcGFnZUlkRnJvbVJlcXVlc3RQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkK
ICAgICByZXR1cm4gbnVtYmVyOwogfQogCi1XZWJJbnNwZWN0b3JTZXJ2ZXImIFdlYkluc3BlY3Rv
clNlcnZlcjo6c2hhcmVkKCkKK1dlYkluc3BlY3RvclNlcnZlciYgV2ViSW5zcGVjdG9yU2VydmVy
OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JTZXJ2ZXImIHNlcnZlciA9
ICpuZXcgV2ViSW5zcGVjdG9yU2VydmVyOwogICAgIHJldHVybiBzZXJ2ZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNl
cnZlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNw
ZWN0b3JTZXJ2ZXIuaAppbmRleCAxOTY3NWIyYjlkNDhiMGNkYjNjMTQ2YzlkOWQ5ZWY5NzdkNDMy
Y2I0Li4xMzI5OWIxNmUxOTNmNjc0YzBjNGZkY2M3Nzc4ZTZjZjY2ZDkwOTFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNl
cnZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
SW5zcGVjdG9yU2VydmVyLmgKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgV2ViSW5zcGVjdG9yUHJv
eHk7CiBjbGFzcyBXZWJJbnNwZWN0b3JTZXJ2ZXIgOiBwdWJsaWMgV2ViU29ja2V0U2VydmVyLCBw
dWJsaWMgV2ViU29ja2V0U2VydmVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hN
YXA8dW5zaWduZWQsIFdlYkluc3BlY3RvclByb3h5Kj4gQ2xpZW50TWFwOwotICAgIHN0YXRpYyBX
ZWJJbnNwZWN0b3JTZXJ2ZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JTZXJ2
ZXImIHNpbmdsZXRvbigpOwogCiAgICAgLy8gUGFnZSByZWdpc3RyeSB0byBtYW5hZ2Uga25vd24g
cGFnZXMuCiAgICAgaW50IHJlZ2lzdGVyUGFnZShXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5jcHAKaW5kZXggNTRiM2JlMmZjNmQzMjUzMTYxYTRjMjE4ZTYyNzlhNDY1MzRk
ZTQzZC4uZDVmMzNmY2M3MWFkNjI0MmEwMGE1YTlkM2MyY2IxZjAxYzQxMDFlZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAKQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpnZXRM
YXVuY2hPcHRpb25zKFByb2Nlc3NMYXVuY2hlcjo6TGF1bmNoT3B0aW9ucyYgbGF1bmMKIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6Y29ubmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbikKIHsKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hp
bVByb3h5OjpzaGFyZWQoKS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKKyAgICBT
ZWNJdGVtU2hpbVByb3h5OjpzaW5nbGV0b24oKS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0
aW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pOwogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFu
YWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNz
TWFuYWdlci5jcHAKaW5kZXggYWI5YjkyZGNlMGQwMmVlMGM4MThmNzljY2NjYzZjY2ZlZjg0ZDNk
YS4uY2I2MWQzNjI4ZTcyOWVlMjVlOWJhYjk1M2NiNDI5YzExODY2NjA0MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5h
Z2VyLmNwcApAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGx1Z2lu
UHJvY2Vzc01hbmFnZXImIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKQorUGx1Z2luUHJv
Y2Vzc01hbmFnZXImIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKQogewogICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzTWFuYWdlcj4gcGx1Z2luUHJvY2Vzc01h
bmFnZXI7CiAgICAgcmV0dXJuIHBsdWdpblByb2Nlc3NNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmgKaW5k
ZXggZGYzMjUyNzk3NTk5NGVhZjllM2Y2MDcyMzY3YmY3ZGY5ZTc0YWY4Ny4uZjI5MTFjMzZjYjI3
NmIxNzQxZjYyNjA1Mzk3ZDVkZDFkMWNlODQyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oCkBAIC01NSw3ICs1
NSw3IEBAIGNsYXNzIFBsdWdpblByb2Nlc3NNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQbHVnaW5Qcm9jZXNzTWFuYWdlcik7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJv
eWVkPFBsdWdpblByb2Nlc3NNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGx1Z2luUHJv
Y2Vzc01hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNzTWFuYWdlciYg
c2luZ2xldG9uKCk7CiAKICAgICB1aW50NjRfdCBwbHVnaW5Qcm9jZXNzVG9rZW4oY29uc3QgUGx1
Z2luTW9kdWxlSW5mbyYsIFBsdWdpblByb2Nlc3NUeXBlLCBQbHVnaW5Qcm9jZXNzU2FuZGJveFBv
bGljeSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzUHJveHkuY3BwCmluZGV4IDBmM2Q5NDEwODE2ZmYxM2Y4YWUyYWUwYTQxYTRh
MGQ5MDk1NDg1NWUuLjNhNWYwMDFjOTA2NDk2NzRkZGFiZjQxMDJmODJjNzI5YmE2MzEyMTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcApAQCAtMjI5LDcgKzIyOSw3IEBAIHZvaWQgUGx1Z2luUHJvY2Vzc1Byb3h5
OjpkaWRGaW5pc2hMYXVuY2hpbmcoUHJvY2Vzc0xhdW5jaGVyKiwgSVBDOjpDb25uZWN0aW9uOjpJ
CiAgICAgbV9udW1QZW5kaW5nQ29ubmVjdGlvblJlcXVlc3RzID0gMDsKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQotICAgIGlmICghUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLnByb2Nlc3NT
dXBwcmVzc2lvbkRpc2FibGVkKCkpCisgICAgaWYgKCFQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2lu
Z2xldG9uKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSkKICAgICAgICAgc2V0UHJvY2Vz
c1N1cHByZXNzaW9uRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdl
ci5jcHAKaW5kZXggMzQ5OGVkNTg4NjBmNmZkOWE2MjE2ZDZkNGE1YWE5MTljYzY1NDlhNy4uZTE4
MDYwMzFlNTc3OGIxMjAxNTU4YTA1Mzg4MjQyYTkzNjNhNjY0NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1h
bmFnZXIuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5nZXRT
aXRlc1dpdGhEYXRhKG1fcGx1Z2lucy5sYXN0KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2Vy
LCBtX2NhbGxiYWNrSUQpOworICAgICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9u
KCkuZ2V0U2l0ZXNXaXRoRGF0YShtX3BsdWdpbnMubGFzdCgpLCBtX3dlYlBsdWdpblNpdGVEYXRh
TWFuYWdlciwgbV9jYWxsYmFja0lEKTsKICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZUxhc3QoKTsK
ICAgICB9CiAKQEAgLTk0LDcgKzk0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLmNsZWFy
U2l0ZURhdGEobV9wbHVnaW5zLmxhc3QoKSwgbV93ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIsIG1f
c2l0ZXMsIG1fZmxhZ3MsIG1fbWF4QWdlSW5TZWNvbmRzLCBtX2NhbGxiYWNrSUQpOworICAgICAg
ICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2luZ2xldG9uKCkuY2xlYXJTaXRlRGF0YShtX3BsdWdp
bnMubGFzdCgpLCBtX3dlYlBsdWdpblNpdGVEYXRhTWFuYWdlciwgbV9zaXRlcywgbV9mbGFncywg
bV9tYXhBZ2VJblNlY29uZHMsIG1fY2FsbGJhY2tJRCk7CiAgICAgICAgIG1fcGx1Z2lucy5yZW1v
dmVMYXN0KCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCmluZGV4IDMxOWJkM2UxNWM0YTYwMWY5
NzA0YjIxNjczZGRjNTZlODQ2NjU4M2UuLjc5MjAzOTM5MzFlN2NhZjhmYzEyZTI2NDA0MzFlY2Q5
NTMzOThmNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0
ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgZ1NjaGVtYVZlcnNpb24gPSAyOwogCi1Q
bHVnaW5JbmZvQ2FjaGUmIFBsdWdpbkluZm9DYWNoZTo6c2hhcmVkKCkKK1BsdWdpbkluZm9DYWNo
ZSYgUGx1Z2luSW5mb0NhY2hlOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxQbHVnaW5JbmZvQ2FjaGU+IHBsdWdpbkluZm9DYWNoZTsKICAgICByZXR1cm4gcGx1Z2lu
SW5mb0NhY2hlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5oCmluZGV4IGQzNTViOTA3NjI5YmU1Njg5M2E4NGQxYjlhZTg4
OTY4MDYxMTA2MzEuLmNhYjFlMGY5YjY0MTQ3YjJmZjdhZjRlNWIxYzc2NmE1NDcwM2ZiNGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZv
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2lu
SW5mb0NhY2hlLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3MgUGx1Z2luSW5mb0NhY2hlIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQbHVnaW5JbmZvQ2FjaGUpOwogICAgIGZyaWVuZCBjbGFz
cyBOZXZlckRlc3Ryb3llZDxQbHVnaW5JbmZvQ2FjaGU+OwogcHVibGljOgotICAgIHN0YXRpYyBQ
bHVnaW5JbmZvQ2FjaGUmIHNoYXJlZCgpOworICAgIHN0YXRpYyBQbHVnaW5JbmZvQ2FjaGUmIHNp
bmdsZXRvbigpOwogCiAgICAgYm9vbCBnZXRQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2lu
UGF0aCwgUGx1Z2luTW9kdWxlSW5mbyYpOwogICAgIHZvaWQgdXBkYXRlUGx1Z2luSW5mbyhjb25z
dCBTdHJpbmcmIHBsdWdpblBhdGgsIGNvbnN0IFBsdWdpbk1vZHVsZUluZm8mKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3Jl
VW5peC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbklu
Zm9TdG9yZVVuaXguY3BwCmluZGV4IDVmNTQwOWZlNGExMWI1OGNhZjBlZjAwZmVjYzhhNGMyMTM4
YmQ0NmIuLjNjNjY4NzE5ZmQzY2I1N2ViYWU4NjdlYmI1ZWYxMmRhMTU2M2I0ZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3Jl
VW5peC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVn
aW5JbmZvU3RvcmVVbml4LmNwcApAQCAtMTAyLDExICsxMDIsMTEgQEAgVmVjdG9yPFN0cmluZz4g
UGx1Z2luSW5mb1N0b3JlOjppbmRpdmlkdWFsUGx1Z2luUGF0aHMoKQogYm9vbCBQbHVnaW5JbmZv
U3RvcmU6OmdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1
bGVJbmZvJiBwbHVnaW4pCiB7CiAjaWYgUExBVEZPUk0oR1RLKQotICAgIGlmIChQbHVnaW5JbmZv
Q2FjaGU6OnNoYXJlZCgpLmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkKKyAgICBp
ZiAoUGx1Z2luSW5mb0NhY2hlOjpzaW5nbGV0b24oKS5nZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgs
IHBsdWdpbikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKE5ldHNjYXBlUGx1Z2lu
TW9kdWxlOjpnZXRQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbikpIHsKLSAgICAgICAgUGx1
Z2luSW5mb0NhY2hlOjpzaGFyZWQoKS51cGRhdGVQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdp
bik7CisgICAgICAgIFBsdWdpbkluZm9DYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlUGx1Z2luSW5m
byhwbHVnaW5QYXRoLCBwbHVnaW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYklu
c3BlY3RvclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQ
cm94eS5jcHAKaW5kZXggNzNlYjM1NjlhNWJmMjllYWNiMjBjNDNkNjY4NmM0ZmI2OTQzODY3NC4u
YmZkN2FkNTVkOTlkYWUwYzZmOThkNGFlNDIyOGQ5ZDRhNjczZjIyNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCkBAIC01OSw3ICs1OSw3IEBA
IGNvbnN0IHVuc2lnbmVkIFdlYkluc3BlY3RvclByb3h5Ojppbml0aWFsV2luZG93SGVpZ2h0ID0g
NjUwOwogCiBjbGFzcyBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgV2ViSW5zcGVjdG9yUGFnZUdyb3VwcyYgc2hhcmVkKCkKKyAgICBzdGF0aWMgV2ViSW5zcGVj
dG9yUGFnZUdyb3VwcyYgc2luZ2xldG9uKCkKICAgICB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxXZWJJbnNwZWN0b3JQYWdlR3JvdXBzPiBpbnN0YW5jZTsKICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwpAQCAtMTQ1LDcgKzE0NSw3IEBAIFdlYkluc3BlY3RvclByb3h5OjpXZWJJbnNw
ZWN0b3JQcm94eShXZWJQYWdlUHJveHkqIHBhZ2UpCiAgICAgLCBtX3JlbW90ZUluc3BlY3Rpb25Q
YWdlSWQoMCkKICNlbmRpZgogewotICAgIG1fbGV2ZWwgPSBXZWJJbnNwZWN0b3JQYWdlR3JvdXBz
OjpzaGFyZWQoKS5pbnNwZWN0b3JMZXZlbChtX3BhZ2UtPnBhZ2VHcm91cCgpKTsKKyAgICBtX2xl
dmVsID0gV2ViSW5zcGVjdG9yUGFnZUdyb3Vwczo6c2luZ2xldG9uKCkuaW5zcGVjdG9yTGV2ZWwo
bV9wYWdlLT5wYWdlR3JvdXAoKSk7CiAgICAgbV9wYWdlLT5wcm9jZXNzKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7CiB9CiAKQEAgLTE1NSwxNCArMTU1LDE0IEBAIFdl
Ykluc3BlY3RvclByb3h5Ojp+V2ViSW5zcGVjdG9yUHJveHkoKQogCiBXZWJQYWdlR3JvdXAqIFdl
Ykluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQYWdlR3JvdXAoKSBjb25zdAogewotICAgIHJldHVy
biBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaGFyZWQoKS5pbnNwZWN0b3JQYWdlR3JvdXBGb3JM
ZXZlbChtX2xldmVsKTsKKyAgICByZXR1cm4gV2ViSW5zcGVjdG9yUGFnZUdyb3Vwczo6c2luZ2xl
dG9uKCkuaW5zcGVjdG9yUGFnZUdyb3VwRm9yTGV2ZWwobV9sZXZlbCk7CiB9CiAKIHZvaWQgV2Vi
SW5zcGVjdG9yUHJveHk6OmludmFsaWRhdGUoKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VS
VkVSKQogICAgIGlmIChtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpCi0gICAgICAgIFdlYkluc3Bl
Y3RvclNlcnZlcjo6c2hhcmVkKCkudW5yZWdpc3RlclBhZ2UobV9yZW1vdGVJbnNwZWN0aW9uUGFn
ZUlkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKS51bnJlZ2lzdGVy
UGFnZShtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpOwogI2VuZGlmCiAKICAgICBtX3BhZ2UtPnBy
b2Nlc3MoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwpAQCAtMzU3LDcgKzM1
Nyw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnRvZ2dsZVBhZ2VQcm9maWxpbmcoKQogCiBi
b29sIFdlYkluc3BlY3RvclByb3h5Ojppc0luc3BlY3RvclBhZ2UoV2ViUGFnZVByb3h5JiBwYWdl
KQogewotICAgIHJldHVybiBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaGFyZWQoKS5pc0luc3Bl
Y3RvclBhZ2VHcm91cChwYWdlLnBhZ2VHcm91cCgpKTsKKyAgICByZXR1cm4gV2ViSW5zcGVjdG9y
UGFnZUdyb3Vwczo6c2luZ2xldG9uKCkuaXNJbnNwZWN0b3JQYWdlR3JvdXAocGFnZS5wYWdlR3Jv
dXAoKSk7CiB9CiAKIFdlYlByb2Nlc3NQb29sJiBXZWJJbnNwZWN0b3JQcm94eTo6aW5zcGVjdG9y
UHJvY2Vzc1Bvb2woKQpAQCAtNDMwLDcgKzQzMCw3IEBAIHN0YXRpYyB2b2lkIGRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oV0tQYWdlUmVmLCBXS0ZyYW1lUmVmIGZyYW1lUmVmLCBXS0Zy
CiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjplbmFibGVSZW1vdGVJbnNwZWN0aW9uKCkKIHsKICAg
ICBpZiAoIW1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCkKLSAgICAgICAgbV9yZW1vdGVJbnNwZWN0
aW9uUGFnZUlkID0gV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFyZWQoKS5yZWdpc3RlclBhZ2UodGhp
cyk7CisgICAgICAgIG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCA9IFdlYkluc3BlY3RvclNlcnZl
cjo6c2luZ2xldG9uKCkucmVnaXN0ZXJQYWdlKHRoaXMpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rv
clByb3h5OjpyZW1vdGVGcm9udGVuZENvbm5lY3RlZCgpCkBAIC02NDAsNyArNjQwLDcgQEAgYm9v
bCBXZWJJbnNwZWN0b3JQcm94eTo6c2hvdWxkT3BlbkF0dGFjaGVkKCkKIHZvaWQgV2ViSW5zcGVj
dG9yUHJveHk6OnNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiB7CiAgICAgQVNTRVJUKG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCk7Ci0gICAgV2ViSW5z
cGVjdG9yU2VydmVyOjpzaGFyZWQoKS5zZW5kTWVzc2FnZU92ZXJDb25uZWN0aW9uKG1fcmVtb3Rl
SW5zcGVjdGlvblBhZ2VJZCwgbWVzc2FnZSk7CisgICAgV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5n
bGV0b24oKS5zZW5kTWVzc2FnZU92ZXJDb25uZWN0aW9uKG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJ
ZCwgbWVzc2FnZSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAppbmRleCBjMDEwZmRlZjEyMTNkZDNhMTQ2NmMyZTFiNzYyMTg2NzVjNzUxODgz
Li5hMzQxMzE5YjIyYjY0ZTk5YWRjMzRmNjkzNTIzZTYyYzhhMTY0NzJlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIHB1Ymxp
YzoKICAgICAgICAgUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0YWJh
c2VRdW90YTo6RGVsYXllZFJlcGx5PiByZXBseTsKICAgICB9OwogCi0gICAgc3RhdGljIEV4Y2Vl
ZGVkRGF0YWJhc2VRdW90YVJlY29yZHMmIHNoYXJlZCgpOworICAgIHN0YXRpYyBFeGNlZWRlZERh
dGFiYXNlUXVvdGFSZWNvcmRzJiBzaW5nbGV0b24oKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZWNvcmQ+IGNyZWF0ZVJlY29yZCh1aW50NjRfdCBmcmFtZUlELCBTdHJpbmcgb3JpZ2luSWRlbnRp
ZmllciwKICAgICAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSwgU3RyaW5nIGRpc3BsYXlOYW1lLCB1
aW50NjRfdCBjdXJyZW50UXVvdGEsCkBAIC0xOTQsNyArMTk0LDcgQEAgcHJpdmF0ZToKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVjb3JkPiBtX2N1cnJlbnRSZWNvcmQ7CiB9OwogCi1FeGNlZWRlZERh
dGFiYXNlUXVvdGFSZWNvcmRzJiBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpzaGFyZWQo
KQorRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3JkcyYgRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVj
b3Jkczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RXhjZWVkZWRE
YXRhYmFzZVF1b3RhUmVjb3Jkcz4gcmVjb3JkczsKICAgICByZXR1cm4gcmVjb3JkczsKQEAgLTk4
NCw3ICs5ODQsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cmVjb3JkTmF2aWdhdGlvblNuYXBzaG90
KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiAgICAgICAgIHJldHVybjsKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5yZWNvcmRTbmFw
c2hvdCgqdGhpcywgaXRlbSk7CisgICAgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLnJl
Y29yZFNuYXBzaG90KCp0aGlzLCBpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGl0ZW0p
OwogI2VuZGlmCkBAIC0xNzUzLDcgKzE3NTMsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZmluZFBs
dWdpbihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCB1aW50MzJfdCBwcm9jZXNzVHlwZSwgY29ucwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcGx1Z2luUHJvY2Vzc1Rva2VuID0gUGx1Z2lu
UHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLnBsdWdpblByb2Nlc3NUb2tlbihwbHVnaW4sIHN0YXRp
Y19jYXN0PFBsdWdpblByb2Nlc3NUeXBlPihwcm9jZXNzVHlwZSksIHBsdWdpblByb2Nlc3NTYW5k
Ym94UG9saWN5KTsKKyAgICBwbHVnaW5Qcm9jZXNzVG9rZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdl
cjo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpbiwgc3RhdGljX2Nhc3Q8UGx1
Z2luUHJvY2Vzc1R5cGU+KHByb2Nlc3NUeXBlKSwgcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kp
OwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCkBAIC00NzYxLDcg
KzQ3NjEsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHkodWludDY0X3QgZnJhbWVJRCwgUGFzcwogCiB2b2lkIFdlYlBhZ2VQcm94eTo6
ZXhjZWVkZWREYXRhYmFzZVF1b3RhKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgb3Jp
Z2luSWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYg
ZGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwgdWludDY0X3QgY3VycmVudE9yaWdp
blVzYWdlLCB1aW50NjRfdCBjdXJyZW50RGF0YWJhc2VVc2FnZSwgdWludDY0X3QgZXhwZWN0ZWRV
c2FnZSwgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGNlZWRlZERhdGFiYXNl
UXVvdGE6OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7Ci0gICAgRXhjZWVkZWREYXRhYmFzZVF1b3Rh
UmVjb3JkcyYgcmVjb3JkcyA9IEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHM6OnNoYXJlZCgp
OworICAgIEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHMmIHJlY29yZHMgPSBFeGNlZWRlZERh
dGFiYXNlUXVvdGFSZWNvcmRzOjpzaW5nbGV0b24oKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhj
ZWVkZWREYXRhYmFzZVF1b3RhUmVjb3Jkczo6UmVjb3JkPiBuZXdSZWNvcmQgPSByZWNvcmRzLmNy
ZWF0ZVJlY29yZChmcmFtZUlELAogICAgICAgICBvcmlnaW5JZGVudGlmaWVyLCBkYXRhYmFzZU5h
bWUsIGRpc3BsYXlOYW1lLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwKICAgICAg
ICAgY3VycmVudERhdGFiYXNlVXNhZ2UsIGV4cGVjdGVkVXNhZ2UsIHJlcGx5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAKaW5kZXggMzhjMTll
MWZmMTg0OTVmZWFmMTA5Y2VmY2M4ODRjMDJjNmIwZDhhMS4uOTA5N2NiNTJiMjBiYjY2NDlmYTAx
N2UzM2EzOWQwZGZlMDc2MDg0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhc3RlYm9hcmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhc3RlYm9hcmRQcm94eS5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLVdlYlBhc3RlYm9hcmRQcm94eSYgV2ViUGFzdGVib2FyZFByb3h5OjpzaGFyZWQoKQor
V2ViUGFzdGVib2FyZFByb3h5JiBXZWJQYXN0ZWJvYXJkUHJveHk6OnNpbmdsZXRvbigpCiB7CiAg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwogICAgIHN0YXRpYyBMYXp5TmV2ZXJE
ZXN0cm95ZWQ8V2ViUGFzdGVib2FyZFByb3h5PiBwcm94eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaAppbmRleCAyZTQ2NzM4ODAwMzFkNmVkNmNhOTNj
M2VmNmQ2NzAwZGI1ODkxNGQ0Li40OTRhYWM5ZjgwOTY4NzRjYzA1NWZiYTg0MzdkZTUyNjY3ZmEy
MzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5o
CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFdlYlBhc3RlYm9hcmRQcm94eSA6IHB1YmxpYyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViUGFzdGVib2Fy
ZFByb3h5KTsKICAgICBmcmllbmQgY2xhc3MgTGF6eU5ldmVyRGVzdHJveWVkPFdlYlBhc3RlYm9h
cmRQcm94eT47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYlBhc3RlYm9hcmRQcm94eSYgc2hhcmVk
KCk7CisgICAgc3RhdGljIFdlYlBhc3RlYm9hcmRQcm94eSYgc2luZ2xldG9uKCk7CiAKICAgICB2
b2lkIGFkZFdlYlByb2Nlc3NQcm94eShXZWJQcm9jZXNzUHJveHkmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggODZhNmUyMDU0YzBhYzgzMDIw
YWUwZTBlYjZjNmNjN2UzZTkzMTA1Ny4uZTE5M2FkM2YzZmQyN2IxZmZhYzJlMjAwODI0ZjQ5Zjhh
MjgyYWUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQ
b29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CkBAIC02NzUsMTAgKzY3NSwxMCBAQCBXZWJQcm9jZXNzUHJveHkmIFdlYlByb2Nlc3NQb29sOjpj
cmVhdGVOZXdXZWJQcm9jZXNzKCkKICAgICBwYXJhbWV0ZXJzLm1lbW9yeUNhY2hlRGlzYWJsZWQg
PSBtX21lbW9yeUNhY2hlRGlzYWJsZWQ7CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
LSAgICBwYXJhbWV0ZXJzLmhhc0ltYWdlU2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNo
YXJlZCgpLmhhc0ltYWdlU2VydmljZXMoKTsKLSAgICBwYXJhbWV0ZXJzLmhhc1NlbGVjdGlvblNl
cnZpY2VzID0gU2VydmljZXNDb250cm9sbGVyOjpzaGFyZWQoKS5oYXNTZWxlY3Rpb25TZXJ2aWNl
cygpOwotICAgIHBhcmFtZXRlcnMuaGFzUmljaENvbnRlbnRTZXJ2aWNlcyA9IFNlcnZpY2VzQ29u
dHJvbGxlcjo6c2hhcmVkKCkuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOwotICAgIFNlcnZpY2Vz
Q29udHJvbGxlcjo6c2hhcmVkKCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMoKTsKKyAgICBwYXJh
bWV0ZXJzLmhhc0ltYWdlU2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lmhhc0ltYWdlU2VydmljZXMoKTsKKyAgICBwYXJhbWV0ZXJzLmhhc1NlbGVjdGlvblNlcnZpY2Vz
ID0gU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygp
OworICAgIHBhcmFtZXRlcnMuaGFzUmljaENvbnRlbnRTZXJ2aWNlcyA9IFNlcnZpY2VzQ29udHJv
bGxlcjo6c2luZ2xldG9uKCkuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOworICAgIFNlcnZpY2Vz
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMoKTsKICNlbmRp
ZgogCiAgICAgLy8gQWRkIGFueSBwbGF0Zm9ybSBzcGVjaWZpYyBwYXJhbWV0ZXJzCkBAIC03MTUs
NyArNzE1LDcgQEAgV2ViUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNzUG9vbDo6Y3JlYXRlTmV3V2Vi
UHJvY2VzcygpCiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbml0aWFs
aXplIHJlbW90ZSBpbnNwZWN0b3IgY29ubmVjdGlvbiBub3cgdGhhdCB3ZSBoYXZlIGEgc3ViLXBy
b2Nlc3MgdGhhdCBpcyBob3N0aW5nIG9uZSBvZiBvdXIgd2ViIHZpZXdzLgotICAgIEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKTsgCisgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNw
ZWN0b3I6OnNpbmdsZXRvbigpOyAKICNlbmRpZgogCiAgICAgcmV0dXJuIHByb2Nlc3M7CkBAIC0x
MTA1LDcgKzExMDUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdGFydE1lbW9yeVNhbXBsZXIo
Y29uc3QgZG91YmxlIGludGVydmFsKQogICAgIAogICAgIC8vIEZvciBVSVByb2Nlc3MKICNpZiBF
TkFCTEUoTUVNT1JZX1NBTVBMRVIpCi0gICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0
YXJ0KGludGVydmFsKTsKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaW5nbGV0b24oKS0+c3RhcnQo
aW50ZXJ2YWwpOwogI2VuZGlmCiAgICAgCiAgICAgLy8gRm9yIFdlYlByb2Nlc3MKQEAgLTExMjQs
NyArMTEyNCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3BNZW1vcnlTYW1wbGVyKCkKICAg
ICAKICAgICAvLyBGb3IgVUlQcm9jZXNzCiAjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQotICAg
IFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7CisgICAgV2ViTWVtb3J5U2FtcGxl
cjo6c2luZ2xldG9uKCktPnN0b3AoKTsKICNlbmRpZgogCiAgICAgc2VuZFRvQWxsUHJvY2Vzc2Vz
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9wTWVtb3J5U2FtcGxlcigpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94eS5jcHAKaW5kZXggYzI1N2EzODgyY2E1ZGJj
ZTI1NmI4OWM5ODY0ZmU0YmUwZWE1MjJiYi4uZGQwMDY0ODA0ZTgwNzRmMjM2Nzk1NzU2NGE4Njgy
YTExNDE4NWZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQcm94
eS5jcHAKQEAgLTk5LDcgKzk5LDcgQEAgV2ViUHJvY2Vzc1Byb3h5OjpXZWJQcm9jZXNzUHJveHko
V2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQogICAgICwgbV9udW1iZXJPZlRpbWVzU3VkZGVu
VGVybWluYXRpb25XYXNEaXNhYmxlZCgwKQogICAgICwgbV90aHJvdHRsZXIoc3RkOjptYWtlX3Vu
aXF1ZTxQcm9jZXNzVGhyb3R0bGVyPih0aGlzKSkKIHsKLSAgICBXZWJQYXN0ZWJvYXJkUHJveHk6
OnNoYXJlZCgpLmFkZFdlYlByb2Nlc3NQcm94eSgqdGhpcyk7CisgICAgV2ViUGFzdGVib2FyZFBy
b3h5OjpzaW5nbGV0b24oKS5hZGRXZWJQcm9jZXNzUHJveHkoKnRoaXMpOwogCiAgICAgY29ubmVj
dCgpOwogfQpAQCAtMTI2LDcgKzEyNiw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5Ojpjb25uZWN0
aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogICAgIEFTU0VSVCh0aGlz
LT5jb25uZWN0aW9uKCkgPT0gJmNvbm5lY3Rpb24pOwogCiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NI
SU0pCi0gICAgU2VjSXRlbVNoaW1Qcm94eTo6c2hhcmVkKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24o
Y29ubmVjdGlvbik7CisgICAgU2VjSXRlbVNoaW1Qcm94eTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6
ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAjZW5kaWYKIAogICAgIGZvciAoYXV0byYgcGFnZSA6
IG1fcGFnZU1hcC52YWx1ZXMoKSkKQEAgLTM4NCw3ICszODQsNyBAQCB2b2lkIFdlYlByb2Nlc3NQ
cm94eTo6Z2V0UGx1Z2lucyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lu
cywgVmVjdAogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogdm9pZCBXZWJQcm9jZXNz
UHJveHk6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHVpbnQ2NF90IHBsdWdpblByb2Nlc3NU
b2tlbiwgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5PiByZXBseSkKIHsKLSAgICBQbHVnaW5Qcm9jZXNz
TWFuYWdlcjo6c2hhcmVkKCkuZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJvY2Vz
c1Rva2VuLCByZXBseSk7CisgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpLmdl
dFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblByb2Nlc3NUb2tlbiwgcmVwbHkpOwogfQog
I2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hl
Y2tlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCmlu
ZGV4IGFmNDU5YTNiMDNlNWY1YjgxYWVjY2MwNGIwNGU4ZWNlN2IyODc2MWEuLjhhODU0MzRlYTgx
MjE4NDUwODE5Yjc1YTM4YWQ2Zjg4NWJlNmMzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlRleHRDaGVja2VyLmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotV2ViVGV4dENoZWNrZXIqIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKQorV2ViVGV4
dENoZWNrZXIqIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBXZWJU
ZXh0Q2hlY2tlciogdGV4dENoZWNrZXIgPSBhZG9wdFJlZihuZXcgV2ViVGV4dENoZWNrZXIpLmxl
YWtSZWYoKTsKICAgICByZXR1cm4gdGV4dENoZWNrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJUZXh0Q2hlY2tlci5oCmluZGV4IDM1OWU4MWVlNTM1NTMyMzVlNWE1MmI0NDhjZDlmMGUw
MTZjMjE3YWUuLjdjOTQ1YzcyNjI3YTJmZmJiZmEwMjdiZDE0MGE5YWMwYzI1NDE0YTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oCkBAIC0zNyw3ICszNyw3IEBA
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIAogY2xhc3MgV2ViVGV4dENoZWNrZXIgOiBwdWJsaWMgQVBJ
OjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpUeXBlOjpUZXh0Q2hlY2tlcj4gewogcHVibGljOgot
ICAgIHN0YXRpYyBXZWJUZXh0Q2hlY2tlciogc2hhcmVkKCk7CisgICAgc3RhdGljIFdlYlRleHRD
aGVja2VyKiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgc2V0Q2xpZW50KGNvbnN0IFdLVGV4dENo
ZWNrZXJDbGllbnRCYXNlKik7CiAgICAgV2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCgpIHsg
cmV0dXJuIG1fY2xpZW50OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
ZWZsL0V3a0RlYnVnLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0V3a0RlYnVnLmgK
aW5kZXggMGYxZTQ5Yjc2ZjY3YmZlNDFjMWRlMDRjMWNhZTM5OGY5YzJiODgyMS4uM2I0ZTRhOWEx
OTdmOWI3OTliMGExNDU1YjI5OWNmNGVmZWY5MWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2VmbC9Fd2tEZWJ1Zy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvRXdrRGVidWcuaApAQCAtMjksMTAgKzI5LDEwIEBACiAKICNpbmNsdWRlICJld2tfbWFp
bl9wcml2YXRlLmgiCiAKLSNkZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5BX0xPR19ET01fQ1JJVChF
d2tNYWluOjpzaGFyZWQoKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgRVJS
KC4uLikgRUlOQV9MT0dfRE9NX0VSUihFd2tNYWluOjpzaGFyZWQoKS5sb2dEb21haW5JZCgpLCBf
X1ZBX0FSR1NfXykKLSNkZWZpbmUgV0FSTiguLi4pIEVJTkFfTE9HX0RPTV9XQVJOKEV3a01haW46
OnNoYXJlZCgpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQotI2RlZmluZSBJTkZPKC4uLikg
RUlOQV9MT0dfRE9NX0lORk8oRXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQoKSwgX19WQV9B
UkdTX18pCi0jZGVmaW5lIERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoRXdrTWFpbjo6c2hhcmVk
KCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18pCisjZGVmaW5lIENSSVRJQ0FMKC4uLikgRUlO
QV9MT0dfRE9NX0NSSVQoRXdrTWFpbjo6c2luZ2xldG9uKCkubG9nRG9tYWluSWQoKSwgX19WQV9B
UkdTX18pCisjZGVmaW5lIEVSUiguLi4pIEVJTkFfTE9HX0RPTV9FUlIoRXdrTWFpbjo6c2luZ2xl
dG9uKCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18pCisjZGVmaW5lIFdBUk4oLi4uKSBFSU5B
X0xPR19ET01fV0FSTihFd2tNYWluOjpzaW5nbGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FS
R1NfXykKKyNkZWZpbmUgSU5GTyguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKEV3a01haW46OnNpbmds
ZXRvbigpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBEQkcoLi4uKSBFSU5B
X0xPR19ET01fREJHKEV3a01haW46OnNpbmdsZXRvbigpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJH
U19fKQogCiAjZW5kaWYgLy8gRXdrRGVidWdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcAppbmRleCBiMzdkMDlhNzdlYTBjZWZjMjA2ZWRlOWI3
OGJlNDEwYmE2YTg5OTRkLi4xN2JkMjUzZGY5NzAzMWM0YjkxNDA0YjMzZWIyNTg2Y2NiMzE4ZjM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZs
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNw
cApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNraQogICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZDsKIAogICAgIC8vIE5vdGlmeSB0aGUgY2xpZW50IGFib3V0IHRo
ZSBzZXR0aW5nIGNoYW5nZS4KLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
LnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5z
ZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVja2lu
Z0VuYWJsZWQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOwogI2VuZGlmCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBUZXh0Q2hlY2tl
cjo6Z3JhbW1hckNoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sKQogaW50NjRfdCBUZXh0
Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7CiAj
aWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQo
KS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKKyAgICByZXR1cm4gV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFn
KHBhZ2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocGFnZSk7CiAgICAgcmV0dXJuIDA7CkBA
IC0xMTMsNyArMTEzLDcgQEAgaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxsRG9j
dW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0
aFRhZyh0YWcpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuY2xv
c2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0odGFn
KTsKICNlbmRpZgpAQCAtMTk0LDcgKzE5NCw3IEBAIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IFRleHRDaGVja2VyOjpjaGVja1RleHRPZlBhcmFncmFwaChpbnQ2NF90IHNwZWxsRG9jdW1lCiB2
b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxsaW5nTG9jYXRpb24sIGlu
dDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5n
KHNwZWxsRG9jdW1lbnRUYWcsIHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNp
bmdsZXRvbigpLT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRh
ZywgdGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1lbnRU
YWcpOwogICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lkIFRl
eHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCwgY29u
c3QgU3RyaW5nJiwgY29ucwogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQsIGNvbnN0IFN0cmluZyYg
LCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0
b24oKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vl
c3Nlcyk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKICAgICBV
TlVTRURfUEFSQU0od29yZCk7CkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6
Z2V0R3Vlc3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcm
IHdvcmQKIHZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRU
YWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50
VGFnLCB3b3JkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmxl
YXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHNwZWxsRG9jdW1lbnRUYWcpOwogICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKQEAgLTI1NCw3ICsy
NTQsNyBAQCB2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB2b2lkIFRleHRDaGVja2VyOjppZ25vcmVXb3JkKGlu
dDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewogI2lmIEVOQUJM
RShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdu
b3JlV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2lu
Z2xldG9uKCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFS
QU0od29yZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNv
bnRleHRFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZs
LmNwcAppbmRleCBiNjU0NzI2YzE1NjUwYmE3Y2FlOWM3NWFiMWY1OWYwYTM5ODMwNDM0Li5mZmZi
MmZlZmM4YzU5ZjQ5ZjA0MGZhNjY5MGU1YWQyZTBjOTIzYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZUluc3BlY3RvclNlcnZlcigpCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBwYXJzZSAlcywgd3JvbmcgZm9ybWF0PyBVc2lu
ZyAxMjcuMC4wLjE6Mjk5OSBpbnN0ZWFkLiIsIHNlcnZlckFkZHJlc3MudXRmOCgpLmRhdGEoKSk7
CiAKLSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLmxpc3RlbihiaW5k
QWRkcmVzcywgcG9ydCkpCisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0
b24oKS5saXN0ZW4oYmluZEFkZHJlc3MsIHBvcnQpKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZG4ndCBzdGFydCBsaXN0ZW5pbmcgb246IElQIGFkZHJlc3M9JXMsIHBvcnQ9JWQuIiwgYmlu
ZEFkZHJlc3MudXRmOCgpLmRhdGEoKSwgcG9ydCk7CiAKICAgICAgICAgcmV0dXJuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAppbmRleCBkZTE5
NGFkODllMjRkZjRiMTI2Nzk5ZDFiNjI5YTU5MDVjOWYyODdhLi40ZmY4MjQ0NjlkZTBhN2I3MDYx
NDg0MWU0M2FmYmNiNGY5NDY2MmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvZ3RrL1RleHRDaGVja2VyR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
Z3RrL1RleHRDaGVja2VyR3RrLmNwcApAQCAtNDMsNyArNDMsNyBAQCBjb25zdCBUZXh0Q2hlY2tl
clN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogICAgIGlmIChkaWRJbml0aWFsaXplU3RhdGUp
CiAgICAgICAgIHJldHVybiB0ZXh0Q2hlY2tlclN0YXRlOwogCi0gICAgV2ViVGV4dENoZWNrZXJD
bGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCk7CisgICAg
V2ViVGV4dENoZWNrZXJDbGllbnQmIGNsaWVudCA9IFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24o
KS0+Y2xpZW50KCk7CiAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCA9IGNsaWVudC5jb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKICAg
ICB0ZXh0Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9ICBjbGllbnQuZ3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpOwogCkBAIC01NCw3ICs1NCw3IEBAIGNvbnN0IFRleHRDaGVj
a2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiAgIAogYm9vbCBUZXh0Q2hlY2tlcjo6aXND
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKQogewotICAgIHJldHVybiBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgp
OworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNvbnRp
bnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpzZXRD
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0NvbnRpbnVvdXNTcGVsbENoZWNr
aW5nRW5hYmxlZCkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2kKICAg
ICBpZiAoc3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCA9PSBpc0NvbnRp
bnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIHRleHRDaGVj
a2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBpc0NvbnRpbnVvdXNT
cGVsbENoZWNraW5nRW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQo
KS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKGJvb2wgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQpAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIFRleHRDaGVja2VyOjpzZXRHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKQogICAgIGlmIChzdGF0ZSgpLmlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCA9PSBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCA9IGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZDsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnNldEdyYW1t
YXJDaGVja2luZ0VuYWJsZWQoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBXZWJUZXh0
Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQo
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKQEAgLTg1
LDU3ICs4NSw1NyBAQCB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3Rh
dGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIAogaW50NjRfdCBUZXh0Q2hlY2tlcjo6dW5pcXVlU3Bl
bGxEb2N1bWVudFRhZyhXZWJQYWdlUHJveHkqIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsK
KyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS51bmlxdWVT
cGVsbERvY3VtZW50VGFnKHBhZ2UpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpjbG9zZVNwZWxs
RG9jdW1lbnRXaXRoVGFnKGludDY0X3QgdGFnKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRhZyh0YWcpOworICAgIFdlYlRl
eHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuY2xvc2VTcGVsbERvY3VtZW50V2l0aFRh
Zyh0YWcpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpjaGVja1NwZWxsaW5nT2ZTdHJpbmcoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIGludDMyX3QmIG1pc3NwZWxs
aW5nTG9jYXRpb24sIGludDMyX3QmIG1pc3NwZWxsaW5nTGVuZ3RoKQogewotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9j
dW1lbnRUYWcsIHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0
aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigp
LT5jbGllbnQoKS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dC50
b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5n
TGVuZ3RoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tHcmFtbWFyT2ZTdHJpbmcoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBTdHJpbmdWaWV3IHRleHQsIFZlY3RvcjxXZWJDb3JlOjpH
cmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludDMyX3QmIGJhZEdyYW1tYXJMb2NhdGlv
biwgaW50MzJfdCYgYmFkR3JhbW1hckxlbmd0aCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRl
eHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxv
Y2F0aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9u
KCktPmNsaWVudCgpLmNoZWNrR3JhbW1hck9mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRleHQu
dG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hckxvY2F0
aW9uLCBiYWRHcmFtbWFyTGVuZ3RoKTsKIH0KIAogYm9vbCBUZXh0Q2hlY2tlcjo6c3BlbGxpbmdV
SUlzU2hvd2luZygpCiB7Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xp
ZW50KCkuc3BlbGxpbmdVSUlzU2hvd2luZygpOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6
c2luZ2xldG9uKCktPmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAogdm9pZCBU
ZXh0Q2hlY2tlcjo6dG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygpCiB7Ci0gICAgV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJSXNTaG93aW5nKCk7Cisg
ICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS50b2dnbGVTcGVsbGluZ1VJ
SXNTaG93aW5nKCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRo
TWlzc3BlbGxlZFdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIG1p
c3NwZWxsZWRXb3JkKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBtaXNz
cGVsbGVkV29yZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS51
cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIG1pc3Nw
ZWxsZWRXb3JkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiBiYWRH
cmFtbWFyUGhyYXNlLCBjb25zdCBHcmFtbWFyRGV0YWlsJiBncmFtbWFyRGV0YWlsKQogewotICAg
IFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhH
cmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJE
ZXRhaWwpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudXBkYXRl
U3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIGJhZEdyYW1tYXJQ
aHJhc2UsIGdyYW1tYXJEZXRhaWwpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2Vz
Rm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCwgY29u
c3QgU3RyaW5nJiAvKiBjb250ZXh0ICovLCBWZWN0b3I8U3RyaW5nPiYgZ3Vlc3NlcykKIHsKLSAg
ICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxs
RG9jdW1lbnRUYWcsIHdvcmQsIGd1ZXNzZXMpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0
b24oKS0+Y2xpZW50KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vl
c3Nlcyk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmxlYXJuV29yZChzcGVsbERvY3Vt
ZW50VGFnLCB3b3JkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29yZChpbnQ2NF90
IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKLSAgICBXZWJUZXh0Q2hl
Y2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29y
ZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5pZ25vcmVXb3Jk
KHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpyZXF1ZXN0
Q2hlY2tpbmdPZlN0cmluZyhQYXNzUmVmUHRyPFRleHRDaGVja2VyQ29tcGxldGlvbj4pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCmlu
ZGV4IDVjYTVlZThmNjk4M2YxYzYxYzY5ZGFiMTZlMDFhZjhkZWJkMTkxMGIuLjBmOWUwYzdmZjM2
MDEyZjdiYjFiYzM4ZWIyMzQ4MGE3NjAxNzk4OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHN0
YXRpYyB2b2lkIGluaXRJbnNwZWN0b3JTZXJ2ZXIoKQogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGRuJ3QgcGFyc2UgJXMsIHdyb25nIGZvcm1hdD8gVXNlIDEyNy4w
LjAuMToyOTk5IGluc3RlYWQuIiwgc2VydmVyQWRkcmVzcy51dGY4KCkuZGF0YSgpKTsKIAotICAg
ICAgICBpZiAoIVdlYkluc3BlY3RvclNlcnZlcjo6c2hhcmVkKCkubGlzdGVuKGJpbmRBZGRyZXNz
LCBwb3J0KSkKKyAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLmxp
c3RlbihiaW5kQWRkcmVzcywgcG9ydCkpCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0
IHN0YXJ0IGxpc3RlbmluZyBvbjogSVAgYWRkcmVzcz0lcywgcG9ydD0lZC4iLCBiaW5kQWRkcmVz
cy51dGY4KCkuZGF0YSgpLCBwb3J0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVy
SU9TLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlcklPUy5oCmluZGV4IDc5MTBmYWE1OTg3OGQ1YjJkODgwMTNhNzU3MjE2N2I1MTEzNzkzZjMu
LjdjMzRjMzE3ODQwNWM2OTY0NTc1YTJjOGJkY2UyYTVlYjBjMTUyY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRs
ZXJJT1MuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYk1l
bW9yeVByZXNzdXJlSGFuZGxlciB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdl
Yk1lbW9yeVByZXNzdXJlSGFuZGxlcj47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYk1lbW9yeVBy
ZXNzdXJlSGFuZGxlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFdlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlciYgc2luZ2xldG9uKCk7CiAKIHByaXZhdGU6CiAgICAgV2ViTWVtb3J5UHJlc3N1cmVIYW5k
bGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9y
eVByZXNzdXJlSGFuZGxlcklPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2Vi
TWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCmluZGV4IGJkZDIzNjNlMGI2Mjk0NjRiYTlhYjQ4
OTgwN2NlOGJhZjYxNWE5ODAuLjFiYjVkM2ExNTRkYTU1OTMwYjkzYTQ4NmJlMGU4OGZjNTE2OWI2
YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJl
c3N1cmVIYW5kbGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2Vi
TWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tCkBAIC0zMyw3ICszMyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXImIFdlYk1lbW9yeVByZXNzdXJl
SGFuZGxlcjo6c2hhcmVkKCkKK1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlciYgV2ViTWVtb3J5UHJl
c3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxX
ZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI+IG1lbW9yeVByZXNzdXJlSGFuZGxlcjsKICAgICByZXR1
cm4gbWVtb3J5UHJlc3N1cmVIYW5kbGVyOwpAQCAtNDgsNyArNDgsNyBAQCBXZWJNZW1vcnlQcmVz
c3VyZUhhbmRsZXI6OldlYk1lbW9yeVByZXNzdXJlSGFuZGxlcigpCiAgICAgZGlzcGF0Y2hfc291
cmNlX3Qgc291cmNlID0gZGlzcGF0Y2hfc291cmNlX2NyZWF0ZShESVNQQVRDSF9TT1VSQ0VfVFlQ
RV9NRU1PUllTVEFUVVMsIDAsIERJU1BBVENIX01FTU9SWVNUQVRVU19QUkVTU1VSRV9XQVJOLCBk
aXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpKTsKICAgICBkaXNwYXRjaF9zZXRfY29udGV4dChzb3Vy
Y2UsIHRoaXMpOwogICAgIGRpc3BhdGNoX3NvdXJjZV9zZXRfZXZlbnRfaGFuZGxlcihzb3VyY2Us
IF57Ci0gICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaXNjYXJkU25hcHNob3RJ
bWFnZXMoKTsKKyAgICAgICAgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpc2NhcmRT
bmFwc2hvdEltYWdlcygpOwogICAgIH0pOwogICAgIGRpc3BhdGNoX3Jlc3VtZShzb3VyY2UpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KaW5k
ZXggMWM4OGFhNTM0NDI1ZmExZjhkYTRhMjZmZDYxMzk3ZDQ4ZmM4MWNhNS4uZGMwOTY5OTBjYzEy
YjY4ZDdkOGUyNDhiZDYzODg1NTcyZDBjYzE2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBQYWdl
Q2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1Zp
c3VhbGx5SWRsZSgpCiB7Ci0gICAgcmV0dXJuIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJl
ZCgpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgfHwgIWlzVmll
d1Zpc2libGUoKTsKKyAgICByZXR1cm4gV2luZG93U2VydmVyQ29ubmVjdGlvbjo6c2luZ2xldG9u
KCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zSGF2ZVN0b3BwZWQoKSB8fCAhaXNWaWV3
VmlzaWJsZSgpOwogfQogCiBMYXllckhvc3RpbmdNb2RlIFBhZ2VDbGllbnRJbXBsOjp2aWV3TGF5
ZXJIb3N0aW5nTW9kZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1NlY0l0ZW1TaGltUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJ
dGVtU2hpbVByb3h5LmNwcAppbmRleCBmM2Y4NDRmOTkzOTMyMTlkNGY2MWJmNzNlMDM1YWRjYTRl
ZjUzZjhiLi40MjAzOTEyMTUwM2MyM2ZjNWMzY2I3NmIyZDYzMDcxMTNkNTQ1MjRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1Qcm94eS5jcHAKQEAg
LTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVNlY0l0ZW1TaGltUHJveHkm
IFNlY0l0ZW1TaGltUHJveHk6OnNoYXJlZCgpCitTZWNJdGVtU2hpbVByb3h5JiBTZWNJdGVtU2hp
bVByb3h5OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBTZWNJdGVtU2hpbVByb3h5KiBwcm94
eTsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1Qcm94eS5oCmluZGV4IDNlNDk2MjQwZDFkYzc1NTE2
MWE3NWVmMTQ1NzJkNjYzMGU2MzNmMmYuLmFiYTNkMTYzMmQzYTEyMjBiYTMwNmIyNzZhY2QwZjlm
OTQ0ODVhN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VjSXRl
bVNoaW1Qcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VjSXRlbVNo
aW1Qcm94eS5oCkBAIC0zNyw3ICszNyw3IEBAIGNsYXNzIFNlY0l0ZW1SZXF1ZXN0RGF0YTsKIGNs
YXNzIFNlY0l0ZW1TaGltUHJveHkgOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVN
ZXNzYWdlUmVjZWl2ZXIgewogV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjSXRlbVNoaW1Qcm94eSk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFNlY0l0ZW1TaGltUHJveHkmIHNoYXJlZCgpOworICAgIHN0
YXRpYyBTZWNJdGVtU2hpbVByb3h5JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6
ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5oCmluZGV4IDhlYzc1NWRkZWNjYjdiNDY1
YTEzMjU3ODQ3YTYwZWMyYmMzNzU1YTIuLjNkZjdhYTk2MWVmNDQ1ZjQ1ODg2ZTMzYTlhMDE2MTBh
MjViZDcxNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2Vydmlj
ZXNDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNl
c0NvbnRyb2xsZXIuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBTZXJ2aWNlc0NvbnRyb2xsZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlcnZpY2VzQ29udHJvbGxlcik7CiAgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFNlcnZpY2VzQ29udHJvbGxlcj47CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFNlcnZpY2VzQ29udHJvbGxlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFNlcnZp
Y2VzQ29udHJvbGxlciYgc2luZ2xldG9uKCk7CiAKICAgICBib29sIGhhc0ltYWdlU2VydmljZXMo
KSBjb25zdCB7IHJldHVybiBtX2hhc0ltYWdlU2VydmljZXM7IH0KICAgICBib29sIGhhc1NlbGVj
dGlvblNlcnZpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNTZWxlY3Rpb25TZXJ2aWNlczsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xs
ZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5t
bQppbmRleCBlODJjNzJkOTFjOTA0NTk3YmU0NmE4ODAxZTNiMWJkYmE0NmRkYzE3Li4yZGQzNWM1
MGZkOTY0OGYxN2E3MTA4MzVlZDg5Y2M5YTVhMmZjOTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5tbQpAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotU2VydmljZXNDb250cm9sbGVyJiBTZXJ2aWNlc0Nv
bnRyb2xsZXI6OnNoYXJlZCgpCitTZXJ2aWNlc0NvbnRyb2xsZXImIFNlcnZpY2VzQ29udHJvbGxl
cjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2VydmljZXNDb250
cm9sbGVyPiBzaGFyZWRDb250cm9sbGVyOwogICAgIHJldHVybiBzaGFyZWRDb250cm9sbGVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9y
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oCmlu
ZGV4IDU4MDkzZmI0YjM2NDYzYzQwNjAyMDBiZDQyM2RmNGUwZTIwNTgyOWMuLjNkYzkxZjI5M2Q1
YWQzMTFhZjVkMTVhYzkwNGEzMTBjMTkwYTFkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTExNSw3ICsxMTUsNyBAQCBwdWJs
aWM6CiAgICAgVmlld1NuYXBzaG90U3RvcmUoKTsKICAgICB+Vmlld1NuYXBzaG90U3RvcmUoKTsK
IAotICAgIHN0YXRpYyBWaWV3U25hcHNob3RTdG9yZSYgc2hhcmVkKCk7CisgICAgc3RhdGljIFZp
ZXdTbmFwc2hvdFN0b3JlJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgcmVjb3JkU25hcHNob3Qo
V2ViUGFnZVByb3h5JiwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQppbmRleCAxYThhZTA3
MTlkMjk2OWNiODk1YTc1N2IzM2Q3NmNjYTc3MjllNjhiLi4zNWQxZjM1NDhiMWU5YzZlNzE2Y2U1
ODlhM2JjMzk5M2UxZDYzMDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvVmlld1NuYXBzaG90U3RvcmUubW0KQEAgLTU2LDcgKzU2LDcgQEAgVmlld1NuYXBzaG90U3Rv
cmU6On5WaWV3U25hcHNob3RTdG9yZSgpCiAgICAgZGlzY2FyZFNuYXBzaG90SW1hZ2VzKCk7CiB9
CiAKLVZpZXdTbmFwc2hvdFN0b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkKK1ZpZXdT
bmFwc2hvdFN0b3JlJiBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0
aWMgVmlld1NuYXBzaG90U3RvcmUmIHN0b3JlID0gKm5ldyBWaWV3U25hcHNob3RTdG9yZTsKICAg
ICByZXR1cm4gc3RvcmU7CkBAIC0xNTYsNyArMTU2LDcgQEAgVmlld1NuYXBzaG90OjpWaWV3U25h
cHNob3QodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5
dGUKICAgICAsIG1fc2l6ZShzaXplKQogewogICAgIGlmIChoYXNJbWFnZSgpKQotICAgICAgICBW
aWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsK
KyAgICAgICAgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpZEFkZEltYWdlVG9TbmFw
c2hvdCgqdGhpcyk7CiB9CiAKIFZpZXdTbmFwc2hvdDo6flZpZXdTbmFwc2hvdCgpCkBAIC0xNzgs
NyArMTc4LDcgQEAgdm9pZCBWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UoKQogICAgIGlmICghaGFz
SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJl
ZCgpLndpbGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdCgqdGhpcyk7CisgICAgVmlld1NuYXBzaG90
U3RvcmU6OnNpbmdsZXRvbigpLndpbGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdCgqdGhpcyk7CiAK
ICNpZiBVU0VfSU9TVVJGQUNFX1ZJRVdfU05BUFNIT1RTCiAgICAgbV9zdXJmYWNlID0gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1l
bnVQcm94eU1hYy5tbQppbmRleCBkYzY0OTVhMDRmYjhmN2JmZTI0MmY2ZTIwMzQ2MWQ4MmVkM2Fk
NDE1Li5kZGJhOGExYzZhNTk1NWRkMDk2OTc3YTg0OWQ5ZmZkNTIwM2JkZjJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpzZXR1
cFNlcnZpY2VzTWVudShjb25zdCBDb250ZXh0TWVudUNvbnRleHREYXRhJiBjb24KICAgICAvLyBJ
ZiB0aGVyZSBpcyBubyBzZXJ2aWNlcyBtZW51LCB0aGVuIHRoZSBleGlzdGluZyBzZXJ2aWNlcyBv
biB0aGUgc3lzdGVtIGhhdmUgY2hhbmdlZCwgc28gcmVmcmVzaCB0aGF0IGxpc3Qgb2Ygc2Vydmlj
ZXMuCiAgICAgLy8gSWYgPHJkYXI6Ly9wcm9ibGVtLzE3OTU0NzA5PiBpcyByZXNvbHZlZCB0aGVu
IHdlIGNhbiBtb3JlIGFjY3VyYXRlbHkga2VlcCB0aGUgbGlzdCB1cCB0byBkYXRlIHdpdGhvdXQg
dGhpcyBjYWxsLgogICAgIGlmICghbV9zZXJ2aWNlc01lbnUpCi0gICAgICAgIFNlcnZpY2VzQ29u
dHJvbGxlcjo6c2hhcmVkKCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMoKTsKKyAgICAgICAgU2Vy
dmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZWZyZXNoRXhpc3RpbmdTZXJ2aWNlcygpOwog
fQogCiB2b2lkIFdlYkNvbnRleHRNZW51UHJveHlNYWM6OmNsZWFyU2VydmljZXNNZW51KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVj
dGlvbi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0
aW9uLmgKaW5kZXggN2YwMjg2NWI4N2I5ZjgyMzcwNzcyODgzM2VjNjIyZDM1OTdlMjIxYi4uODM4
YTM0ZmI1YzJkNDRlZWU1NDY0ZTU3ZWRjNzBlMTBhZGJkM2IyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmgKQEAgLTMw
LDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdpbmRvd1NlcnZlckNvbm5l
Y3Rpb24gewogcHVibGljOgotICAgIHN0YXRpYyBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiBzaGFy
ZWQoKTsKKyAgICBzdGF0aWMgV2luZG93U2VydmVyQ29ubmVjdGlvbiYgc2luZ2xldG9uKCk7CiAK
ICAgICBib29sIGFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZDsg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZl
ckNvbm5lY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZl
ckNvbm5lY3Rpb24ubW0KaW5kZXggNGE3ZWZlNmU1NGQyNjY3NzZhY2E4MjBhZTg2M2ZkZjU5OWEy
YzgzOS4uODE5NTM1YzJhYzEyOWM4ZDUyMTIxOGM5NzU1Yzg0YjYxZDQ0ZjI4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlv
bi5tbQpAQCAtNDMsMTIgKzQzLDEyIEBAIHZvaWQgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6YXBw
bGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zU3RvcHBlZChib29sIHN0b3BwZWQpCiAKIHZvaWQg
V2luZG93U2VydmVyQ29ubmVjdGlvbjo6YXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zU3Rh
cnRlZCh1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90LCB2b2lkKiwgdWludDMyX3QpCiB7Ci0gICAg
V2luZG93U2VydmVyQ29ubmVjdGlvbjo6c2hhcmVkKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmlj
YXRpb25zU3RvcHBlZChmYWxzZSk7CisgICAgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6c2luZ2xl
dG9uKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zU3RvcHBlZChmYWxzZSk7CiB9CiAK
IHZvaWQgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6YXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRp
b25zU3RvcHBlZCh1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90LCB2b2lkKiwgdWludDMyX3QpCiB7
Ci0gICAgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6c2hhcmVkKCkuYXBwbGljYXRpb25XaW5kb3dN
b2RpZmljYXRpb25zU3RvcHBlZCh0cnVlKTsKKyAgICBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpz
aW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNTdG9wcGVkKHRydWUpOwog
fQogCiB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OndpbmRvd1NlcnZlckNvbm5lY3Rpb25T
dGF0ZUNoYW5nZWQoKQpAQCAtNTksNyArNTksNyBAQCB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rp
b246OndpbmRvd1NlcnZlckNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQoKQogCiAjZW5kaWYKIAotV2lu
ZG93U2VydmVyQ29ubmVjdGlvbiYgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6c2hhcmVkKCkKK1dp
bmRvd1NlcnZlckNvbm5lY3Rpb24mIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmdsZXRvbigp
CiB7CiAgICAgc3RhdGljIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24mIHdpbmRvd1NlcnZlckNvbm5l
Y3Rpb24gPSAqbmV3IFdpbmRvd1NlcnZlckNvbm5lY3Rpb247CiAgICAgcmV0dXJuIHdpbmRvd1Nl
cnZlckNvbm5lY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlv
bi5jcHAKaW5kZXggNDExNjNkOTFkZjViMGE2MGYyNTgyODI4MGM2NDNmMDRjMjEwZTYyNi4uZjY5
MGViNzNlOGE3ZGY0NzY2NzM5YjUyZjYwN2I5N2Q2NjhmNjFiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4
ZWREQi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcApAQCAtNTUsNyArNTUsNyBAQCBzdGF0aWMg
dWludDY0X3QgZ2VuZXJhdGVTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcigpCiBQYXNzUmVmUHRy
PFdlYklEQlNlcnZlckNvbm5lY3Rpb24+IFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmNyZWF0ZShj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG9wZW5pbmdP
cmlnaW4sIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBtYWluRnJhbWVPcmlnaW4pCiB7CiAgICAgUmVm
UHRyPFdlYklEQlNlcnZlckNvbm5lY3Rpb24+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBXZWJJREJT
ZXJ2ZXJDb25uZWN0aW9uKGRhdGFiYXNlTmFtZSwgb3BlbmluZ09yaWdpbiwgbWFpbkZyYW1lT3Jp
Z2luKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25u
ZWN0aW9uKCktPnJlZ2lzdGVyV2ViSURCU2VydmVyQ29ubmVjdGlvbigqcmVzdWx0KTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
cmVnaXN0ZXJXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCpyZXN1bHQpOwogICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOwogfQogCkBAIC03MSw3ICs3MSw3IEBAIFdlYklEQlNlcnZlckNvbm5lY3Rp
b246OldlYklEQlNlcnZlckNvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNv
bnN0CiAKIFdlYklEQlNlcnZlckNvbm5lY3Rpb246On5XZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCkK
IHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+cmVtb3ZlV2ViSURCU2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKCktPnJlbW92ZVdl
YklEQlNlcnZlckNvbm5lY3Rpb24oKnRoaXMpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpdCA6
IG1fc2VydmVyUmVxdWVzdHMpCiAgICAgICAgIGl0LnZhbHVlLT5yZXF1ZXN0QWJvcnRlZCgpOwpA
QCAtNzA1LDcgKzcwNSw3IEBAIHZvaWQgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6Y3Vyc29ySXRl
cmF0ZShJREJDdXJzb3JCYWNrZW5kJiwgY29uc3QgQ3Vyc29ySXRlcmF0CiAKIElQQzo6Q29ubmVj
dGlvbiogV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQog
ewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvRGF0YWJhc2VzL1dlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwCmluZGV4IDRlOTIzOTA1MTZkOWY4ZmFhZmRhMDZjYjBkODNjMjY5YjNlZWFkOTku
LjQyYTE1NzYyZDAwNDczYzNkN2ZhOGVjZmM4NDc4NjliOGFmZWQyOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dlYlRvRGF0YWJhc2VQcm9jZXNzQ29u
bmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2Vi
VG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjMsNyArNjMsNyBAQCB2b2lkIFdl
YlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aQogCiB2b2lkIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb25D
bG9zZWQodGhpcyk7CiB9CiAKIHZvaWQgV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5h
bWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJl
Z2lzdHJ5UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JS
ZWdpc3RyeVByb3h5LmNwcAppbmRleCA0NTMzNWVkODg3NmE2MTAyOWEwNjMyYTU0ZjUxNmE1NGNi
NmI4NTM0Li5kYWNlNTczZjE2YTM1Mzg0NjM1YWNhNzU5OTM4NzJiYzIxY2ZkMWQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHku
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQ
cm94eS5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgQmxv
YlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6VVJMJiB1
cmwsIFBhc3NSZWZQdHI8QmxvYkRhdGFGaWxlUmVmZXJlbmNlPiBmaWxlLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnRUeXBlKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0
d29ya1Byb2Nlc3MoKSk7CisgICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNO
ZXR3b3JrUHJvY2VzcygpKTsKIAogICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBleHRlbnNp
b25IYW5kbGU7CiAKQEAgLTQ4LDQzICs0OCw0MyBAQCB2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojpy
ZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVSTCYgdXJsLCBQYXNzUmVmUHRyPAog
ICAgIGlmICghZmlsZS0+cGF0aCgpLmlzRW1wdHkoKSkKICAgICAgICAgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlSGFuZGxlKGZpbGUtPnBhdGgoKSwgU2FuZGJveEV4dGVuc2lvbjo6UmVhZE9ubHks
IGV4dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29u
bmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpSZWdpc3RlckZpbGVCbG9iVVJMKHVybCwgZmlsZS0+cGF0aCgpLCBleHRl
bnNpb25IYW5kbGUsIGNvbnRlbnRUeXBlKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmwsIGZpbGUt
PnBhdGgoKSwgZXh0ZW5zaW9uSGFuZGxlLCBjb250ZW50VHlwZSksIDApOwogfQogCiB2b2lkIEJs
b2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxC
bG9iUGFydD4gYmxvYlBhcnRzLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewotICAgIEFT
U0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CisgICAgQVNT
RVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxv
YlVSTCh1cmwsIGJsb2JQYXJ0cywgY29udGVudFR5cGUpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkwodXJsLCBi
bG9iUGFydHMsIGNvbnRlbnRUeXBlKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6
OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwpCiB7Ci0g
ICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAg
ICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwog
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0
ZXJCbG9iVVJMRnJvbVVSTCh1cmwsIHNyY1VSTCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZyb21VUkwodXJs
LCBzcmNVUkwpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5yZWdpc3RlckJs
b2JVUkwoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6VW5yZWdpc3RlckJsb2JVUkwodXJsKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6VW5yZWdpc3RlckJs
b2JVUkwodXJsKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxv
YlVSTEZvclNsaWNlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCwgbG9uZyBsb25n
IHN0YXJ0LCBsb25nIGxvbmcgZW5kKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQo
KS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CisgICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5l
dHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKHVybCwgc3JjVVJM
LCBzdGFydCwgZW5kKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UodXJsLCBzcmNVUkwsIHN0YXJ0
LCBlbmQpLCAwKTsKIH0KIAogdW5zaWduZWQgbG9uZyBsb25nIEJsb2JSZWdpc3RyeVByb3h5Ojpi
bG9iU2l6ZShjb25zdCBVUkwmIHVybCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKICAgICB1aW50NjRfdCByZXN1bHRTaXplOwot
ICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkJsb2JTaXplKHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
QmxvYlNpemU6OlJlcGx5KHJlc3VsdFNpemUpLCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZSh1cmwpLCBNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkJsb2JTaXplOjpSZXBseShyZXN1
bHRTaXplKSwgMCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiByZXN1bHRTaXplOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5t
bQppbmRleCBkYjI4Mjc3MDQ0NzhiMjRlMGFlNzQwZmY1NDRlY2IyNzQ2NjBiMGQ0Li4zMWVlZWQy
MDEzNjMxMWJlNjdhZmYzMTFlYjc4YzM1OGQzMmNjZGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVn
SW5GcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5tbQpAQCAtNDgsNyArNDgsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiArIChpbnN0YW5jZXR5cGUpbG9va1VwRnJhbWVGcm9t
SGFuZGxlOihfV0tGcmFtZUhhbmRsZSAqKWhhbmRsZQogewotICAgIFdlYkZyYW1lKiB3ZWJGcmFt
ZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGhhbmRsZS5fZnJhbWVJRCk7CisgICAg
V2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoaGFu
ZGxlLl9mcmFtZUlEKTsKICAgICBpZiAoIXdlYkZyYW1lKQogICAgICAgICByZXR1cm4gbmlsOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAKaW5kZXggOWQ4OGZkMGIyZjQ3MmM2
YjczZTEwMTFjM2E1YTE2YmRhYjY0MThlYS4uMGFlOTEzYjJjYTFiMzIzMGI4MjA3YzhkNDk4MWI0
NGU4MzVkNWRhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcApAQCAtMTYz
LDcgKzE2Myw3IEBAIHN0YXRpYyB2b2lkIGRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlKFdLQnVu
ZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyCiAgICAgbWVzc2FnZS5zZXQoU3Ry
aW5nOjpmcm9tVVRGOCgiRnJhbWUiKSwgdG9JbXBsKGZyYW1lKSk7CiAgICAgbWVzc2FnZS5zZXQo
U3RyaW5nOjpmcm9tVVRGOCgiSWRlbnRpZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50
aWZpZXIpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJSZXF1ZXN0IiksIHRv
SW1wbChyZXF1ZXN0KSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUo
KS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRJbml0aWF0ZUxvYWRG
b3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkp
LmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5w
b3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZEluaXRpYXRlTG9hZEZvclJl
c291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0
KCkpOwogfQogCiBzdGF0aWMgV0tVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdEZvckZyYW1l
KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlm
aWVyLCBXS1VSTFJlcXVlc3RSZWYgd2tSZXF1ZXN0LCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVkaXJl
Y3RSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTE4OCw3ICsxODgsNyBAQCBz
dGF0aWMgV0tVUkxSZXF1ZXN0UmVmIHdpbGxTZW5kUmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZUZyYQogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgo
IlJlcXVlc3QiKSwgbmV3UmVxdWVzdC5nZXQoKSk7CiAgICAgaWYgKCFyZWRpcmVjdFJlc291cmNl
UmVzcG9uc2UuaXNOdWxsKCkpCiAgICAgICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgo
IlJlZGlyZWN0UmVzcG9uc2UiKSwgdG9JbXBsKHdrUmVkaXJlY3RSZXNwb25zZSkpOwotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6
ZnJvbVVURjgoIldlYlBhZ2UuRGlkU2VuZFJlcXVlc3RGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rp
b25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21V
VEY4KCJXZWJQYWdlLkRpZFNlbmRSZXF1ZXN0Rm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5
OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CiAKICAgICByZXR1cm4gdG9BUEko
bmV3UmVxdWVzdC5yZWxlYXNlKCkubGVha1JlZigpKTsKIH0KQEAgLTE5OSw3ICsxOTksNyBAQCBz
dGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tCdW5kbGVGcmFtZVJlZgogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgo
IlBhZ2UiKSwgdG9JbXBsKHBhZ2UpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4
KCJJZGVudGlmaWVyIiksIEFQSTo6VUludDY0OjpjcmVhdGUoaWRlbnRpZmllcikpOwogICAgIG1l
c3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIlJlc3BvbnNlIiksIHRvSW1wbChyZXNwb25zZSkp
OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdl
KFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2Ui
KSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2Uo
U3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSIp
LCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKIH0K
IAogc3RhdGljIHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllciwgdWlu
dDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKikKQEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdl
LCBXS0J1bmRsZUZyYQogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIlBhZ2UiKSwg
dG9JbXBsKHBhZ2UpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlm
aWVyIiksIEFQSTo6VUludDY0OjpjcmVhdGUoaWRlbnRpZmllcikpOwogICAgIG1lc3NhZ2Uuc2V0
KFN0cmluZzo6ZnJvbVVURjgoIkNvbnRlbnRMZW5ndGgiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShs
ZW5ndGgpKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0
TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
Rm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2Up
KS5nZXQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+
cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRSZWNlaXZlQ29udGVudExl
bmd0aEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNz
YWdlKSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2Uo
V0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZp
ZXIsIGNvbnN0IHZvaWQqKQpAQCAtMjE2LDcgKzIxNiw3IEBAIHN0YXRpYyB2b2lkIGRpZEZpbmlz
aExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiwg
dWluCiAgICAgQVBJOjpEaWN0aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2U7CiAgICAgbWVzc2FnZS5z
ZXQoU3RyaW5nOjpmcm9tVVRGOCgiUGFnZSIpLCB0b0ltcGwocGFnZSkpOwogICAgIG1lc3NhZ2Uu
c2V0KFN0cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShp
ZGVudGlmaWVyKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+
cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRGaW5pc2hMb2FkRm9yUmVz
b3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQo
KSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1l
c3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2Ui
KSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFdLRXJyb3JSZWYgZXJy
b3IsIGNvbnN0IHZvaWQqKQpAQCAtMjI1LDcgKzIyNSw3IEBAIHN0YXRpYyB2b2lkIGRpZEZhaWxM
b2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVp
bnQ2CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUGFnZSIpLCB0b0ltcGwocGFn
ZSkpOwogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJ
OjpVSW50NjQ6OmNyZWF0ZShpZGVudGlmaWVyKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpm
cm9tVVRGOCgiRXJyb3IiKSwgdG9JbXBsKGVycm9yKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFn
ZS5EaWRGYWlsTG9hZEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6
bW92ZShtZXNzYWdlKSkuZ2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVj
dGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkRmFp
bExvYWRGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVz
c2FnZSkpLmdldCgpKTsKIH0KIAogY2xhc3MgUGFnZUNvbnRleHRNZW51Q2xpZW50IGZpbmFsIDog
cHVibGljIEFQSTo6SW5qZWN0ZWRCdW5kbGU6OlBhZ2VDb250ZXh0TWVudUNsaWVudCB7CkBAIC00
NzgsNyArNDc4LDcgQEAgdm9pZCB3ZWJraXRXZWJQYWdlRGlkUmVjZWl2ZU1lc3NhZ2UoV2ViS2l0
V2ViUGFnZSogcGFnZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlTmEKICAgICAgICAgbWVzc2FnZVJl
cGx5LnNldCgiUGFnZSIsIHdlYlBhZ2UpOwogICAgICAgICBtZXNzYWdlUmVwbHkuc2V0KCJDYWxs
YmFja0lEIiwgQVBJOjpVSW50NjQ6OmNyZWF0ZShjYWxsYmFja0lEKSk7CiAgICAgICAgIG1lc3Nh
Z2VSZXBseS5zZXQoIlNuYXBzaG90Iiwgc25hcHNob3RJbWFnZSk7Ci0gICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKCJXZWJQYWdlLkRpZEdl
dFNuYXBzaG90IiwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2VSZXBs
eSkpLmdldCgpKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5k
bGUoKS0+cG9zdE1lc3NhZ2UoIldlYlBhZ2UuRGlkR2V0U25hcHNob3QiLCBBUEk6OkRpY3Rpb25h
cnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZVJlcGx5KSkuZ2V0KCkpOwogICAgIH0gZWxzZQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250
cm9sbGVyLm1tCmluZGV4IDJmYjhmOTUzOWVjYzgzMTE0ZDI2YTY2YTZhYzQzNzc3NjZjYmY4ODcu
LmIwYTI3NDU0MjM0NjkzMzQyNzU2ZTJkNGJmN2MzMWYzZTM2NzYyOWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nl
c3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dz
ZXJDb250ZXh0Q29udHJvbGxlci5tbQpAQCAtNDAyLDcgKzQwMiw3IEBAIHN0YXRpYyB2b2lkIHNl
dFVwUmVzb3VyY2VMb2FkQ2xpZW50KFdLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29u
dHJvbGxlciAqCiAKICsgKGluc3RhbmNldHlwZSlsb29rVXBCcm93c2luZ0NvbnRleHRGcm9tSGFu
ZGxlOihXS0Jyb3dzaW5nQ29udGV4dEhhbmRsZSAqKWhhbmRsZQogewotICAgIFdlYlBhZ2UqIHdl
YlBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKGhhbmRsZS5wYWdlSUQpOworICAg
IFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKGhhbmRs
ZS5wYWdlSUQpOwogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAt
NDEzLDcgKzQxMyw3IEBAIHN0YXRpYyB2b2lkIHNldFVwUmVzb3VyY2VMb2FkQ2xpZW50KFdLV2Vi
UHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlciAqCiB7CiAgICAgaWYgKCFfcmVt
b3RlT2JqZWN0UmVnaXN0cnkpIHsKICAgICAgICAgX3JlbW90ZU9iamVjdFJlZ2lzdHJ5ID0gYWRv
cHROUyhbW19XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5IGFsbG9jXSBfaW5pdFdpdGhNZXNzYWdlU2Vu
ZGVyOipfcGFnZV0pOwotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU9iamVjdFJlZ2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIF9wYWdlLT5wYWdlSUQoKSwgW19yZW1vdGVPYmplY3RSZWdpc3RyeSByZW1vdGVPYmplY3RS
ZWdpc3RyeV0pOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU9iamVjdFJlZ2lzdHJ5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIF9wYWdlLT5wYWdlSUQoKSwgW19yZW1vdGVPYmplY3RSZWdpc3RyeSByZW1vdGVPYmplY3RS
ZWdpc3RyeV0pOwogICAgIH0KIAogICAgIHJldHVybiBfcmVtb3RlT2JqZWN0UmVnaXN0cnkuZ2V0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCmluZGV4IGZmMGFmZDlkZTNiOTVlODU4MmZlOGUyZDc2
NWJlZjZiYjg4YzUzN2IuLmI0ZTZmZTRkM2IzYTdlZTBjYzI2MGVlNDk2YTEzNmEwNWE0YzliYjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCkBAIC0xMTYsMzIgKzExNiwzMiBAQCB2b2lkIEluamVj
dGVkQnVuZGxlOjppbml0aWFsaXplQ2xpZW50KGNvbnN0IFdLQnVuZGxlQ2xpZW50QmFzZSogY2xp
ZW50KQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpwb3N0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHkpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJv
Y2Vzc1Bvb2w6OkhhbmRsZU1lc3NhZ2UobWVzc2FnZU5hbWUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIDApOwor
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpIYW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBV
c2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KG1lc3NhZ2VCb2R5KSkpLCAwKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVz
c2FnZUJvZHksIFJlZlB0cjxBUEk6Ok9iamVjdD4mIHJldHVybkRhdGEpCiB7CiAgICAgVXNlckRh
dGEgcmV0dXJuVXNlckRhdGE7CiAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6
SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZTo6UmVwbHkocmV0
dXJuVXNlckRhdGEpLCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6
SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZTo6UmVwbHko
cmV0dXJuVXNlckRhdGEpLCAwKSkKICAgICAgICAgcmV0dXJuRGF0YSA9IG51bGxwdHI7CiAgICAg
ZWxzZQotICAgICAgICByZXR1cm5EYXRhID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3Jt
SGFuZGxlc1RvT2JqZWN0cyhyZXR1cm5Vc2VyRGF0YS5vYmplY3QoKSk7CisgICAgICAgIHJldHVy
bkRhdGEgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3Rz
KHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKIH0KIAogV2ViQ29ubmVjdGlvbiogSW5qZWN0ZWRC
dW5kbGU6OndlYkNvbm5lY3Rpb25Ub1VJUHJvY2VzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLndlYkNvbm5lY3Rpb25Ub1VJUHJvY2VzcygpOworICAgIHJldHVy
biBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MoKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2Vw
dCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXI+KCktPnNldEhUVFBDb29raWVBY2NlcHRQb2xpY3koYWNjZXB0ID8gSFRUUENvb2tpZUFjY2Vw
dFBvbGljeUFsd2F5cyA6IEhUVFBDb29raWVBY2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVu
dERvbWFpbik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJDb29r
aWVNYW5hZ2VyPigpLT5zZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KGFjY2VwdCA/IEhUVFBDb29r
aWVBY2NlcHRQb2xpY3lBbHdheXMgOiBIVFRQQ29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWlu
RG9jdW1lbnREb21haW4pOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRDYWNoZU1vZGVs
KHVpbnQzMl90IGNhY2hlTW9kZWwpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2V0Q2Fj
aGVNb2RlbChjYWNoZU1vZGVsKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRDYWNo
ZU1vZGVsKGNhY2hlTW9kZWwpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpvdmVycmlkZUJv
b2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJQYWdlR3JvdXBQcm94eSogcGFnZUdyb3VwLCBj
b25zdCBTdHJpbmcmIHByZWZlcmVuY2UsIGJvb2wgZW5hYmxlZCkKQEAgLTM0MiwxOSArMzQyLDE5
IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsZWFy
QWxsRGF0YWJhc2VzKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdl
YkRhdGFiYXNlTWFuYWdlcj4oKS0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJEYXRhYmFzZU1hbmFnZXI+KCktPmRlbGV0ZUFs
bERhdGFiYXNlcygpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXREYXRhYmFzZVF1b3Rh
KHVpbnQ2NF90IHF1b3RhKQogewogICAgIC8vIEhpc3RvcmljYWxseSwgd2UndmUgdXNlZCB0aGUg
Zm9sbG93aW5nIChzb21ld2hhdCBub24tc2Vuc2ljYWwpIHN0cmluZwogICAgIC8vIGZvciB0aGUg
ZGF0YWJhc2VJZGVudGlmaWVyIG9mIGxvY2FsIGZpbGVzLgotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnN1cHBsZW1lbnQ8V2ViRGF0YWJhc2VNYW5hZ2VyPigpLT5zZXRRdW90YUZvck9yaWdpbigi
ZmlsZV9fMCIsIHF1b3RhKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50
PFdlYkRhdGFiYXNlTWFuYWdlcj4oKS0+c2V0UXVvdGFGb3JPcmlnaW4oImZpbGVfXzAiLCBxdW90
YSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsZWFyQXBwbGljYXRpb25DYWNoZSgpCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlcj4oKS0+ZGVsZXRlQWxsRW50cmllcygpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnN1cHBsZW1lbnQ8V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI+KCktPmRlbGV0ZUFsbEVu
dHJpZXMoKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hl
Rm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQpAQCAtMzY1LDcgKzM2NSw3IEBA
IHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihjb25z
dCBTdHJpbmcmIG9yaWdpblN0cmluZykKIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0QXBwQ2Fj
aGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBzaXplKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnN1cHBsZW1lbnQ8V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI+KCktPnNldEFwcENhY2hlTWF4
aW11bVNpemUoc2l6ZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxX
ZWJBcHBsaWNhdGlvbkNhY2hlTWFuYWdlcj4oKS0+c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShzaXpl
KTsKIH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGU6OmFwcENhY2hlVXNhZ2VGb3JPcmlnaW4o
Y29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcpCkBAIC01ODYsNyArNTg2LDcgQEAgdWludDY0X3Qg
SW5qZWN0ZWRCdW5kbGU6OndlYk5vdGlmaWNhdGlvbklEKEpTQ29udGV4dFJlZiBqc0NvbnRleHQs
IEpTVmFsdWVSZWYganMKICAgICBXZWJDb3JlOjpOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbiA9
IEpTTm90aWZpY2F0aW9uOjp0b1dyYXBwZWQodG9KUyh0b0pTKGpzQ29udGV4dCksIGpzTm90aWZp
Y2F0aW9uKSk7CiAgICAgaWYgKCFub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXI+KCktPm5vdGlmaWNhdGlvbklERm9yVGVzdGluZyhub3RpZmljYXRpb24pOworICAgIHJl
dHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXI+KCktPm5vdGlmaWNhdGlvbklERm9yVGVzdGluZyhub3RpZmljYXRpb24pOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oanNDb250ZXh0KTsKICAgICBVTlVTRURfUEFSQU0oanNOb3RpZmlj
YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCBhOTRjNzljMzM3N2Y2MGRl
Yjg4MjJlNDc2ZGE1YjU5ZGIyYzkxZGE0Li44MzcwY2M0ZTc2MjlhYTQ2ZmIwMjFhZjlmMDM3NDU3
MGQ2OTVkY2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNTYsNyArNTYsNyBA
QCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246On5OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKQog
dm9pZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpNZXNzYWdlRGVjb2RlciYgZGVjb2RlcikKIHsKICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlJlc291
cmNlTG9hZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgaWYgKFdlYlJlc291
cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlciA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlJl
c291cmNlTG9hZFNjaGVkdWxlcigpLndlYlJlc291cmNlTG9hZGVyRm9ySWRlbnRpZmllcihkZWNv
ZGVyLmRlc3RpbmF0aW9uSUQoKSkpCisgICAgICAgIGlmIChXZWJSZXNvdXJjZUxvYWRlciogd2Vi
UmVzb3VyY2VMb2FkZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKS53ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIoZGVjb2Rlci5kZXN0aW5h
dGlvbklEKCkpKQogICAgICAgICAgICAgd2ViUmVzb3VyY2VMb2FkZXItPmRpZFJlY2VpdmVXZWJS
ZXNvdXJjZUxvYWRlck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm47CkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpNZXNzCiB2
b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikK
IHsKICAgICAvLyBUaGUgTmV0d29ya1Byb2Nlc3MgcHJvYmFibHkgY3Jhc2hlZC4KLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2Vk
KHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKaW5kZXggNDM0Nzkw
YThjMmU2NWFmNzM3YzM0MGQ2NGE0YzcxYjRlYzlmNWJhYy4uODAyNDVmYjZiZmUwZmFlZmZiNThm
M2Y5NzM2MWY3YTI5ZjllNTE4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5jcHAKQEAgLTE4
MCw3ICsxODAsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2NoZWR1bGVMb2Fk
KFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgQ2FjaAogCiAgICAgQVNTRVJUKChsb2Fk
UGFyYW1ldGVycy53ZWJQYWdlSUQgJiYgbG9hZFBhcmFtZXRlcnMud2ViRnJhbWVJRCkgfHwgbG9h
ZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFza0NsaWVudEZvckFu
eUNyZWRlbnRpYWxzKTsKIAotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6U2NoZWR1bGVSZXNvdXJjZUxvYWQobG9hZFBhcmFtZXRlcnMpLCAwKSkg
eworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6U2NoZWR1bGVSZXNvdXJjZUxvYWQobG9hZFBhcmFtZXRlcnMpLCAwKSkgewogICAgICAgICAv
LyBXZSBwcm9iYWJseSBmYWlsZWQgdG8gc2NoZWR1bGUgdGhpcyBsb2FkIHdpdGggdGhlIE5ldHdv
cmtQcm9jZXNzIGJlY2F1c2UgaXQgaGFkIGNyYXNoZWQuCiAgICAgICAgIC8vIFRoaXMgbG9hZCB3
aWxsIG5ldmVyIHN1Y2NlZWQgc28gd2Ugd2lsbCBzY2hlZHVsZSBpdCB0byBmYWlsIGFzeW5jaHJv
bm91c2x5LgogICAgICAgICBzY2hlZHVsZUludGVybmFsbHlGYWlsZWRMb2FkKHJlc291cmNlTG9h
ZGVyKTsKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6
cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKICAgICBpZiAoIWxvYWRlcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6UmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllciksIDApOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbW92ZUxvYWRJ
ZGVudGlmaWVyKGlkZW50aWZpZXIpLCAwKTsKIAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0
aGlzIFdlYlJlc291cmNlTG9hZGVyIG1pZ2h0IGJlIGp1c3QgYWJvdXQgdG8gbWVzc2FnZSBiYWNr
IHRvIHRoZSBOZXR3b3JrUHJvY2VzcyAoZS5nLiBDb250aW51ZVdpbGxTZW5kUmVxdWVzdCkKICAg
ICAvLyBidXQgdGhlcmUncyBubyBwb2ludCBpbiBkb2luZyBzbyBhbnltb3JlLgpAQCAtMjM2LDcg
KzIzNiw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VM
b2FkZXIqIHJlc291cmNlTG9hZGVyKQogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNl
dERlZmVyc0xvYWRpbmcoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBib29sIGRlZmVy
cykKIHsKICAgICBSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIgPSByZXNvdXJjZUxv
YWRlci0+aWRlbnRpZmllcigpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25u
ZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OlNldERlZmVyc0xvYWRpbmcoaWRlbnRpZmllciwgZGVmZXJzKSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0RGVm
ZXJzTG9hZGluZyhpZGVudGlmaWVyLCBkZWZlcnMpLCAwKTsKIH0KIAogdm9pZCBXZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXI6OmNyb3NzT3JpZ2luUmVkaXJlY3RSZWNlaXZlZChSZXNvdXJjZUxvYWRl
ciosIGNvbnN0IFVSTCYpCkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXI6OnNlcnZlUGVuZGluZ1JlcXVlc3RzKFJlc291cmNlTG9hZFByaW9yaXR5IG1pbmlt
dW0KICAgICBpZiAobV9zdXNwZW5kUGVuZGluZ1JlcXVlc3RzQ291bnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNl
cnZlUGVuZGluZ1JlcXVlc3RzKG1pbmltdW1Qcmlvcml0eSksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNlcnZlUGVuZGluZ1JlcXVlc3Rz
KG1pbmltdW1Qcmlvcml0eSksIDApOwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c3VzcGVuZFBlbmRpbmdSZXF1ZXN0cygpCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBXZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlc3VtZVBlbmRpbmdSZXF1ZXN0cygpCiAKIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVkKGVuYWJsZWQpLCBNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldFNlcmlhbExvYWRpbmdFbmFibGVkOjpSZXBseSgpLCAw
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoZW5hYmxlZCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQ6OlJlcGx5KCksIDAp
OwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6bmV0d29ya1Byb2Nlc3NDcmFz
aGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
UmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDZkNjY4ZDU4NDRjZDViYWRhNDA5NTVmZWIzMGQ5NmI4
MzIzYWUxM2EuLjg5ZDE3OGJhMzIzZTIyNWMwNDJkMTFlNGUwMzBjMThkMjdlNzk3MWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZGVyLmNwcApAQCAtNjEsNyArNjEsNyBAQCBXZWJSZXNvdXJjZUxvYWRlcjo6fldlYlJlc291
cmNlTG9hZGVyKCkKIAogSVBDOjpDb25uZWN0aW9uKiBXZWJSZXNvdXJjZUxvYWRlcjo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsKIH0KIAogdWlu
dDY0X3QgV2ViUmVzb3VyY2VMb2FkZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmlj
YXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5j
cHAKaW5kZXggNjA5OGExN2NlMDE5Y2QwYmNiMmZhZWI3ZDg3MmVhNzE4MDA0NDUyOS4uM2E5OWRk
ODhjYmYyMDI1MGQ3ZDNhOWNkZjUzYzI2OWM0M2Y3ZTlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1
ZXN0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Ob3RpZmljYXRp
b25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAKQEAgLTEyNiw3ICsx
MjYsNyBAQCBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUGVybWlz
c2lvblJlcXVlc3RNYW5hZ2VyOjpwZXJtaXNzaW9uTAogICAgIGlmICghbV9wYWdlLT5jb3JlUGFn
ZSgpLT5zZXR0aW5ncygpLm5vdGlmaWNhdGlvbnNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBO
b3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5pZWQ7CiAgICAgCi0gICAgcmV0dXJuIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+
cG9saWN5Rm9yT3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5wb2xpY3lG
b3JPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2VjdXJp
dHlPcmlnaW4pOwogICAgIHJldHVybiBOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb25EZW5p
ZWQ7CkBAIC0xMzYsNyArMTM2LDcgQEAgTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uIE5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cGVybWlzc2lvbkwKIHZvaWQgTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpzZXRQZXJtaXNzaW9uTGV2ZWxGb3JU
ZXN0aW5nKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nLCBib29sIGFsbG93ZWQpCiB7CiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+
KCktPmRpZFVwZGF0ZU5vdGlmaWNhdGlvbkRlY2lzaW9uKG9yaWdpblN0cmluZywgYWxsb3dlZCk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25N
YW5hZ2VyPigpLT5kaWRVcGRhdGVOb3RpZmljYXRpb25EZWNpc2lvbihvcmlnaW5TdHJpbmcsIGFs
bG93ZWQpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ob3JpZ2luU3RyaW5nKTsKICAgICBVTlVT
RURfUEFSQU0oYWxsb3dlZCk7CkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnNldFBlcm1pc3Npb25MZXZlbEZvclRlc3RpbmcoY29u
c3QgU3QKIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpyZW1vdmVB
bGxQZXJtaXNzaW9uc0ZvclRlc3RpbmcoKQogewogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKSB8
fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
c3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5yZW1vdmVBbGxQZXJtaXNzaW9u
c0ZvclRlc3RpbmcoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdl
Yk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPnJlbW92ZUFsbFBlcm1pc3Npb25zRm9yVGVzdGluZygp
OwogI2VuZGlmCiB9CiAKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0TWFuYWdlcjo6ZGlkUmVjZWl2ZU5vdGlmaWNhdGlvblBlcm1pc3Npb25EZWNp
cwogCiAgICAgbV9vcmlnaW5Ub0lETWFwLnJlbW92ZShvcmlnaW4pOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5kaWRVcGRh
dGVOb3RpZmljYXRpb25EZWNpc2lvbihvcmlnaW4tPnRvU3RyaW5nKCksIGFsbG93ZWQpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdl
cj4oKS0+ZGlkVXBkYXRlTm90aWZpY2F0aW9uRGVjaXNpb24ob3JpZ2luLT50b1N0cmluZygpLCBh
bGxvd2VkKTsKIAogI2lmIEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKICAgICBSZWZQdHI8
V2ViQ29yZTo6Vm9pZENhbGxiYWNrPiB2b2lkQ2FsbGJhY2sgPSBtX2lkVG9Wb2lkQ2FsbGJhY2tN
YXAudGFrZShyZXF1ZXN0SUQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUERGL1BERlBsdWdpbi5tbQppbmRleCA4MGY0NDM2Yjg5MDQwY2M5YTE2MWFiZDQ4ZTAx
NmM2NTdiZTE4OWQzLi5iZjFmMGU5MmNlYWNlZjUxNjMyMGNjNzUyMTMyZWM5MzI4MGUxM2NkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdp
bi5tbQpAQCAtMTY2Miw3ICsxNjYyLDcgQEAgdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNUb1Bh
c3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywKICAgICAg
ICAgcGFzdGVib2FyZFR5cGVzLmFwcGVuZCh0eXBlKTsKIAogICAgIHVpbnQ2NF90IG5ld0NoYW5n
ZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRU
eXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlcyksCiAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNl
dFBhc3RlYm9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKIAogICAgIGZvciAo
TlNVSW50ZWdlciBpID0gMCwgY291bnQgPSBpdGVtcy5jb3VudDsgaSA8IGNvdW50OyArK2kpIHsK
QEAgLTE2NzcsNyArMTY3Nyw3IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJv
YXJkKE5TU3RyaW5nICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsCiAKICAgICAgICAg
aWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpOU1N0cmluZ1Bib2FyZFR5cGVdIHx8IFt0eXBlIGlz
RXF1YWxUb1N0cmluZzpOU1Bhc3RlYm9hcmRUeXBlU3RyaW5nXSkgewogICAgICAgICAgICAgUmV0
YWluUHRyPE5TU3RyaW5nPiBwbGFpblRleHRTdHJpbmcgPSBhZG9wdE5TKFtbTlNTdHJpbmcgYWxs
b2NdIGluaXRXaXRoRGF0YTpkYXRhIGVuY29kaW5nOk5TVVRGOFN0cmluZ0VuY29kaW5nXSk7Ci0g
ICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3Ry
aW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFt
ZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwg
MCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBi
dWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSk7CiAKQEAgLTE2ODgsNyArMTY4
OCw3IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpw
YXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsCiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShidWZmZXItPnNpemUo
KSk7CiAgICAgICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+ZGF0
YSgpLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBzaGFyZWRNZW1vcnktPmNyZWF0ZUhh
bmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAgICAgICAgICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVi
b2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5zaXplKCkpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdl
Q291bnQpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBoYW5kbGUs
IGJ1ZmZlci0+c2l6ZSgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwCmluZGV4IGQ4
YmI5OTA0NWJkNTdjNzliNGFjZDY0MzE4NWUyYTU5MGQwNGU2NDAuLmMzNTRiMjI0NDY4NjU2YTk4
NDA2ZGZjZjRmOWQyZTAwNDNiMDU3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIuY3BwCkBAIC03MCw3ICs3MCw3IEBAIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKiBQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXI6OmdldFBsdWdpblByb2Nlc3NDb25uZWN0CiAKICAg
ICBJUEM6OkF0dGFjaG1lbnQgZW5jb2RlZENvbm5lY3Rpb25JZGVudGlmaWVyOwogICAgIGJvb2wg
c3VwcG9ydHNBc3luY2hyb25vdXNJbml0aWFsaXphdGlvbjsKLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblByb2Nlc3NU
b2tlbiksCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5Q
cm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9rZW4pLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbjo6UmVwbHkoZW5jb2RlZENvbm5lY3Rpb25J
ZGVudGlmaWVyLCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0aW9uKSwgMCkpCiAgICAg
ICAgIHJldHVybiAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb3h5LmNwcAppbmRleCAwOTVkY2JkYzcwMTljNTlhMTljNWNlYzI5ODk1OTU3MmZh
ODFlMjNkLi5kZDdmOTI5NTk5NDNjMDlhYjc5YmI5YjhiNjIxZmQ2YWU2ZWY1Y2YyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKQEAg
LTg2LDcgKzg2LDcgQEAgdm9pZCBQbHVnaW5Qcm94eTo6cGx1Z2luUHJvY2Vzc0NyYXNoZWQoKQog
Ym9vbCBQbHVnaW5Qcm94eTo6aW5pdGlhbGl6ZShjb25zdCBQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQogewogICAgIEFTU0VSVCghbV9jb25uZWN0aW9uKTsKLSAgICBtX2Nvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKS5nZXRQbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbihtX3BsdWdpblByb2Nlc3NUb2tlbik7CisgICAgbV9jb25uZWN0
aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5h
Z2VyKCkuZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24obV9wbHVnaW5Qcm9jZXNzVG9rZW4pOwog
ICAgIAogICAgIGlmICghbV9jb25uZWN0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXgg
MTA3NjA3YWQ2YmNjOTM4ZGQ3YmE3OTk4NjljYWQ2NGNiMzYwMWViZC4uMTg2NDIzM2Q1NjlhMjlh
MmNiMjkyNWIyZjJhODI1YzhkYjE2ZTIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTUzMiw3ICsxNTMyLDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpzZXRDb21wbGV4VGV4dElucHV0U3RhdGUoUGx1Z2luQ29tcGxleFRleHRJbnB1
dFN0YXRlIHBsdWdpbkNvbXAKIAogY29uc3QgTWFjaFNlbmRSaWdodCYgUGx1Z2luVmlldzo6Y29t
cG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hh
cmVkKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCk7CisgICAgcmV0dXJuIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpOwogfQogCiB2b2lk
IFBsdWdpblZpZXc6Om9wZW5QbHVnaW5QcmVmZXJlbmNlUGFuZSgpCkBAIC0xODE0LDcgKzE4MTQs
NyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24oKQog
ICAgIFN0cmluZyBwbHVnaW5PcmlnaW4gPSBwbHVnSW5JbWFnZUVsZW1lbnQubG9hZGVkVXJsKCku
aG9zdCgpOwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRN
aW1lVHlwZSgpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGx1Z0luRGlkUmVjZWl2ZVVz
ZXJJbnRlcmFjdGlvbihwYWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBwbHVnSW5J
bWFnZUVsZW1lbnQuZG9jdW1lbnQoKS5wYWdlKCktPnNlc3Npb25JRCgpKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBhZ2VPcmln
aW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUsIHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgp
LnBhZ2UoKS0+c2Vzc2lvbklEKCkpOwogfQogCiBib29sIFBsdWdpblZpZXc6OnNob3VsZENyZWF0
ZVRyYW5zaWVudFBhaW50aW5nU25hcHNob3QoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9TY3JvbGxpbmcvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5tbQppbmRleCAzYTNjNTk2NmU2ZTQ1ODFkMzNiMjVjYWZhOTgyM2FhMTFmNjA5Nzll
Li5hNjgwODgxYzJkYTE3OWQxYzFkY2UzMWNlOTI1YzkxNGUwNDJkZWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5tbQpAQCAtNTQsMTIgKzU0LDEyIEBAIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcihXZWJQYWdlKiBwYWdlKQog
ICAgIDogQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcihwYWdlLT5jb3JlUGFnZSgpKQogICAgICwg
bV93ZWJQYWdlKHBhZ2UpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpLCAq
dGhpcyk7CiB9CiAKIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp+UmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV93ZWJQYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpKTsKIH0K
IAogdm9pZCBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6c2NoZWR1bGVUcmVlU3RhdGVDb21t
aXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3Jh
Z2VBcmVhTWFwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdl
QXJlYU1hcC5jcHAKaW5kZXggNzZiMDlhZWQxYjg0YTlmZjNlMjA2YzMyMDYxYTRlZjdlZGNkYjA2
OS4uZTIxODUxNjMwODg3N2RmMjE0NTJmZjliM2FjMWFiZmMyNTZmYzBmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCkBA
IC03MSwyNCArNzEsMjQgQEAgU3RvcmFnZUFyZWFNYXA6OlN0b3JhZ2VBcmVhTWFwKFN0b3JhZ2VO
YW1lc3BhY2VJbXBsKiBzdG9yYWdlTmFtZXNwYWNlLCBQYXNzUmVmUHQKICAgICBzd2l0Y2ggKG1f
c3RvcmFnZVR5cGUpIHsKICAgICBjYXNlIFdlYkNvcmU6OkxvY2FsU3RvcmFnZToKICAgICAgICAg
aWYgKFNlY3VyaXR5T3JpZ2luKiB0b3BMZXZlbE9yaWdpbiA9IHN0b3JhZ2VOYW1lc3BhY2UtPnRv
cExldmVsT3JpZ2luKCkpCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRl
VHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNl
LT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlP
cmlnaW4odG9wTGV2ZWxPcmlnaW4pLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9y
aWdpbihtX3NlY3VyaXR5T3JpZ2luLmdldCgpKSksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXI6OkNyZWF0ZVRyYW5zaWVudExvY2FsU3RvcmFnZU1hcChtX3N0b3JhZ2VN
YXBJRCwgc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKHRvcExldmVsT3JpZ2luKSwgU2VjdXJpdHlPcmln
aW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0ZUxv
Y2FsU3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCwgc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5h
bWVzcGFjZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fc2Vj
dXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6Q3JlYXRlTG9jYWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNw
YWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJp
dHlPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKIAogICAgICAgICBicmVhazsK
IAogICAgIGNhc2UgV2ViQ29yZTo6U2Vzc2lvblN0b3JhZ2U6Ci0gICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3Jh
Z2VNYW5hZ2VyOjpDcmVhdGVTZXNzaW9uU3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCwgc3RvcmFn
ZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJv
bVNlY3VyaXR5T3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7CisgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVTZXNzaW9uU3RvcmFnZU1hcChtX3N0b3JhZ2VN
YXBJRCwgc3RvcmFnZU5hbWVzcGFjZS0+c3RvcmFnZU5hbWVzcGFjZUlEKCksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9zdG9yYWdlTWFwSUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlN0b3JhZ2VBcmVhTWFwOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fc3RvcmFnZU1hcElELCAqdGhpcyk7CiB9CiAKIFN0b3JhZ2VBcmVhTWFw
Ojp+U3RvcmFnZUFyZWFNYXAoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpEZXN0cm95
U3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCksIDApOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9zdG9yYWdlTWFwSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5h
Z2VyOjpEZXN0cm95U3RvcmFnZU1hcChtX3N0b3JhZ2VNYXBJRCksIDApOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3RvcmFnZUFy
ZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9zdG9yYWdlTWFwSUQpOwogfQogCiB1bnNp
Z25lZCBTdG9yYWdlQXJlYU1hcDo6bGVuZ3RoKCkKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFN0
b3JhZ2VBcmVhTWFwOjpzZXRJdGVtKEZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBs
KiBzb3VyY2VBcmVhLCBjbwogCiAgICAgbV9wZW5kaW5nVmFsdWVDaGFuZ2VzLmFkZChrZXkpOwog
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlNldEl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJj
ZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNl
RnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFn
ZXI6OlNldEl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwg
bV9jdXJyZW50U2VlZCwga2V5LCB2YWx1ZSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgp
KSwgMCk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0ZW0oV2ViQ29yZTo6RnJh
bWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvbnN0IFN0cmlu
ZyYga2V5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnJlbW92ZUl0
ZW0oV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvCiAKICAg
ICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6UmVtb3ZlSXRlbShtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJ
RCgpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpSZW1vdmVJdGVtKG1fc3RvcmFnZU1h
cElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291
cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9CiAKIHZvaWQgU3RvcmFnZUFyZWFN
YXA6OmNsZWFyKFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBz
b3VyY2VBcmVhKQpAQCAtMTU0LDcgKzE1NCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmNsZWFy
KFdlYkNvcmU6OkZyYW1lKiBzb3VyY2VGcmFtZSwgU3RvcmFnZUFyZWFJbXBsKiBzb3VyY2VBCiAK
ICAgICBtX2hhc1BlbmRpbmdDbGVhciA9IHRydWU7CiAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFn
ZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6
Q2xlYXIobV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJy
ZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6U3RvcmFnZU1hbmFnZXI6OkNsZWFyKG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9y
YWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIHNvdXJjZUZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KSksIDApOwogfQogCiBib29sIFN0b3JhZ2VBcmVhTWFwOjpjb250YWlucyhjb25zdCBTdHJpbmcm
IGtleSkKQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIFN0b3JhZ2VBcmVhTWFwOjpsb2FkVmFsdWVz
SWZOZWVkZWQoKQogICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCB1c2UgYSBzcGVjaWFsIHNlbmRT
eW5jIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCB3ZSBkb24ndCB3YW50IHRvIHByb2Nlc3MgaW5jb21p
bmcgbWVzc2FnZXMgd2hpbGUgd2FpdGluZyBmb3IgYSByZXBseS4KICAgICAvLyAoVGhpcyBmbGFn
IGRvZXMgbm90IHlldCBleGlzdCkuIFNpbmNlIGxvYWRWYWx1ZXNJZk5lZWRlZCgpIGVuZHMgdXAg
YmVpbmcgY2FsbGVkIGZyb20gd2l0aGluIEphdmFTY3JpcHQgY29kZSwgcHJvY2Vzc2luZyBpbmNv
bWluZyBzeW5jaHJvbm91cyBtZXNzYWdlcwogICAgIC8vIGNvdWxkIGxlYWQgdG8gd2VpcmQgcmVl
bnRyZW5jeSBidWdzIG90aGVyd2lzZS4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6Okdl
dFZhbHVlcyhtX3N0b3JhZ2VNYXBJRCwgbV9jdXJyZW50U2VlZCksIE1lc3NhZ2VzOjpTdG9yYWdl
TWFuYWdlcjo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXI6OkdldFZhbHVlcyhtX3N0b3JhZ2VNYXBJRCwgbV9jdXJyZW50U2VlZCks
IE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzOjpSZXBseSh2YWx1ZXMpLCAwKTsK
IAogICAgIG1fc3RvcmFnZU1hcCA9IFN0b3JhZ2VNYXA6OmNyZWF0ZShtX3F1b3RhSW5CeXRlcyk7
CiAgICAgbV9zdG9yYWdlTWFwLT5pbXBvcnRJdGVtcyh2YWx1ZXMpOwpAQCAtMzE2LDcgKzMxNiw3
IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNoU2Vzc2lvblN0b3JhZ2VFdmVudCh1aW50
NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjCiAKICAgICAvLyBOYW1lc3BhY2UgSURzIGZvciBz
ZXNzaW9uIHN0b3JhZ2UgbmFtZXNwYWNlcyBhcmUgZXF1aXZhbGVudCB0byB3ZWIgcGFnZSBJRHMK
ICAgICAvLyBzbyB3ZSBjYW4gZ2V0IHRoZSByaWdodCBwYWdlIGhlcmUuCi0gICAgV2ViUGFnZSog
d2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2UobV9zdG9yYWdlTmFtZXNwYWNl
SUQpOworICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQ
YWdlKG1fc3RvcmFnZU5hbWVzcGFjZUlEKTsKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMzUwLDcgKzM1MCw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmRpc3BhdGNo
TG9jYWxTdG9yYWdlRXZlbnQodWludDY0X3Qgc291cmNlU3RvcmFnZUFyZWFJRCwgY29uCiAKICAg
ICBWZWN0b3I8UmVmUHRyPEZyYW1lPj4gZnJhbWVzOwogCi0gICAgUGFnZUdyb3VwJiBwYWdlR3Jv
dXAgPSAqV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZUdyb3VwKG1fc3RvcmFnZU5hbWVzcGFj
ZUlEKS0+Y29yZVBhZ2VHcm91cCgpOworICAgIFBhZ2VHcm91cCYgcGFnZUdyb3VwID0gKldlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2VHcm91cChtX3N0b3JhZ2VOYW1lc3BhY2VJRCktPmNv
cmVQYWdlR3JvdXAoKTsKICAgICBjb25zdCBIYXNoU2V0PFBhZ2UqPiYgcGFnZXMgPSBwYWdlR3Jv
dXAucGFnZXMoKTsKICAgICBmb3IgKEhhc2hTZXQ8UGFnZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IHBhZ2VzLmJlZ2luKCksIGVuZCA9IHBhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAg
ICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmKCppdCktPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50
Q29udHJvbGxlci5jcHAKaW5kZXggNGZjZjg2ZTg1OTA5M2I3MjNlNzkwMzdjMGJmZmM5MzA2ZDc3
NDJjMi4uMjM2MDMzMzBmNTgxOWI2YWUwZTgwMmYwNzBhODE5NTAxM2VmN2Q0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENv
bnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQv
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcApAQCAtNzAsMTQgKzcwLDE0IEBAIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50
aWZpZXIpCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fdXNlckNvbnRl
bnRDb250cm9sbGVyKCpVc2VyQ29udGVudENvbnRyb2xsZXI6OmNyZWF0ZSgpKQogewotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVXNlckNv
bnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllciwgKnRo
aXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aWRlbnRpZmllciwgKnRoaXMpOwogfQogCiBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6On5XZWJV
c2VyQ29udGVudENvbnRyb2xsZXIoKQogewogICAgIEFTU0VSVCh1c2VyQ29udGVudENvbnRyb2xs
ZXJzKCkuY29udGFpbnMobV9pZGVudGlmaWVyKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlVzZXJDb250ZW50Q29udHJvbGxl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVXNlckNvbnRl
bnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllcik7CiAKICAg
ICB1c2VyQ29udGVudENvbnRyb2xsZXJzKCkucmVtb3ZlKG1faWRlbnRpZmllcik7CiB9CkBAIC0x
MzMsNyArMTMzLDcgQEAgcHVibGljOgogICAgICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyUHJveHk6
OkRpZFBvc3RNZXNzYWdlKHdlYlBhZ2UtPnBhZ2VJRCgpLCB3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBt
X2lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSh2YWx1ZS0+ZGF0YSgpKSksIG1fY29udHJv
bGxlci0+aWRlbnRpZmllcigpKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250
cm9sbGVyUHJveHk6OkRpZFBvc3RNZXNzYWdlKHdlYlBhZ2UtPnBhZ2VJRCgpLCB3ZWJGcmFtZS0+
ZnJhbWVJRCgpLCBtX2lkZW50aWZpZXIsIElQQzo6RGF0YVJlZmVyZW5jZSh2YWx1ZS0+ZGF0YSgp
KSksIG1fY29udHJvbGxlci0+aWRlbnRpZmllcigpKTsKICAgICB9CiAKICAgICBXZWJDb3JlOjpV
c2VyTWVzc2FnZUhhbmRsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKCkgeyByZXR1cm4gKm1fZGVz
Y3JpcHRvcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJCYXR0ZXJ5Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQmF0dGVyeUNsaWVudC5jcHAKaW5kZXggMWQxMzZlNGYxM2MwMTVj
MTM1YTc2YjMwOTUyMDI3NWM0MTgyMGVhOC4uYWE3ZDRmYjBjMTZhZWM3MWMxOTY0ZTY4NGI5NGY4
Nzk3OTdkODZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJCYXR0ZXJ5Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkJhdHRlcnlDbGllbnQuY3BwCkBAIC0zOCwxNyArMzgsMTcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2ViQmF0dGVyeUNsaWVudDo6c3RhcnRVcGRh
dGluZygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5
TWFuYWdlcj4oKS0+cmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+cmVnaXN0ZXJXZWJQYWdl
KG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViQmF0dGVyeUNsaWVudDo6c3RvcFVwZGF0aW5nKCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigp
LT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnN1cHBsZW1lbnQ8V2ViQmF0dGVyeU1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQYWdlKG1fcGFn
ZSk7CiB9CiAKIHZvaWQgV2ViQmF0dGVyeUNsaWVudDo6YmF0dGVyeUNvbnRyb2xsZXJEZXN0cm95
ZWQoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViQmF0dGVyeU1h
bmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBh
Z2UobV9wYWdlKTsKICAgICBkZWxldGUgdGhpczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CmluZGV4IGVhNWEzOThkOGNkMTNiZTFiZjdmOGYyNjY4NTkxMTM3ZGM1Mzc5NDIuLmE2ZmUxM2Vl
YTQ0OTUzYzgyZjUzMjU4Yzc3Y2NkNmM1MDQ3ZjY2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKQEAgLTEzNSw3ICsxMzUsNyBAQCBGbG9hdFJlY3QgV2ViQ2hyb21lQ2xpZW50Ojp3aW5kb3dS
ZWN0KCkKIAogICAgIEZsb2F0UmVjdCBuZXdXaW5kb3dGcmFtZTsKIAotICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0V2luZG93RnJhbWUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6R2V0V2luZG93RnJhbWU6OlJlcGx5KG5ld1dpbmRvd0ZyYW1lKSwgbV9wYWdlLT5wYWdlSUQo
KSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6UmVwbHkobmV3V2luZG93
RnJhbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwog
CiAgICAgcmV0dXJuIG5ld1dpbmRvd0ZyYW1lOwpAQCAtMTkyLDcgKzE5Miw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50Ojpmb2N1c2VkRnJhbWVDaGFuZ2VkKEZyYW1lKiBmcmFtZSkKIHsKICAgICBX
ZWJGcmFtZSogd2ViRnJhbWUgPSBmcmFtZSA/IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpmcmFt
ZSkgOiBudWxscHRyOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpGb2N1c2VkRnJhbWVDaGFu
Z2VkKHdlYkZyYW1lID8gd2ViRnJhbWUtPmZyYW1lSUQoKSA6IDApLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvY3VzZWRGcmFtZUNoYW5nZWQod2ViRnJh
bWUgPyB3ZWJGcmFtZS0+ZnJhbWVJRCgpIDogMCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBQ
YWdlKiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IEZy
YW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdpbmRvd0ZlYXR1cmVzJiB3aW5kb3dGZWF0
dXJlcywgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbikKQEAgLTIxMywx
NCArMjEzLDE0IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW1lKiBm
cmFtZSwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzCiAKICAgICB1aW50NjRfdCBuZXdQ
YWdlSUQgPSAwOwogICAgIFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2Uod2ViRnJhbWUtPmZy
YW1lSUQoKSwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwgd2luZG93RmVhdHVyZXMsIG5hdmln
YXRpb25BY3Rpb25EYXRhKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZTo6
UmVwbHkobmV3UGFnZUlELCBwYXJhbWV0ZXJzKSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlKHdlYkZyYW1lLT5mcmFt
ZUlEKCksIHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCksIHdpbmRvd0ZlYXR1cmVzLCBuYXZpZ2F0
aW9uQWN0aW9uRGF0YSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2U6OlJl
cGx5KG5ld1BhZ2VJRCwgcGFyYW1ldGVycyksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmICghbmV3UGFnZUlEKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNyZWF0ZVdlYlBhZ2UobmV3UGFnZUlELCBwYXJhbWV0ZXJz
KTsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShuZXdQYWdlSUQpLT5j
b3JlUGFnZSgpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmNyZWF0ZVdlYlBhZ2UobmV3
UGFnZUlELCBwYXJhbWV0ZXJzKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
d2ViUGFnZShuZXdQYWdlSUQpLT5jb3JlUGFnZSgpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6c2hvdygpCkBAIC0yNTAsNyArMjUwLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnRvb2xi
YXJzVmlzaWJsZSgpCiAgICAgICAgIHJldHVybiB0b29sYmFyc1Zpc2liaWxpdHkgPT0gQVBJOjpJ
bmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpWaXNpYmxl
OwogICAgIAogICAgIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlID0gdHJ1ZTsKLSAgICBpZiAoIVdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJsZSgpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGU6OlJlcGx5KHRvb2xiYXJzQXJlVmlz
aWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6R2V0VG9vbGJhcnNBcmVWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okdl
dFRvb2xiYXJzQXJlVmlzaWJsZTo6UmVwbHkodG9vbGJhcnNBcmVWaXNpYmxlKSwgbV9wYWdlLT5w
YWdlSUQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIHRvb2xiYXJzQXJl
VmlzaWJsZTsKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6c3RhdHVz
YmFyVmlzaWJsZSgpCiAgICAgICAgIHJldHVybiBzdGF0dXNiYXJWaXNpYmlsaXR5ID09IEFQSTo6
SW5qZWN0ZWRCdW5kbGU6OlBhZ2VVSUNsaWVudDo6VUlFbGVtZW50VmlzaWJpbGl0eTo6VmlzaWJs
ZTsKIAogICAgIGJvb2wgc3RhdHVzQmFySXNWaXNpYmxlID0gdHJ1ZTsKLSAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJsZSgpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpHZXRTdGF0dXNCYXJJc1Zpc2libGU6OlJlcGx5KHN0YXR1c0JhcklzVmlzaWJs
ZSksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0
YXR1c0JhcklzVmlzaWJsZTo6UmVwbHkoc3RhdHVzQmFySXNWaXNpYmxlKSwgbV9wYWdlLT5wYWdl
SUQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIHN0YXR1c0JhcklzVmlz
aWJsZTsKQEAgLTI5Nyw3ICsyOTcsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6bWVudWJhclZp
c2libGUoKQogICAgICAgICByZXR1cm4gbWVudWJhclZpc2liaWxpdHkgPT0gQVBJOjpJbmplY3Rl
ZEJ1bmRsZTo6UGFnZVVJQ2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpWaXNpYmxlOwogICAg
IAogICAgIGJvb2wgbWVudUJhcklzVmlzaWJsZSA9IHRydWU7Ci0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldE1lbnVCYXJJc1Zpc2libGU6OlJlcGx5KG1lbnVCYXJJc1Zpc2libGUpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldE1lbnVC
YXJJc1Zpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlzaWJs
ZTo6UmVwbHkobWVudUJhcklzVmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBtZW51QmFySXNWaXNpYmxlOwpAQCAtMzMxLDcgKzMz
MSw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSoKICAgICBpZiAoV2ViUGFnZTo6c3luY2hyb25v
dXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAgICAgIHN5bmNTZW5kRmxhZ3MgfD0g
SVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5OwogICAgIAotICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKG1lc3NhZ2Us
IHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVV
bmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3VsZENsb3NlKSwgbV9wYWdlLT5wYWdlSUQoKSwg
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQorICAgIGlm
ICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVs
KG1lc3NhZ2UsIHdlYkZyYW1lLT5mcmFtZUlEKCkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
dW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWw6OlJlcGx5KHNob3VsZENsb3NlKSwgbV9wYWdlLT5w
YWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3Mp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gc2hvdWxkQ2xvc2U7CkBAIC0z
NjcsNyArMzY3LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRBbGVydChG
cmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgYWxlcnRUZXh0KQogICAgIHVuc2lnbmVkIHN5bmNT
ZW5kRmxhZ3MgPSBJUEM6OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kOwogICAgIGlm
IChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAgICAg
ICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNwaW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1l
LT5mcmFtZUlEKCksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFT
Y3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBhbGVydFRleHQp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQ6OlJlcGx5KCksIG1f
cGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2Vu
ZEZsYWdzKTsKIH0KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJt
KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMzgyLDcgKzM4Miw3IEBA
IGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpydW5KYXZhU2NyaXB0Q29uZmlybShGcmFtZSogZnJhbWUs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBpZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNz
YWdlc1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAgICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpT
cGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5OwogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybSh3
ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVu
SmF2YVNjcmlwdENvbmZpcm06OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKKyAgICBpZiAoIVdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5m
cmFtZUlEKCksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0
Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1p
bGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDAwLDcgKzQwMCw3IEBAIGJvb2wgV2ViQ2hyb21l
Q2xpZW50OjpydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjCiAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9ub3VzTWVzc2FnZXNTaG91bGRTcGlu
UnVuTG9vcCgpKQogICAgICAgICBzeW5jU2VuZEZsYWdzIHw9IElQQzo6U3BpblJ1bkxvb3BXaGls
ZVdhaXRpbmdGb3JSZXBseTsKICAgICAKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlJ1bkphdmFTY3JpcHRQcm9tcHQod2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVzc2FnZSwgZGVmYXVs
dFZhbHVlKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdDo6UmVw
bHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6
bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlLCBkZWZh
dWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpS
ZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgc3luY1NlbmRGbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiAhcmVzdWx0LmlzTnVsbCgpOwpAQCAtNDE3LDcgKzQxNyw3IEBAIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjpzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFN0cmluZyYgc3RhdHVzYmFyVGV4dCkKIGJv
b2wgV2ViQ2hyb21lQ2xpZW50OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKIHsKICAgICBi
b29sIHNob3VsZEludGVycnVwdCA9IGZhbHNlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0OjpSZXBseShzaG91bGRJbnRlcnJ1cHQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3Vs
ZEludGVycnVwdEphdmFTY3JpcHQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvdWxkSW50
ZXJydXB0SmF2YVNjcmlwdDo6UmVwbHkoc2hvdWxkSW50ZXJydXB0KSwgbV9wYWdlLT5wYWdlSUQo
KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzaG91bGRJbnRlcnJ1cHQ7
CkBAIC02MDEsNyArNjAxLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6Om1vdXNlRGlkTW92ZU92
ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQKIAogICAgIC8vIE5v
dGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkhpdFRlc3RSZXN1bHQ6OkRhdGEgd2ViSGl0VGVz
dFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6Ok1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KHdlYkhpdFRlc3RSZXN1bHREYXRh
LCBtb2RpZmllckZsYWdzLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1P
YmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQod2ViSGl0
VGVzdFJlc3VsdERhdGEsIG1vZGlmaWVyRmxhZ3MsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExv
bmdNb3VzZVByZXNzKGNvbnN0IEludFBvaW50JiBtb3VzZURvd25Qb3NpdGlvbiwgY29uc3QgSGl0
VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKQEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6ZGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKGNvbnN0
IEludFBvaW50JiBtbwogICAgIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdl
YkhpdFRlc3RSZXN1bHQ6OkRhdGEgd2ViSGl0VGVzdFJlc3VsdERhdGEoaGl0VGVzdFJlc3VsdCk7
Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEJlZ2luVHJhY2tp
bmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhtb3VzZURvd25Qb3NpdGlvbiwgd2ViSGl0VGVzdFJl
c3VsdERhdGEsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNU
b0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJl
c3MobW91c2VEb3duUG9zaXRpb24sIHdlYkhpdFRlc3RSZXN1bHREYXRhLCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdl
dCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZFJlY29nbml6ZUxv
bmdNb3VzZVByZXNzKCkKQEAgLTYyNCw3ICs2MjQsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6
ZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MoKQogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVV
SUNsaWVudCgpLmRpZFJlY29nbml6ZUxvbmdNb3VzZVByZXNzKG1fcGFnZSwgdXNlckRhdGEpOwog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFJlY29nbml6ZUxvbmdNb3VzZVByZXNzKFVzZXJEYXRhKFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkp
LmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRS
ZWNvZ25pemVMb25nTW91c2VQcmVzcyhVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNl
UHJlc3MoKQpAQCAtNjM1LDcgKzYzNSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRDYW5j
ZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKCkKICAgICBtX3BhZ2UtPmluamVjdGVk
QnVuZGxlVUlDbGllbnQoKS5kaWRDYW5jZWxUcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNz
KG1fcGFnZSwgdXNlckRhdGEpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENhbmNlbFRyYWNraW5nUG90
ZW50aWFsTG9uZ01vdXNlUHJlc3MoVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNm
b3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgbV9wYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFs
TG9uZ01vdXNlUHJlc3MoVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdG9vbFRpcCwgVGV4dERpcmVj
dGlvbikKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cHJpbnQoRnJh
bWUqIGZyYW1lKQogICAgIC8vIHRoZSBwcmludCBvcGVyYXRpb24gaXMgZmluaXNoZWQgdW5leHBl
Y3RlbHkgYW5kIHRoZSB3ZWIgcHJvY2VzcyBjcmFzaGVzLCBzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjk3OS4KICAgICAvLyBUaGUgUHJpbnRlckxpc3RHdGsg
Y2xhc3MgZ2V0cyB0aGUgbGlzdCBvZiBwcmludGVycyBpbiB0aGUgY29uc3RydWN0b3Igc28gd2Ug
anVzdCBuZWVkIHRvIGVuc3VyZSB0aGVyZSdzIGFuIGluc3RhbmNlIGFsaXZlCiAgICAgLy8gZHVy
aW5nIHRoZSBzeW5jaHJvbm91cyBwcmludCBvcGVyYXRpb24uCi0gICAgUmVmUHRyPFByaW50ZXJM
aXN0R3RrPiBwcmludGVyTGlzdCA9IFByaW50ZXJMaXN0R3RrOjpzaGFyZWQoKTsKKyAgICBSZWZQ
dHI8UHJpbnRlckxpc3RHdGs+IHByaW50ZXJMaXN0ID0gUHJpbnRlckxpc3RHdGs6OnNpbmdsZXRv
bigpOwogI2VuZGlmCiAKICAgICB1bnNpZ25lZCBzeW5jU2VuZEZsYWdzID0gSVBDOjpJbmZvcm1Q
bGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZDsKQEAgLTY5MCw3ICs2OTAsNyBAQCB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6ZXhjZWVkZWREYXRhYmFzZVF1b3RhKEZyYW1lKiBmcmFtZSwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZQogICAgICAgICBpZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdlc1No
b3VsZFNwaW5SdW5Mb29wKCkpCiAgICAgICAgICAgICBzeW5jU2VuZEZsYWdzIHw9IElQQzo6U3Bp
blJ1bkxvb3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKICAgICAgICAgCi0gICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAorICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYygKICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0YWJh
c2VRdW90YSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
LCBkYXRhYmFzZU5hbWUsIGRldGFpbHMuZGlzcGxheU5hbWUoKSwgY3VycmVudFF1b3RhLCBjdXJy
ZW50T3JpZ2luVXNhZ2UsIGRldGFpbHMuY3VycmVudFVzYWdlKCksIGRldGFpbHMuZXhwZWN0ZWRV
c2FnZSgpKSwKICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0
YWJhc2VRdW90YTo6UmVwbHkobmV3UXVvdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncyk7CiAgICAgfQpAQCAtNzE4LDcg
KzcxOCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpyZWFjaGVkQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sCiAgICAgICAgIHJldHVybjsKIAogICAg
IHVpbnQ2NF90IG5ld1F1b3RhID0gMDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYygKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYygKICAgICAgICAgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UmVhY2hlZEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShvcmlnaW4t
PmRhdGFiYXNlSWRlbnRpZmllcigpLCBjdXJyZW50UXVvdGEsIHRvdGFsQnl0ZXNOZWVkZWQpLAog
ICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9y
aWdpblF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKTsKIApAQCAtMTA1Myw3ICsxMDUz
LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFBhZ2VBY3Rpdml0eVN0YXRlKFBhZ2VBY3Rp
dml0eVN0YXRlOjpGbGFncyBhY3Rpdml0eVN0YXQKIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFw
Q3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mIHdy
YXBwZWRLZXkpIGNvbnN0CiB7CiAgICAgYm9vbCBzdWNjZWVkZWQ7Ci0gICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpXcmFwQ3J5cHRvS2V5KGtleSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OldyYXBDcnlwdG9LZXk6OlJlcGx5KHN1Y2NlZWRlZCwgd3JhcHBlZEtleSksIG1fcGFnZS0+
cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V3JhcENyeXB0
b0tleShrZXkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXcmFwQ3J5cHRvS2V5OjpSZXBseShz
dWNjZWVkZWQsIHdyYXBwZWRLZXkpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIHJldHVybiBzdWNjZWVkZWQ7CiB9CkBAIC0xMDYxLDcgKzEwNjEsNyBAQCBi
b29sIFdlYkNocm9tZUNsaWVudDo6d3JhcENyeXB0b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4m
IGtleSwgVmVjdG9yPHVpbnQ4X3Q+JgogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnVud3JhcENyeXB0
b0tleShjb25zdCBWZWN0b3I8dWludDhfdD4mIHdyYXBwZWRLZXksIFZlY3Rvcjx1aW50OF90PiYg
a2V5KSBjb25zdAogewogICAgIGJvb2wgc3VjY2VlZGVkOwotICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6VW53cmFwQ3J5cHRvS2V5KHdyYXBwZWRLZXkpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpVbndyYXBDcnlwdG9LZXk6OlJlcGx5KHN1Y2NlZWRlZCwga2V5KSwgbV9wYWdlLT5w
YWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbndyYXBDcnlw
dG9LZXkod3JhcHBlZEtleSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tl
eTo6UmVwbHkoc3VjY2VlZGVkLCBrZXkpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIHJldHVybiBzdWNjZWVkZWQ7CiB9CkBAIC0xMDgyLDcgKzEwODIsNyBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6aGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKFdlYkNv
cmU6OkZyYW1lU2VsZWN0aW9uJiBzZWxlYwogCiBib29sIFdlYkNocm9tZUNsaWVudDo6aGFzUmVs
ZXZhbnRTZWxlY3Rpb25TZXJ2aWNlcyhib29sIGlzVGV4dE9ubHkpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIChpc1RleHRPbmx5ICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmhhc1NlbGVjdGlvblNlcnZp
Y2VzKCkpIHx8IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmhhc1JpY2hDb250ZW50U2VydmljZXMoKTsK
KyAgICByZXR1cm4gKGlzVGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaGFzU2Vs
ZWN0aW9uU2VydmljZXMoKSkgfHwgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaGFzUmljaENvbnRl
bnRTZXJ2aWNlcygpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29sb3JDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29sb3JDaG9vc2VyLmNwcAppbmRleCBi
Nzc5MTgyMTYyZGZhOGMyZTQ0NjA2Y2QxYjJhZmM0ZTU0NTZmZTFlLi4xNTg1NGFlYzBiOWIxZWE0
ZGI4OWEyNjA1Yzg5Mzk2ODc5ZTYyYmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbG9yQ2hvb3Nlci5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb2xvckNob29zZXIuY3BwCkBAIC00
Myw3ICs0Myw3IEBAIFdlYkNvbG9yQ2hvb3Nlcjo6V2ViQ29sb3JDaG9vc2VyKFdlYlBhZ2UqIHBh
Z2UsIENvbG9yQ2hvb3NlckNsaWVudCogY2xpZW50LCBjb25zCiAgICAgLCBtX3BhZ2UocGFnZSkK
IHsKICAgICBtX3BhZ2UtPnNldEFjdGl2ZUNvbG9yQ2hvb3Nlcih0aGlzKTsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNob3dDb2xvclBpY2tlcihpbml0aWFsQ29sb3IsIGNsaWVudC0+ZWxlbWVu
dFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbG9yUGlja2VyKGluaXRpYWxDb2xvciwgY2xpZW50LT5l
bGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAK
IFdlYkNvbG9yQ2hvb3Nlcjo6fldlYkNvbG9yQ2hvb3NlcigpCkBAIC03NSw3ICs3NSw3IEBAIHZv
aWQgV2ViQ29sb3JDaG9vc2VyOjpyZWF0dGFjaENvbG9yQ2hvb3Nlcihjb25zdCBDb2xvciYgY29s
b3IpCiAgICAgbV9wYWdlLT5zZXRBY3RpdmVDb2xvckNob29zZXIodGhpcyk7CiAKICAgICBBU1NF
UlQobV9jb2xvckNob29zZXJDbGllbnQpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0Nv
bG9yUGlja2VyKGNvbG9yLCBtX2NvbG9yQ2hvb3NlckNsaWVudC0+ZWxlbWVudFJlY3RSZWxhdGl2
ZVRvUm9vdFZpZXcoKSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvd0NvbG9yUGlja2VyKGNvbG9yLCBtX2NvbG9yQ2hvb3NlckNsaWVudC0+ZWxlbWVu
dFJlY3RSZWxhdGl2ZVRvUm9vdFZpZXcoKSksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYkNvbG9yQ2hvb3Nlcjo6c2V0U2VsZWN0ZWRDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBA
IC04Niw3ICs4Niw3IEBAIHZvaWQgV2ViQ29sb3JDaG9vc2VyOjpzZXRTZWxlY3RlZENvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKICAgICBpZiAobV9wYWdlLT5hY3RpdmVDb2xvckNob29zZXIoKSAh
PSB0aGlzKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNldENv
bG9yUGlja2VyQ29sb3IoY29sb3IpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNldENvbG9yUGlja2VyQ29sb3IoY29sb3IpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKIH0KIAogdm9pZCBXZWJDb2xvckNob29zZXI6OmVuZENob29zZXIoKQpAQCAtOTQsNyArOTQs
NyBAQCB2b2lkIFdlYkNvbG9yQ2hvb3Nlcjo6ZW5kQ2hvb3NlcigpCiAgICAgaWYgKCFtX3BhZ2Up
CiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RW5kQ29sb3JQaWNr
ZXIoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFbmRD
b2xvclBpY2tlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKaW5kZXggNTI2YWM1NzNhZWI3Zjg5M2YwOTZkYmIz
MWJiNjkwMTQ1ODgxZjQ4Ni4uMzRhZmJiYWRmZGI0ZDk4NmY1ZjdjYTNkY2RkYTQ3MDNmZmU3OTI2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcApAQCAtODgsNyArODgsNyBAQCBib29sIFdlYkVk
aXRvckNsaWVudDo6aXNTZWxlY3RUcmFpbGluZ1doaXRlc3BhY2VFbmFibGVkKCkKIAogYm9vbCBX
ZWJFZGl0b3JDbGllbnQ6OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkKIHsKLSAg
ICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7
CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVDb250aW51b3VzU3BlbGxDaGVja2lu
ZygpCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVDb250aW51
b3VzU3BlbGxDaGVja2luZygpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hl
Y2tlclN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOworICAgIHJldHVybiBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlR3JhbW1hckNoZWNraW5nKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKaW5kZXggNjM0YTE0YWUwMjM1ZWJkNmY0
ZDY1NDg4MmY1YTY5Mzc5YTNkMGE1Ny4uOTUxNDA5ZTM0NjgxZGNjNzkwMjU2Yjk0NmM4MmFhNmJj
MWZkNWNlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAKQEAgLTE0OCw3ICsx
NDgsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkZXRhY2hlZEZyb21QYXJlbnQyKCkK
ICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlbW92ZUZyYW1l
RnJvbUhpZXJhcmNoeSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNl
ckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1
c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRldGFjaGVkRnJvbVBhcmVudDMoKQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERv
Y3VtZW50TG9hCiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PEF1dGhlbnRpY2F0aW9uTWFuYWdlcj4oKS0+ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fZnJhbWUsIGNoYWxsZW5nZSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxBdXRoZW50aWNhdGlvbk1hbmFnZXI+
KCktPmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX2ZyYW1lLCBjaGFsbGVuZ2Up
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNlbEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAvKmlkZW50
aWZpZXIqLywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKSAgICAKQEAgLTI5MSw3ICsy
OTEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5k
bGVMb2FkZXJDbGllbnQoKS5kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExv
YWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkg
dGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJh
bWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIHVybCwgVXNlckRh
dGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0
YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZSht
X2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCB1cmwsIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKQEAgLTMyNyw3ICszMjcsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGlu
UGFnZSgpCiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJEb2N1bWVudExv
YWRlciYgZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCpt
X2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZpZ2F0
aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9u
SUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvbkFuY2hvck5hdmlnYXRpb24sIG1fZnJhbWUtPmNv
cmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0
KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExv
YWRlci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvbkFuY2hvck5hdmlnYXRp
b24sIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNl
ckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1
c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpCkBAIC0zNDMsNyArMzQzLDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkK
IAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBk
b2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUt
PmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JG
cmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUHVzaCwgbV9mcmFtZS0+Y29yZUZyYW1l
KCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFy
ZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsK
KyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5h
dmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUHVzaCwgbV9m
cmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRSZXBsYWNlU3RhdGVXaXRoaW5QYWdlKCkKQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViRG9jdW1lbnRMb2FkZXImIGRv
Y3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigqbV9mcmFtZS0+
Y29yZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwotICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZy
YW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFNh
bWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVSZXBsYWNlLCBtX2ZyYW1lLT5jb3JlRnJh
bWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIu
bmF2aWdhdGlvbklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVSZXBsYWNl
LCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNl
ckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgpCkBAIC0zNzUsNyArMzc1LDcgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRQb3BTdGF0ZVdpdGhpblBhZ2UoKQogCiAg
ICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViRG9jdW1lbnRMb2FkZXImIGRvY3Vt
ZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigqbV9mcmFtZS0+Y29y
ZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwotICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1l
KG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFNhbWVE
b2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQb3AsIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0
aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVBvcCwgbV9mcmFtZS0+
Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxs
Q2xvc2UoKQpAQCAtMzg1LDcgKzM4NSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoV2lsbENsb3NlKCkKIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRSZWNlaXZlSWNvbigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSWNvbkRhdGFiYXNlOjpEaWRSZWNlaXZl
SWNvbkZvclBhZ2VVUkwobV9mcmFtZS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJY29u
RGF0YWJhc2U6OkRpZFJlY2VpdmVJY29uRm9yUGFnZVVSTChtX2ZyYW1lLT51cmwoKSksIDApOwog
fQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkKCkKQEAgLTQxMyw3ICs0MTMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkKCkKICAgICBTdHJpbmcgdW5yZWFjaGFibGVV
UkwgPSBwcm92aXNpb25hbExvYWRlci51bnJlYWNoYWJsZVVSTCgpLnN0cmluZygpOwogCiAgICAg
Ly8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1l
SUQoKSwgcHJvdmlzaW9uYWxMb2FkZXIubmF2aWdhdGlvbklEKCksIHVybCwgdW5yZWFjaGFibGVV
UkwsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2ZyYW1lLT5m
cmFtZUlEKCksIHByb3Zpc2lvbmFsTG9hZGVyLm5hdmlnYXRpb25JRCgpLCB1cmwsIHVucmVhY2hh
YmxlVVJMLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVj
dGlvbiYgdGl0bGUpCkBAIC00MjksNyArNDI5LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGkK
ICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlY2VpdmVUaXRs
ZUZvckZyYW1lKHdlYlBhZ2UsIHRpdGxlLnN0cmluZygpLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAK
ICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQo
KSwgdGl0bGUuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUobV9m
cmFtZS0+ZnJhbWVJRCgpLCB0aXRsZS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkp
KSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2hhbmdlSWNv
bnMoV2ViQ29yZTo6SWNvblR5cGUpCkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIAogICAgIC8vIE5vdGlmeSB0aGUg
VUlQcm9jZXNzLgogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRDb21taXRMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5u
YXZpZ2F0aW9uSUQoKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5taW1lVHlwZSgpLCBtX2Zy
YW1lSGFzQ3VzdG9tQ29udGVudFByb3ZpZGVyLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9mcmFt
ZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmxvYWRUeXBlKCkpLCBkb2N1bWVudExvYWRlci5yZXNw
b25zZSgpLmNlcnRpZmljYXRlSW5mbygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBkb2N1
bWVudExvYWRlci5yZXNwb25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXNDdXN0b21Db250ZW50
UHJvdmlkZXIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9h
ZGVyKCkubG9hZFR5cGUoKSksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkuY2VydGlmaWNhdGVJ
bmZvKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNU
b0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogICAgIHdlYlBhZ2UtPmRpZENvbW1p
dExvYWQobV9mcmFtZSk7CiB9CiAKQEAgLTQ4Myw3ICs0ODMsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VF
cnJvciYgZQogICAgICAgICBuYXZpZ2F0aW9uSUQgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExv
YWRlcio+KGRvY3VtZW50TG9hZGVyKS0+bmF2aWdhdGlvbklEKCk7CiAKICAgICAvLyBOb3RpZnkg
dGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZEZhaWxQcm92aXNpb25hbExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmln
YXRpb25JRCwgZXJyb3IsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9i
amVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KG1fZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbklELCBlcnJvciwgVXNlckRhdGEoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSk7CiAKICAgICAvLyBJZiB3ZSBoYXZlIGEgbG9hZCBsaXN0ZW5lciwgbm90aWZ5
IGl0LgogICAgIGlmIChXZWJGcmFtZTo6TG9hZExpc3RlbmVyKiBsb2FkTGlzdGVuZXIgPSBtX2Zy
YW1lLT5sb2FkTGlzdGVuZXIoKSkKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViRG9jdW1lbnRMb2FkZXIm
IGRvY3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigqbV9mcmFt
ZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwotICAgIHdlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbExvYWRGb3JGcmFtZShtX2ZyYW1l
LT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBlcnJvciwgVXNlckRh
dGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0
YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRGYWlsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2Fk
ZXIubmF2aWdhdGlvbklEKCksIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIAog
ICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdl
YkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5l
cigpKQpAQCAtNTI0LDcgKzUyNCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKICAgICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1l
bnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3Jl
RnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7CiAKICAgICAvLyBOb3RpZnkgdGhl
IFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoRG9jdW1lbnRMb2FkRm9y
RnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKICAgICBXZWJEb2N1bWVu
dExvYWRlciYgZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+
KCptX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7CiAKICAg
ICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZEZpbmlzaExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRv
Y3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQo
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAg
ICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpbmlzaExvYWRGb3JG
cmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBV
c2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxp
c3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRM
aXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5lcigpKQpAQCAtNTc1LDcgKzU3NSw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTGF5b3V0KExheW91dE1pbGVzdG9u
ZXMgbWlsZXN0b25lcykKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciByZW1v
dmluZyB0aGUgb2xkIGRpZEZpcnN0TGF5b3V0IEFQSSBzaW5jZSB0aGlzIGlzIGRvaW5nIGRvdWJs
ZSBkdXR5IHdpdGggdGhlCiAgICAgICAgIC8vIG5ldyBkaWRMYXlvdXQgQVBJLgogICAgICAgICB3
ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpcnN0TGF5b3V0Rm9yRnJh
bWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwotICAgICAgICB3ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJh
bWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9I
YW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICAgICAgd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdExheW91dEZvckZyYW1lKG1fZnJhbWUtPmZy
YW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAKICNpZiBQTEFURk9STShNQUMp
CiAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIG9uIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxh
eW91dCB3aGVuIE1hYyBTYWZhcmkgaXMgYWJsZSB0byBoYW5kbGUgaXQgKDxyZGFyOi8vcHJvYmxl
bS8xNzU4MDAyMT4pCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQogCiAgICAg
Ly8gU2VuZCB0aGlzIGFmdGVyIERpZEZpcnN0TGF5b3V0LXNwZWNpZmljIGNhbGxzIHNpbmNlIHNv
bWUgY2xpZW50cyBleHBlY3QgdG8gZ2V0IHRob3NlIG1lc3NhZ2VzIGZpcnN0LgogICAgIHdlYlBh
Z2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkTGF5b3V0KHdlYlBhZ2UsIG1pbGVz
dG9uZXMsIHVzZXJEYXRhKTsKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZExheW91dChtaWxlc3RvbmVzLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZExheW91dChtaWxlc3RvbmVz
LCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5k
bGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIAogICAgIGlmIChtaWxlc3RvbmVzICYgRGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KSB7CiAgICAgICAgIGlmIChtX2ZyYW1lLT5pc01h
aW5GcmFtZSgpICYmICFtX2RpZENvbXBsZXRlUGFnZVRyYW5zaXRpb24gJiYgIXdlYlBhZ2UtPmNv
cmVQYWdlKCktPnNldHRpbmdzKCkuc3VwcHJlc3Nlc0luY3JlbWVudGFsUmVuZGVyaW5nKCkpIHsK
QEAgLTYwNCw3ICs2MDQsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgY29uc2lkZXIgcmVtb3ZpbmcgdGhlIG9sZCBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1w
dHlMYXlvdXRGb3JGcmFtZSBBUEkgc2luY2UgdGhpcyBpcyBkb2luZwogICAgICAgICAvLyBkb3Vi
bGUgZHV0eSB3aXRoIHRoZSBuZXcgZGlkTGF5b3V0IEFQSS4KICAgICAgICAgd2ViUGFnZS0+aW5q
ZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRG
b3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7Ci0gICAgICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0
Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQo
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAg
ICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdFZpc3Vh
bGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOwogICAgIH0KIH0KIApAQCAtNjg2LDcgKzY4Niw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zCiAgICAgdW5zaWduZWQgc3luY1NlbmRGbGFncyA9IElQQzo6SW5mb3Jt
UGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQ7CiAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9ub3Vz
TWVzc2FnZXNTaG91bGRTcGluUnVuTG9vcCgpKQogICAgICAgICBzeW5jU2VuZEZsYWdzIHw9IElQ
Qzo6U3BpblJ1bkxvb3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKLSAgICBpZiAoIXdlYlBhZ2UtPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3lu
YyhtX2ZyYW1lLT5mcmFtZUlEKCksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUs
IGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rp
b24sIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6
Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKKyAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvclJlc3BvbnNlU3luYyhtX2ZyYW1lLT5m
cmFtZUlEKCksIHJlc3BvbnNlLCByZXF1ZXN0LCBjYW5TaG93TUlNRVR5cGUsIGxpc3RlbmVySUQs
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lk
ZVBvbGljeUZvclJlc3BvbnNlU3luYzo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIHBvbGlj
eUFjdGlvbiwgZG93bmxvYWRJRCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBz
eW5jU2VuZEZsYWdzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgY2FsbCB0aGlzIHN5
bmNocm9ub3VzbHkgYmVjYXVzZSBDRk5ldHdvcmsgY2FuIG9ubHkgY29udmVydCBhIGxvYWRpbmcg
Y29ubmVjdGlvbiB0byBhIGRvd25sb2FkIGZyb20gaXRzIGRpZFJlY2VpdmVSZXNwb25zZSBjYWxs
YmFjay4KQEAgLTcyMSw3ICs3MjEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihjb25zdCBOYXZpZ2F0aQogICAgIG5h
dmlnYXRpb25BY3Rpb25EYXRhLmlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0gbmF2aWdhdGlvbkFj
dGlvbi5wcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKICAgICBuYXZpZ2F0aW9uQWN0aW9uRGF0YS5j
YW5IYW5kbGVSZXF1ZXN0ID0gd2ViUGFnZS0+Y2FuSGFuZGxlUmVxdWVzdChyZXF1ZXN0KTsKIAot
ICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9y
TmV3V2luZG93QWN0aW9uKG1fZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEs
IHJlcXVlc3QsIGZyYW1lTmFtZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7
CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lG
b3JOZXdXaW5kb3dBY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSwgcmVxdWVzdCwgZnJhbWVOYW1lLCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQo
KSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xp
Y3lGb3JOYXZpZ2F0aW9uQWN0aW9uKGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mIG5hdmlnYXRpb25B
Y3Rpb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgUGFzc1JlZlB0cjxGb3JtU3Rh
dGU+IHBycEZvcm1TdGF0ZSwgRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbikKQEAgLTc4OCw3
ICs3ODgsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb24oY29uc3QgTmF2aWdhdAogICAgICAgICBkb2N1bWVudExvYWRl
ciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyKj4oY29yZUZyYW1lLT5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIGlm
ICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5
Rm9yTmF2aWdhdGlvbkFjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLT5u
YXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIG9yaWdpbmF0aW5nRnJhbWUgPyBv
cmlnaW5hdGluZ0ZyYW1lLT5mcmFtZUlEKCkgOiAwLCBuYXZpZ2F0aW9uQWN0aW9uLnJlc291cmNl
UmVxdWVzdCgpLCByZXF1ZXN0LCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFy
ZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOjpS
ZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgbmV3TmF2aWdhdGlvbklELCBwb2xpY3lBY3Rpb24s
IGRvd25sb2FkSUQpKSkKKyAgICBpZiAoIXdlYlBhZ2UtPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24obV9mcmFtZS0+ZnJhbWVJ
RCgpLCBkb2N1bWVudExvYWRlci0+bmF2aWdhdGlvbklEKCksIG5hdmlnYXRpb25BY3Rpb25EYXRh
LCBvcmlnaW5hdGluZ0ZyYW1lID8gb3JpZ2luYXRpbmdGcmFtZS0+ZnJhbWVJRCgpIDogMCwgbmF2
aWdhdGlvbkFjdGlvbi5yZXNvdXJjZVJlcXVlc3QoKSwgcmVxdWVzdCwgbGlzdGVuZXJJRCwgVXNl
ckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1
c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9s
aWN5Rm9yTmF2aWdhdGlvbkFjdGlvbjo6UmVwbHkocmVjZWl2ZWRQb2xpY3lBY3Rpb24sIG5ld05h
dmlnYXRpb25JRCwgcG9saWN5QWN0aW9uLCBkb3dubG9hZElEKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdlIGNhbGwgdGhpcyBzeW5jaHJvbm91c2x5IGJlY2F1c2UgV2ViQ29yZSBjYW5u
b3QgZ3JhY2VmdWxseSBoYW5kbGUgYSBmcmFtZSBsb2FkIHdpdGhvdXQgYSBzeW5jaHJvbm91cyBu
YXZpZ2F0aW9uIHBvbGljeSByZXBseS4KQEAgLTgxMyw3ICs4MTMsNyBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291
cmNlRXJyb3ImCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVQb2xpY3lDbGllbnQoKS51bmFi
bGVUb0ltcGxlbWVudFBvbGljeSh3ZWJQYWdlLCBtX2ZyYW1lLCBlcnJvciwgdXNlckRhdGEpOwog
CiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpVbmFibGVUb0ltcGxlbWVudFBvbGljeShtX2ZyYW1lLT5mcmFtZUlE
KCksIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuYWJsZVRvSW1wbGVtZW50UG9saWN5KG1fZnJhbWUtPmZy
YW1lSUQoKSwgZXJyb3IsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kU3VibWl0RXZlbnQoUGFzc1JlZlB0
cjxGb3JtU3RhdGU+IHBycEZvcm1TdGF0ZSkKQEAgLTg1Myw3ICs4NTMsNyBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKFBhc3NSZWZQdHI8Rm9ybVN0
YXRlPiBwcnBGb3JtUwogCiAgICAgdWludDY0X3QgbGlzdGVuZXJJRCA9IG1fZnJhbWUtPnNldFVw
UG9saWN5TGlzdGVuZXIoV1RGOjptb3ZlKGZ1bmN0aW9uKSk7CiAKLSAgICB3ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxTdWJtaXRGb3JtKG1fZnJhbWUtPmZyYW1lSUQo
KSwgc291cmNlRnJhbWUtPmZyYW1lSUQoKSwgdmFsdWVzLCBsaXN0ZW5lcklELCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdl
dCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OldpbGxTdWJtaXRGb3JtKG1fZnJhbWUtPmZyYW1lSUQoKSwgc291cmNlRnJhbWUtPmZyYW1lSUQo
KSwgdmFsdWVzLCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAog
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3Vt
ZW50TG9hZGVyKikKQEAgLTEwMDksNyArMTAwOSw3IEBAIGJvb2wgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OnNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKICAgICBp
ZiAoIXNob3VsZEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldpbGxHb1RvQmFj
a0ZvcndhcmRMaXN0SXRlbShpdGVtSUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2lsbEdvVG9CYWNrRm9yd2FyZExp
c3RJdGVtKGl0ZW1JRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTEwMjMsNyArMTAyMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKQogCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5k
bGVMb2FkZXJDbGllbnQoKS5kaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUod2ViUGFn
ZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUobV9mcmFtZS0+ZnJh
bWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9I
YW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShtX2Zy
YW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2VjdXJpdHlPcmlnaW4q
LCBjb25zdCBVUkwmKQpAQCAtMTAzNiw3ICsxMDM2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgVVJMJikK
IAogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUnVuSW5zZWN1
cmVDb250ZW50Rm9yRnJhbWUod2ViUGFnZSwgbV9mcmFtZSwgdXNlckRhdGEpOwogCi0gICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSdW5JbnNlY3VyZUNvbnRlbnRG
b3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUnVuSW5zZWN1cmVDb250
ZW50Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkp
KTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkRGV0ZWN0WFNTKGNvbnN0IFVS
TCYsIGJvb2wpCkBAIC0xMDQ5LDcgKzEwNDksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9vbCkKIAogICAgIHdlYlBhZ2UtPmluamVjdGVk
QnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRGV0ZWN0WFNTRm9yRnJhbWUod2ViUGFnZSwgbV9mcmFt
ZSwgdXNlckRhdGEpOwogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWREZXRlY3RYU1NGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkp
LmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
RGV0ZWN0WFNTRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKIH0KIAogUmVzb3VyY2VFcnJvciBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2Vs
bGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJHZW9sb2NhdGlvbkNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xv
Y2F0aW9uQ2xpZW50LmNwcAppbmRleCBjMjIxMTAzODM4NDhjMzZiZjY0MWY2OGZmYThkNWY3Yjlh
MGFjZTA1Li5jZjE2YmM2OGVhZDJkZjQ1NzBkN2M1YzYyZjgzNzZhYjEwNTlhNDEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0
aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcApAQCAtNDQsMjMgKzQ0LDIzIEBAIFdlYkdlb2xv
Y2F0aW9uQ2xpZW50Ojp+V2ViR2VvbG9jYXRpb25DbGllbnQoKQogCiB2b2lkIFdlYkdlb2xvY2F0
aW9uQ2xpZW50OjpnZW9sb2NhdGlvbkRlc3Ryb3llZCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQ
YWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJH
ZW9sb2NhdGlvbk1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CiAgICAgZGVs
ZXRlIHRoaXM7CiB9CiAKIHZvaWQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnN0YXJ0VXBkYXRpbmco
KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25N
YW5hZ2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+cmVnaXN0ZXJXZWJQ
YWdlKG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnN0b3BVcGRhdGlu
ZygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlv
bk1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnVucmVnaXN0
ZXJXZWJQYWdlKG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViR2VvbG9jYXRpb25DbGllbnQ6OnNldEVu
YWJsZUhpZ2hBY2N1cmFjeShib29sIGVuYWJsZWQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnNldEVuYWJsZUhpZ2hBY2N1
cmFjeUZvclBhZ2UobV9wYWdlLCBlbmFibGVkKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+c2V0RW5hYmxlSGlnaEFjY3Vy
YWN5Rm9yUGFnZShtX3BhZ2UsIGVuYWJsZWQpOwogfQogCiBHZW9sb2NhdGlvblBvc2l0aW9uKiBX
ZWJHZW9sb2NhdGlvbkNsaWVudDo6bGFzdFBvc2l0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0
aW9uQ2xpZW50LmNwcAppbmRleCA2MmZmOGZiYTJiNWI1MmE0MmE2MzZmNDE4N2Q3NDNhMzE3Yjg3
YTcwLi42Y2U2NWYyNjE0OGFiZmNjMTgwZDk1YzM0ZjIxMTdmYWZkZTIzMmFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCkBAIC00OSwyMiArNDksMjIgQEAgV2ViTm90aWZp
Y2F0aW9uQ2xpZW50Ojp+V2ViTm90aWZpY2F0aW9uQ2xpZW50KCkKIAogYm9vbCBXZWJOb3RpZmlj
YXRpb25DbGllbnQ6OnNob3coTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdl
cj4oKS0+c2hvdyhub3RpZmljYXRpb24sIG1fcGFnZSk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+c2hvdyhu
b3RpZmljYXRpb24sIG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViTm90aWZpY2F0aW9uQ2xpZW50Ojpj
YW5jZWwoTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5jYW5jZWwobm90aWZp
Y2F0aW9uLCBtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8
V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+Y2FuY2VsKG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsK
IH0KIAogdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNsZWFyTm90aWZpY2F0aW9ucyhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+Y2xlYXJOb3RpZmljYXRpb25z
KGNvbnRleHQsIG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5jbGVhck5vdGlmaWNhdGlvbnMoY29udGV4dCwg
bV9wYWdlKTsKIH0KIAogdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbk9i
amVjdERlc3Ryb3llZChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmRpZERl
c3Ryb3lOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkRGVz
dHJveU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG1fcGFnZSk7CiB9CiAKIHZvaWQgV2ViTm90
aWZpY2F0aW9uQ2xpZW50Ojpub3RpZmljYXRpb25Db250cm9sbGVyRGVzdHJveWVkKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZv
cm1TdHJhdGVnaWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAppbmRleCBiMjc5ZGQyYzY2ZDIyOGMxZGM5NTgy
NGZkYzYyZmVjMjZlZDMxZWZjLi41NGViZTQ0NDZiMjI2ZmJlMGI1NzM2NzY3N2JkYTMzMmYxODk5
YjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCkBAIC0xMTAsOSArMTEw
LDkgQEAgUGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGx1Z2lu
U3RyYXRlZ3koKQogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0
eSwgY29uc3QgVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBp
ZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAo
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAg
U3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lv
bklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET006OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpDb29raWVzRm9yRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0
UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29v
a2llc0ZvckRPTTo6UmVwbHkocmVzdWx0KSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMTI0LDggKzEyNCw4IEBAIFN0
cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0
b3JhZ2VTZXNzaW9uJiBzZXNzaW9uCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29v
a2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBV
UkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZVN0cmlu
ZykKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpz
aGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRDb29raWVzRnJvbURPTShTZXNzaW9uVHJh
Y2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyks
IDApOworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3Mo
KSkgeworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigp
LT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpTZXRDb29raWVzRnJvbURPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24p
LCBmaXJzdFBhcnR5LCB1cmwsIGNvb2tpZVN0cmluZyksIDApOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmCkBAIC0xMzYsOSArMTM2LDkgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnNldENvb2tpZXNGcm9tRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2kK
IGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVzRW5hYmxlZChjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJM
JiB1cmwpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgYm9vbCByZXN1bHQ7
Ci0gICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OkNvb2tpZXNFbmFibGVkKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiks
IGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q29va2llc0VuYWJsZWQ6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5h
YmxlZChTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwp
LCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVk
OjpSZXBseShyZXN1bHQpLCAwKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNTAsOSArMTUwLDkgQEAgYm9vbCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJlcXVlc3RIZWFk
ZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19Q
Uk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3Mo
KSkgeworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3Mo
KSkgewogICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNo
YXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmll
bGRWYWx1ZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1
cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlOjpSZXBseShyZXN1bHQpLCAwKSkKKyAgICAgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwg
Zmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZTo6UmVwbHkocmVzdWx0KSwgMCkpCiAgICAg
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpA
QCAtMTY0LDggKzE2NCw4IEBAIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tpZVJl
cXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IE5ldHdvcmtTdG9yYWdlCiBib29sIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIFZlY3RvcjxD
b29raWU+JiByYXdDb29raWVzKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAg
aWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlv
bigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Okdl
dFJhd0Nvb2tpZXMoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0
eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdD
b29raWVzOjpSZXBseShyYXdDb29raWVzKSwgMCkpCisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoU2Vz
c2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzOjpSZXBseShy
YXdDb29raWVzKSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KQEAgLTE3Nyw4ICsxNzcsOCBAQCBib29sIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24s
CiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9j
ZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVDb29raWUoU2Vzc2lvblRy
YWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgdXJsLCBjb29raWVOYW1lKSwgMCk7CisgICAgaWYg
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkRlbGV0ZUNv
b2tpZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNvb2tpZU5hbWUp
LCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMTkzLDggKzE5Myw4IEBA
IFJlc291cmNlTG9hZFNjaGVkdWxlciogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxv
YWRTY2hlZHVsZXIoKQogewogICAgIHN0YXRpYyBSZXNvdXJjZUxvYWRTY2hlZHVsZXIqIHNjaGVk
dWxlcjsKICAgICBpZiAoIXNjaGVkdWxlcikgewotICAgICAgICBpZiAoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCi0gICAgICAgICAgICBzY2hlZHVsZXIgPSAmV2Vi
UHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CisgICAgICAgIGlm
IChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKKyAgICAgICAg
ICAgIHNjaGVkdWxlciA9ICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2NoZWR1bGVyID0gV2ViQ29y
ZTo6cmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAgICAgfQpAQCAtMjA0LDcgKzIwNCw3IEBAIFJl
c291cmNlTG9hZFNjaGVkdWxlciogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6bG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dCwgdW5zaWduZWQgbG9uZyByZXNv
dXJjZUxvYWRJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFN0b3Jl
ZENyZWRlbnRpYWxzIHN0b3JlZENyZWRlbnRpYWxzLCBDbGllbnRDcmVkZW50aWFsUG9saWN5IGNs
aWVudENyZWRlbnRpYWxQb2xpY3ksIFJlc291cmNlRXJyb3ImIGVycm9yLCBSZXNvdXJjZVJlc3Bv
bnNlJiByZXNwb25zZSwgVmVjdG9yPGNoYXI+JiBkYXRhKQogewotICAgIGlmICghV2ViUHJvY2Vz
czo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgIExvYWRlclN0cmF0
ZWd5Ojpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnRleHQsIHJlc291cmNlTG9hZElkZW50
aWZpZXIsIHJlcXVlc3QsIHN0b3JlZENyZWRlbnRpYWxzLCBjbGllbnRDcmVkZW50aWFsUG9saWN5
LCBlcnJvciwgcmVzcG9uc2UsIGRhdGEpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjMw
LDcgKzIzMCw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5j
aHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0CiAKICAgICBkYXRhLnJlc2l6ZSgw
KTsKIAotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJl
cGx5KGVycm9yLCByZXNwb25zZSwgZGF0YSksIDApKSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3Vz
TG9hZChsb2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRh
KSwgMCkpIHsKICAgICAgICAgcmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CiAgICAgICAg
IGVycm9yID0gaW50ZXJuYWxFcnJvcihyZXF1ZXN0LnVybCgpKTsKICAgICB9CkBAIC0yMzgsNyAr
MjM4LDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9u
b3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRleHQKIAogQmxvYlJlZ2lzdHJ5KiBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpCiB7Ci0gICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKQogICAgICAgICByZXR1cm4gTG9hZGVy
U3RyYXRlZ3k6OmNyZWF0ZUJsb2JSZWdpc3RyeSgpOwogICAgIHJldHVybiBuZXcgQmxvYlJlZ2lz
dHJ5UHJveHk7ICAgIAogfQpAQCAtMjgxLDcgKzI4MSw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpwb3B1bGF0ZVBsdWdpbkNhY2hlKCkKICAgICBBU1NFUlQobV9jYWNoZWRQbHVnaW5z
LmlzRW1wdHkoKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBkbyBzb21ldGhpbmcg
aW4gY2FzZSBvZiBlcnJvciBoZXJlPwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0UGx1Z2lucyhtX3Nob3VsZFJlZnJlc2hQbHVnaW5zKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0UGx1Z2luczo6UmVwbHkobV9jYWNoZWRQbHVnaW5zLCBtX2NhY2hlZEFwcGxp
Y2F0aW9uUGx1Z2lucyksIDApKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94
eTo6R2V0UGx1Z2lucyhtX3Nob3VsZFJlZnJlc2hQbHVnaW5zKSwgTWVzc2FnZXM6OldlYlByb2Nl
c3NQcm94eTo6R2V0UGx1Z2luczo6UmVwbHkobV9jYWNoZWRQbHVnaW5zLCBtX2NhY2hlZEFwcGxp
Y2F0aW9uUGx1Z2lucyksIDApKQogICAgICAgICByZXR1cm47CiAKICAgICBtX3Nob3VsZFJlZnJl
c2hQbHVnaW5zID0gZmFsc2U7CkBAIC0zMDEsNyArMzAxLDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmdldFR5cGVzKFZlY3RvcjxTdHJpbmc+JiB0eXBlcywgY29uc3QgU3RyaW5nJiBw
YXN0ZWIKICAgICBpZiAoIXR5cGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9h
cmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFR5cGVz
OjpSZXBseSh0eXBlcyksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OkdldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OkdldFBhc3RlYm9hcmRUeXBlczo6UmVwbHkodHlwZXMpLCAwKTsKIH0KIAogUGFz
c1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVm
ZmVyRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQpAQCAtMzE0LDcgKzMxNCw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3Ry
CiAgICAgLy8gRmFsbGJhY2sgdG8gbWVzc2FnaW5nIHRoZSBVSSBwcm9jZXNzIGZvciBuYXRpdmUg
cGFzdGVib2FyZCBjb250ZW50LgogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAg
ICB1aW50NjRfdCBzaXplID0gMDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpH
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUp
LCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlw
ZTo6UmVwbHkoaGFuZGxlLCBzaXplKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3Rl
Ym9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEJ1
ZmZlckZvclR5cGU6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOwogICAgIGlmIChoYW5kbGUuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJl
ZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVkTWVtb3J5
OjpSZWFkT25seSk7CkBAIC0zMjMsNjIgKzMyMyw2MiBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0
cgogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGF0aG5hbWVzRm9yVHlwZShWZWN0
b3I8U3RyaW5nPiYgcGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OkdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0
ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRQ
YXRobmFtZXNGb3JUeXBlOjpSZXBseShwYXRobmFtZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJv
YXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpH
ZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzKSwgMCk7CiB9CiAK
IFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBT
dHJpbmcgdmFsdWU7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVi
b2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5
KHZhbHVlKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFz
dGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJl
cGx5KHZhbHVlKSwgMCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6Y29weShjb25zdCBTdHJpbmcmIGZyb21QYXN0ZWJvYXJkLCBjb25zdCBTdHJp
bmcmIHRvUGFzdGVib2FyZCkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQ29weShmcm9tUGFzdGVib2Fy
ZCwgdG9QYXN0ZWJvYXJkKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2Fy
ZENvcHk6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZENvcHkoZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2Fy
ZCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRDb3B5OjpSZXBseShu
ZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9u
ZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KGNvbnN0IFdURjo6U3RyaW5nICZw
YXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBjaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQocGFzdGVib2Fy
ZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdl
Q291bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KHBhc3RlYm9hcmROYW1lKSwgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50OjpSZXBs
eShjaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBjaGFuZ2VDb3VudDsKIH0KIAogU3RyaW5n
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6dW5pcXVlTmFtZSgpCiB7CiAgICAgU3RyaW5nIHBhc3Rl
Ym9hcmROYW1lOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9h
cmRVbmlxdWVOYW1lKCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9h
cmRVbmlxdWVOYW1lOjpSZXBseShwYXN0ZWJvYXJkTmFtZSksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lKCksIE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVbmlxdWVOYW1lOjpSZXBseShwYXN0
ZWJvYXJkTmFtZSksIDApOwogICAgIHJldHVybiBwYXN0ZWJvYXJkTmFtZTsKIH0KIAogQ29sb3Ig
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb2xvcihjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1l
KQogewogICAgIENvbG9yIGNvbG9yOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OkdldFBhc3RlYm9hcmRDb2xvcihwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OkdldFBhc3RlYm9hcmRDb2xvcjo6UmVwbHkoY29sb3IpLCAwKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3IocGFzdGVib2Fy
ZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3I6
OlJlcGx5KGNvbG9yKSwgMCk7CiAgICAgcmV0dXJuIGNvbG9yOwogfQogCiBVUkwgV2ViUGxhdGZv
cm1TdHJhdGVnaWVzOjp1cmwoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBT
dHJpbmcgdXJsU3RyaW5nOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRVUkwocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkVVJMOjpSZXBseSh1cmxTdHJpbmcpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVVJMKHBhc3RlYm9hcmROYW1lKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTDo6UmVwbHkodXJs
U3RyaW5nKSwgMCk7CiAgICAgcmV0dXJuIFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7
CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjphZGRUeXBlcyhjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQog
ewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OkFkZFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5
cGVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6QWRkUGFzdGVib2FyZFR5cGVzOjpS
ZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OkFkZFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVz
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6QWRkUGFzdGVib2FyZFR5cGVzOjpSZXBs
eShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAog
bG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAg
dWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94
eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5l
d0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0No
YW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCkBAIC0zOTUs
NDQgKzM5NSw0NCBAQCBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0QnVmZmVyRm9yVHlw
ZShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBjbwogICAgICAgICB9CiAgICAgfQog
ICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJv
YXJkVHlwZSwgaGFuZGxlLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6IDApLCBNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3
Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpT
ZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUs
IGhhbmRsZSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAwKSwgTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNv
dW50KSwgMCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6c2V0UGF0aG5hbWVzRm9yVHlwZShjb25zdCBWZWN0b3I8U3RyaW5nPiYg
cGF0aG5hbWVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBh
c3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVzKSwgTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KG5ld0No
YW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0
UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBl
LCBwYXRobmFtZXMpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJk
UGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4g
bmV3Q2hhbmdlQ291bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRTdHJp
bmdGb3JUeXBlKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRU
eXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IG5ld0No
YW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9h
cmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgc3RyaW5nKSwg
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6
OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3Rl
Ym9hcmRUeXBlLCBzdHJpbmcpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0
ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1
cm4gbmV3Q2hhbmdlQ291bnQ7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCiB2b2lkIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2Fy
ZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpX
cml0ZVdlYkNvbnRlbnRUb1Bhc3RlYm9hcmQoY29udGVudCksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRlbnQpLCAw
KTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNv
bnN0IFdlYkNvcmU6OlBhc3RlYm9hcmRJbWFnZSYgaW1hZ2UpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpXcml0ZUltYWdlVG9QYXN0ZWJvYXJkKGltYWdlKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZUltYWdlVG9QYXN0ZWJvYXJkKGltYWdlKSwg
MCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVN0cmluZ1RvUGFzdGVib2FyZChwYXN0ZWJv
YXJkVHlwZSwgdGV4dCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3Jp
dGVTdHJpbmdUb1Bhc3RlYm9hcmQocGFzdGVib2FyZFR5cGUsIHRleHQpLCAwKTsKIH0KIAogaW50
IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKQogewogICAg
IHVpbnQ2NF90IGl0ZW1zQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQoKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
R2V0UGFzdGVib2FyZEl0ZW1zQ291bnQ6OlJlcGx5KGl0ZW1zQ291bnQpLCAwKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpLCBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDo6UmVw
bHkoaXRlbXNDb3VudCksIDApOwogICAgIHJldHVybiBpdGVtc0NvdW50OwogfQogCkBAIC00NDAs
NyArNDQwLDcgQEAgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3Jt
U3RyYXRlZ2llczo6cmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXIKIHsKICAgICBTaGFyZWRNZW1vcnk6
OkhhbmRsZSBoYW5kbGU7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJv
YXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFz
dGVib2FyZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJk
VHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVi
b2FyZDo6UmVwbHkoaGFuZGxlLCBzaXplKSwgMCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5
QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVhdGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRP
bmx5KTsKQEAgLTQ1MCwyMSArNDUwLDIxIEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVm
ZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyCiBXZWJD
b3JlOjpVUkwgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewogICAgIFN0cmluZyB1cmxT
dHJpbmc7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFVSTEZyb21QYXN0
ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlJlYWRVUkxGcm9tUGFzdGVib2FyZDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFVSTEZyb21QYXN0ZWJvYXJkKGluZGV4
LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRVUkxG
cm9tUGFzdGVib2FyZDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7CiAgICAgcmV0dXJuIFVSTChQYXJz
ZWRVUkxTdHJpbmcsIHVybFN0cmluZyk7CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZFR5cGUpCiB7CiAgICAgU3RyaW5nIHZhbHVlOwotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5
cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9h
cmQ6OlJlcGx5KHZhbHVlKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94
eTo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZDo6UmVwbHko
dmFsdWUpLCAwKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjaGFuZ2VDb3VudCgpCiB7CiAgICAgdWludDY0X3QgY2hhbmdlQ291bnQ7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNvdW50KFN0
cmluZygpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5n
ZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChTdHJpbmcoKSksIE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hh
bmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gY2hhbmdlQ291bnQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0luQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGx1Z0lu
Q2xpZW50LmNwcAppbmRleCA2MTQxZWVmYzIxZTA0ODkxOGRhMGNhYWY4NjczZTUwYmQyY2EwN2Y4
Li4wZmY1ZmMyYzc1MGJlNDA1YzM1YmE3NWY5ZGJjYjU4MzEyM2Y1M2VhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdJbkNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbHVn
SW5DbGllbnQuY3BwCkBAIC01MCwxMiArNTAsMTIgQEAgdm9pZCBXZWJQbHVnSW5DbGllbnQ6OnBh
Z2VEZXN0cm95ZWQoKQogCiBib29sIFdlYlBsdWdJbkNsaWVudDo6c2hvdWxkQXV0b1N0YXJ0RnJv
bU9yaWdpbihjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGx1Z2luT3Jp
Z2luLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5zaG91bGRQbHVnSW5BdXRvU3RhcnRGcm9tT3JpZ2luKG1fd2ViUGFnZSwgcGFnZU9y
aWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnNob3VsZFBsdWdJbkF1dG9TdGFydEZyb21PcmlnaW4obV93ZWJQYWdlLCBwYWdl
T3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlKTsKIH0KIAogdm9pZCBXZWJQbHVnSW5DbGll
bnQ6OmRpZFN0YXJ0RnJvbU9yaWdpbihjb25zdCBTdHJpbmcmIHBhZ2VPcmlnaW4sIGNvbnN0IFN0
cmluZyYgcGx1Z2luT3JpZ2luLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBXZWJDb3JlOjpTZXNz
aW9uSUQgc2Vzc2lvbklEKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBsdWdJbkRpZFN0
YXJ0RnJvbU9yaWdpbihwYWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBzZXNzaW9u
SUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBsdWdJbkRpZFN0YXJ0RnJvbU9yaWdp
bihwYWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlLCBzZXNzaW9uSUQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcAppbmRleCBiNjJkOGQyNDlmMTIw
OTMwMmZlNDA1ZmExN2ViZjRjNGJmYTM3ZGI4Li5jOGVmOWJkMWIwMGRlMDg2MGUyZTE2ZTAzOWY5
ZTA0NmUyNWNiMjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgdm9p
ZCBXZWJQb3B1cE1lbnU6OnNob3coY29uc3QgSW50UmVjdCYgcmVjdCwgRnJhbWVWaWV3KiB2aWV3
LCBpbnQgaW5kZXgpCiAgICAgUGxhdGZvcm1Qb3B1cE1lbnVEYXRhIHBsYXRmb3JtRGF0YTsKICAg
ICBzZXRVcFBsYXRmb3JtRGF0YShwYWdlQ29vcmRpbmF0ZXMsIHBsYXRmb3JtRGF0YSk7CiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBtX3Bv
cHVwQ2xpZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCksIGl0ZW1zLCBpbmRleCwgcGxh
dGZvcm1EYXRhKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpTaG93UG9wdXBNZW51KHBhZ2VDb29yZGluYXRlcywgbV9wb3B1cENsaWVudC0+bWVudVN0eWxl
KCkudGV4dERpcmVjdGlvbigpLCBpdGVtcywgaW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYlBvcHVwTWVudTo6aGlkZSgpCkBAIC0xMjAsNyArMTIw
LDcgQEAgdm9pZCBXZWJQb3B1cE1lbnU6OmhpZGUoKQogICAgIGlmICghbV9wYWdlIHx8ICFtX3Bv
cHVwQ2xpZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6Okhp
ZGVQb3B1cE1lbnUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpIaWRlUG9wdXBNZW51KCksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAgIG1fcGFnZS0+c2V0
QWN0aXZlUG9wdXBNZW51KDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJjaFBvcHVwTWVudS5jcHAKaW5k
ZXggMWY4ZjhiMzA0OGZlZGQ5MWRkN2Q5ZTJkZGM5MmUzM2NmZGE2ZDI2MC4uMDI1ODQ2ZWMxN2Zi
NmFjMmQ0MGE0OWZjYmQ1NDYwYTQ5NGQyZTkyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU2VhcmNoUG9wdXBNZW51
LmNwcApAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFdlYlNlYXJjaFBvcHVwTWVudTo6c2F2ZVJlY2Vu
dFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgY29uc3QgVmVjdAogICAgIGlmICgh
cGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUmVj
ZW50U2VhcmNoZXMobmFtZSwgc2VhcmNoSXRlbXMpLCBwYWdlLT5wYWdlSUQoKSk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTYXZlUmVjZW50U2VhcmNoZXMobmFtZSwgc2VhcmNoSXRlbXMp
LCBwYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViU2VhcmNoUG9wdXBNZW51Ojpsb2FkUmVj
ZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyaW5nPiYgcmVz
dWx0SXRlbXMpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgV2ViU2VhcmNoUG9wdXBNZW51Ojpsb2Fk
UmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBWZWN0b3I8U3RyCiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpMb2FkUmVjZW50U2VhcmNoZXMobmFtZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRS
ZWNlbnRTZWFyY2hlczo6UmVwbHkocmVzdWx0SXRlbXMpLCBwYWdlLT5wYWdlSUQoKSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFJlY2VudFNlYXJjaGVzKG5hbWUpLCBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpMb2FkUmVjZW50U2VhcmNoZXM6OlJlcGx5KHJlc3VsdEl0ZW1z
KSwgcGFnZS0+cGFnZUlEKCkpOwogfQogCiBib29sIFdlYlNlYXJjaFBvcHVwTWVudTo6ZW5hYmxl
ZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYlZpYnJhdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5jcHAKaW5kZXggZTQxZGVkMjg1ODA1MDQ2NTUz
NzdmMDRiMWRmNzU4NDUwM2I1ZjY5OS4uZWVhYzZlY2VkMmRjZjU2OWYyZDFiZjFiY2E5MGFjMjNi
OGVmNWIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaWJyYXRpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlicmF0aW9uQ2xpZW50LmNwcApAQCAtMzgsMTIgKzM4LDEy
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lkIFdlYlZpYnJhdGlvbkNsaWVudDo6dmlicmF0
ZShjb25zdCB1bnNpZ25lZCYgdmlicmF0aW9uVGltZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWJyYXRp
b25Qcm94eTo6VmlicmF0ZSh2aWJyYXRpb25UaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViVmlicmF0aW9uUHJveHk6OlZpYnJhdGUodmlicmF0aW9uVGltZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYlZpYnJhdGlvbkNsaWVudDo6Y2FuY2VsVmlicmF0
aW9uKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWJyYXRpb25Qcm94eTo6Q2FuY2VsVmlicmF0aW9uKCks
IG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlZpYnJhdGlvblByb3h5OjpDYW5j
ZWxWaWJyYXRpb24oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlicmF0aW9u
Q2xpZW50Ojp2aWJyYXRpb25EZXN0cm95ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVu
dEd0ay5jcHAKaW5kZXggYmNhODNlOTljMTZkMTQ5ZDM5YmMyOGRjYTI3NTFiNTk2M2U1YjUzZC4u
NzY5ZDc4YzZkNDIzNWExMmM1NTU4ZTFlMDM0OWFlYTg5ZDUyMWM5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50
R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgV2ViRWRpdG9y
Q2xpZW50OjpnZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IEtleWJvYXJkRXZlbnQq
IGV2ZW50LCBWCiAKICAgICAvKiBGaXJzdCB0cnkgdG8gaW50ZXJwcmV0IHRoZSBjb21tYW5kIGlu
IHRoZSBVSSBhbmQgZ2V0IHRoZSBjb21tYW5kcy4KICAgICAgICBVSSBuZWVkcyB0byByZWNlaXZl
IGV2ZW50IHR5cGUgYmVjYXVzZSBvbmx5IGtub3dzIGN1cnJlbnQgTmF0aXZlV2ViS2V5Ym9hcmRF
dmVudC4qLwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldEVkaXRvckNvbW1hbmRzRm9y
S2V5RXZlbnQoZXZlbnQtPnR5cGUoKSksCisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
R2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChldmVudC0+dHlwZSgpKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQ6OlJlcGx5KHBlbmRpbmdFZGl0b3JDb21t
YW5kcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9X
ZWJRdWlja0xvb2tIYW5kbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9pb3MvV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50LmNwcAppbmRleCBjM2E3
Mjc0NWIzOGQxN2NjNjU0MTA5N2IwNTFiNWQwMWU2YWU4MzZjLi4xN2I5ODlmMmEzOWJhMTEyMTJh
ODY5M2U5ZGM1ODU5NzkzYTc3NTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJRdWlja0xvb2tIYW5kbGVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYlF1aWNrTG9v
a0hhbmRsZUNsaWVudC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgV2ViUXVpY2tMb29rSGFuZGxlQ2xp
ZW50OjpXZWJRdWlja0xvb2tIYW5kbGVDbGllbnQoY29uc3QgV2ViQ29yZTo6UXVpY2tMb29rSGFu
ZGwKICAgICAsIG1fdXRpKGhhbmRsZS5wcmV2aWV3VVRJKCkpCiAgICAgLCBtX3BhZ2VJRChwYWdl
SUQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRTdGFydExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKG1fZmlsZU5h
bWUsIG1fdXRpKSwgbV9wYWdlSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJ
bk1haW5GcmFtZShtX2ZpbGVOYW1lLCBtX3V0aSksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJR
dWlja0xvb2tIYW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRh
QXJyYXkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50Ojpk
aWRSZWNlaXZlRGF0YUFycmF5KENGQXJyYXlSZWYgZGF0YUFycmF5KQogCiB2b2lkIFdlYlF1aWNr
TG9va0hhbmRsZUNsaWVudDo6ZGlkRmluaXNoTG9hZGluZygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hMb2FkRm9yUXVp
Y2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShtX2RhdGEpLCBtX3BhZ2VJRCk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hM
b2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GcmFtZShtX2RhdGEpLCBtX3BhZ2VJRCk7CiAg
ICAgbV9kYXRhLmNsZWFyKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5t
bQppbmRleCA0OWQ1OWJlM2JjMzU0ODlmZTkyM2UwNmFjNmZhNDllOThmZGEwNDViLi5jMDY5ZTA4
NWQ0ZDYyOTcwYjQ1ZjBlZjRiZTY2ZmQxZDY0MDU4MmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRp
dG9yQ2xpZW50TWFjLm1tCkBAIC0xODUsNyArMTg1LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6
OnRvZ2dsZVNtYXJ0SW5zZXJ0RGVsZXRlKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0
b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vz
czo6c2hhcmVkKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRp
b25FbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50ZXh0Q2hlY2tl
clN0YXRlKCkuaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7CiB9CiAKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbigpCkBAIC0x
OTYsNyArMTk2LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1F1b3Rl
U3Vic3RpdHV0aW9uKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0
Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKKyAgICByZXR1
cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQ7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uKCkKQEAgLTIwNyw3ICsyMDcsNyBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbigpCiAKIGJvb2wgV2ViRWRpdG9y
Q2xpZW50Ojppc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKIHsKLSAgICByZXR1
cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljRGFz
aFN1YnN0aXR1dGlvbkVuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOwog
fQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bigpCkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb24oKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hh
cmVkKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxl
ZDsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgp
LmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgpCkBAIC0yMjksNyArMjI5LDcg
QEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1RleHRSZXBsYWNlbWVudCgp
CiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hlY2tlclN0
YXRlKCkuaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkOworICAgIHJldHVybiBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0aWNTcGVs
bGluZ0NvcnJlY3Rpb25FbmFibGVkOwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xl
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFt
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGIwMjcyOTRiNmNjOWY0ZTFlNTg5ZmYwMDQ0ODcx
OTU0MmNkMGY3MjIuLjdmZTQ5ZjU1MmIxMWRiNTM3ZjMyYjU2M2NiMzRhNTVlNTkyZmE3YjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQpAQCAtODgs
NyArODgsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBXZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0
Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbgogewogI2lmIFBMQVRGT1JNKElPUykK
ICAgICBhdWRpdF90b2tlbl90IGF1ZGl0VG9rZW47Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKGF1ZGl0VG9rZW4p
KQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+Z2V0QXVkaXRUb2tlbihhdWRpdFRva2VuKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgcmV0dXJuIGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIChjb25zdCBVSW50OCopJmF1ZGl0
VG9rZW4sIHNpemVvZihhdWRpdFRva2VuKSkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCmluZGV4IGU2Y2VkOWUyMzUyMWVj
Yjk4ZDI3YWNmZjMwMmI3ZDY3OTI2NGZkNWUuLjEyYTM2NDQ3NDI4NDEzNDg5ZGUyZGRhNGYxYmI5
OGNlNzc5NTI0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmNwcApAQCAtODEsMTIgKzgxLDEyIEBAIERyYXdpbmdBcmVhOjpEcmF3aW5n
QXJlYShEcmF3aW5nQXJlYVR5cGUgdHlwZSwgV2ViUGFnZSYgd2ViUGFnZSkKICAgICAsIG1fbmF0
aXZlU3VyZmFjZUhhbmRsZUZvckNvbXBvc2l0aW5nKDApCiAjZW5kaWYKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSwgKnRoaXMpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RHJhd2lu
Z0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgpLCAqdGhpcyk7
CiB9CiAKIERyYXdpbmdBcmVhOjp+RHJhd2luZ0FyZWEoKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgRHJh
d2luZ0FyZWE6OmRpc3BhdGNoQWZ0ZXJFbnN1cmluZ1VwZGF0ZWRTY3JvbGxQb3NpdGlvbihzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAppbmRleCBiNzkyYTExNDAzZDY4
OWZhZWI2NDYwY2EyNTNhZWY0OTdmYTE5MmM3Li43MWMzM2Y0ODJlYmUxZjY1ZjZhNjVmYWZhMGEw
NTAwNWE3N2E3MWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRXZlbnREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcApAQCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgRXZlbnRE
aXNwYXRjaGVyOjpkaXNwYXRjaFRvdWNoRXZlbnRzKCkKICAgICB9CiAKICAgICBmb3IgKGF1dG8m
IHNsb3QgOiBsb2NhbENvcHkpIHsKLSAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHNsb3Qua2V5KSkKKyAgICAgICAgaWYgKFdlYlBhZ2Uq
IHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHNsb3Qua2V5KSkKICAg
ICAgICAgICAgIHdlYlBhZ2UtPmRpc3BhdGNoQXN5bmNocm9ub3VzVG91Y2hFdmVudHMoc2xvdC52
YWx1ZSk7CiAgICAgfQogfQpAQCAtMjE1LDcgKzIxNSw3IEBAIHZvaWQgRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaFdoZWVsRXZlbnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJXaGVlbEV2ZW50
JiB3CiB7CiAgICAgQVNTRVJUKFJ1bkxvb3A6OmlzTWFpbigpKTsKIAotICAgIFdlYlBhZ2UqIHdl
YlBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHBhZ2VJRCk7CisgICAgV2ViUGFn
ZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UocGFnZUlEKTsKICAg
ICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjI1LDcgKzIyNSw3IEBAIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFdoZWVsRXZlbnQodWludDY0X3QgcGFnZUlELCBj
b25zdCBXZWJXaGVlbEV2ZW50JiB3CiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKIHZvaWQg
RXZlbnREaXNwYXRjaGVyOjpzZW5kRGlkUmVjZWl2ZUV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29u
c3QgV2ViRXZlbnQmIGV2ZW50LCBib29sIGRpZEhhbmRsZUV2ZW50KQogewotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90PihldmVudC50
eXBlKCkpLCBkaWRIYW5kbGVFdmVudCksIHBhZ2VJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KGV2ZW50LnR5cGUoKSks
IGRpZEhhbmRsZUV2ZW50KSwgcGFnZUlEKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAKaW5kZXggODBjZGU2MmM4OTkzZTk2NTZjMGMzMGZjNDQ5NzRiYjMz
NTc3YTNjNC4uZGY3MDEzZDJmZjZmMWMwNDZiMjM3Y2YzZTFiZTg3MTRjNzY1NTdhNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9W
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcApAQCAtNTcsMTIgKzU3LDEyIEBAIFZpZXdH
ZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IoV2Vi
UGFnZSYgd2ViUGFnZSkKICAgICAsIG1fcmVuZGVyVHJlZVNpemVOb3RpZmljYXRpb25UaW1lcihS
dW5Mb29wOjptYWluKCksIHRoaXMsICZWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpyZW5k
ZXJUcmVlU2l6ZU5vdGlmaWNhdGlvblRpbWVyRmlyZWQpCiAjZW5kaWYKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgp
LCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yOjp+Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3RvcigpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaWV3R2Vz
dHVyZUdlb21ldHJ5Q29sbGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5w
YWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvcjo6ZGlzcGF0Y2hEaWRDb2xsZWN0R2VvbWV0cnlGb3JTbWFydE1hZ25pZmlj
YXRpb25HZXN0dXJlKEZsb2F0UG9pbnQgb3JpZ2luLCBGbG9hdFJlY3QgdGFyZ2V0UmVjdCwgRmxv
YXRSZWN0IHZpc2libGVDb250ZW50UmVjdCwgYm9vbCBpc1JlcGxhY2VkRWxlbWVudCwgZG91Ymxl
IHZpZXdwb3J0TWluaW11bVNjYWxlLCBkb3VibGUgdmlld3BvcnRNYXhpbXVtU2NhbGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3Bh
dGNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVE
aXNwYXRjaGVyLmNwcAppbmRleCA5YTQwNzc5ZDU4MGYxY2EzMTJhNTYxZGI2NWRhOTI2MjViY2Qw
ZWZmLi5jOTg3MDQzMzNlNjgwNTAyNTgyZmUwODFlZWFjMmU3MDYwNDZlZDBkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlz
cGF0Y2hlci5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgdm9pZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoKQogICAgIH0KIAogICAgIGZvciAoYXV0
byYgc2xvdCA6IHVwZGF0ZSkgewotICAgICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2Uoc2xvdC5rZXkpKQorICAgICAgICBpZiAoV2ViUGFnZSog
d2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2Uoc2xvdC5rZXkpKQogICAg
ICAgICAgICAgd2ViUGFnZS0+dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhzbG90LnZhbHVlLnZp
c2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8sIHNsb3QudmFsdWUub2xkZXN0VGltZXN0YW1wKTsK
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAppbmRleCBiYTE4NzFmYjQw
MDRiNzAzNTAxNjljNjE1YjhlNWQ2NjVjNzBjMDdhLi5kMzU5YjE5ZTA4MjFiNDUzMTY0MDE3MmQ4
ZmFhOTU1YmNiNGVjODk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKQEAgLTU5
LDE0ICs1OSwxNCBAQCBQYXNzUmVmUHRyPFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyPiBWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcjo6Z2V0T3JDcmVhdGUodQogVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2NF90IGlkZW50aWZpZXIp
CiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllciwgKnRoaXMpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVy
LCAqdGhpcyk7CiB9CiAKIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp+VmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXIoKQogewogICAgIEFTU0VSVCh2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxl
cnMoKS5jb250YWlucyhtX2lkZW50aWZpZXIpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllcik7CiAK
ICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsK
IH0KQEAgLTg1LDcgKzg1LDcgQEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6YWRk
VmlzaXRlZExpbmsoUGFnZSYgcGFnZSwgTGlua0hhc2ggbGlua0hhc2gpCiAgICAgaWYgKCF3ZWJQ
YWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1Byb3ZpZGVyOjpB
ZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgbGlua0hhc2gpLCBt
X2lkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlZpc2l0ZWRMaW5rUHJvdmlkZXI6OkFkZFZpc2l0
ZWRMaW5rSGFzaEZyb21QYWdlKHdlYlBhZ2UtPnBhZ2VJRCgpLCBsaW5rSGFzaCksIG1faWRlbnRp
Zmllcik7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnNldFZpc2l0ZWRM
aW5rVGFibGUoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGhhbmRsZSkKQEAgLTk3LDIwICs5
NywyMCBAQCB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpzZXRWaXNpdGVkTGlua1Rh
YmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJgogICAgIG1fdmlzaXRlZExpbmtUYWJsZS5z
ZXRTaGFyZWRNZW1vcnkoc2hhcmVkTWVtb3J5LnJlbGVhc2UoKSk7CiAKICAgICBpbnZhbGlkYXRl
U3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0Zv
clZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1h
cmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcjo6dmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoY29uc3QgVmVjdG9yPFdl
YkNvcmU6OkxpbmtIYXNoPiYgbGlua0hhc2hlcykKIHsKICAgICBmb3IgKGF1dG8gbGlua0hhc2gg
OiBsaW5rSGFzaGVzKQogICAgICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yTGluayhsaW5rSGFzaCk7
Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVj
YWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlu
a1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmFs
bFZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yQWxs
TGlua3MoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5r
U3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvclZp
c2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExpbmtzKCkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogICAgIG1f
dmlzaXRlZExpbmtUYWJsZS5jbGVhcigpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExp
bmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0
eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNp
dGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9y
d2FyZExpc3RQcm94eS5jcHAKaW5kZXggNzVlMjdiYTUxMGEyZDRhNDM2NTE5MTI0OTUwN2NjMjQx
MDY1MjEwZS4uYTljNjc3OTA1NmI5MmQ2MGQ0OTRiNTE1ODlmMzRkNTMxNDU4OGNmNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHkuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OnNldEhpZ2hlc3RJdGVtSURGcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1J
RCkKIAogc3RhdGljIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwg
dWludDY0X3QgcGFnZUlELCBIaXN0b3J5SXRlbSogaXRlbSkKIHsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkFkZEJhY2tGb3J3YXJkSXRlbShpdGVtSUQsIHBhZ2VJRCwgdG9QYWdlU3RhdGUo
Kml0ZW0pKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpBZGRCYWNrRm9yd2Fy
ZEl0ZW0oaXRlbUlELCBwYWdlSUQsIHRvUGFnZVN0YXRlKCppdGVtKSksIDApOwogfQogCiB2b2lk
IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBp
dGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIHVpbnQ2NF90
IHBhZ2VJRCkKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjpyZW1vdmVJdGVtKHVpbnQ2NF90IGl0ZW1JRCkKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCi0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOwor
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICBXZWJDb3JlOjpQ
YWdlOjpjbGVhclByZXZpb3VzSXRlbUZyb21BbGxQYWdlcyhpdGVtLmdldCgpKTsKICAgICBoaXN0
b3J5SXRlbVRvSURNYXAoKS5yZW1vdmUoaXRlbSk7CiB9CkBAIC0xODEsNyArMTgxLDcgQEAgSGlz
dG9yeUl0ZW0qIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtQXRJbmRleChpbnQgaXRlbUlu
ZGV4KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHVpbnQ2NF90IGl0ZW1JRCA9IDA7Ci0gICAg
aWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4KGl0ZW1J
bmRleCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXg6OlJl
cGx5KGl0ZW1JRCksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleChpdGVtSW5kZXgpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4OjpSZXBseShpdGVtSUQpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIWl0ZW1JRCkKQEAg
LTE5Niw3ICsxOTYsNyBAQCBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmJhY2tMaXN0Q291
bnQoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCBiYWNrTGlzdENvdW50ID0gMDsKLSAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCgp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQ6OlJlcGx5
KGJhY2tMaXN0Q291bnQpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3VudCgpLCBNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQ6OlJlcGx5KGJhY2tMaXN0Q291bnQp
LCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gYmFj
a0xpc3RDb3VudDsKQEAgLTIwOCw3ICsyMDgsNyBAQCBpbnQgV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OmZvcndhcmRMaXN0Q291bnQoKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGludCBmb3J3
YXJkTGlzdENvdW50ID0gMDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tG
b3J3YXJkRm9yd2FyZExpc3RDb3VudCgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9y
d2FyZEZvcndhcmRMaXN0Q291bnQ6OlJlcGx5KGZvcndhcmRMaXN0Q291bnQpLCBtX3BhZ2UtPnBh
Z2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJk
Rm9yd2FyZExpc3RDb3VudCgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEZv
cndhcmRMaXN0Q291bnQ6OlJlcGx5KGZvcndhcmRMaXN0Q291bnQpLCBtX3BhZ2UtPnBhZ2VJRCgp
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gZm9yd2FyZExpc3RDb3VudDsKQEAg
LTIxOCw3ICsyMTgsNyBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpjbG9zZSgpCiB7
CiAgICAgZm9yIChhdXRvJiBpdGVtSUQgOiBtX2Fzc29jaWF0ZWRJdGVtSURzKSB7CiAgICAgICAg
IGlmIChIaXN0b3J5SXRlbSogaXRlbSA9IGl0ZW1Gb3JJRChpdGVtSUQpKQotICAgICAgICAgICAg
V2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKml0ZW0pOworICAgICAgICAgICAg
V2ViQ29yZTo6UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOwogICAgIH0KIAog
ICAgIG1fYXNzb2NpYXRlZEl0ZW1JRHMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCmluZGV4IDU4MWVjMjY3MzYy
ZGY0ZThkNTE5Mjg4NDExZDI2NmVhZjA4MTBjNzcuLmUwOTcyYjUzYjY0YzNlMWI4NjQ3ZjQxMmU2
MDA1MDA5NzkxMWFjNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJDb250ZXh0TWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcApAQCAtNjcsNyArNjcsNyBAQCB2b2lkIFdlYkNvbnRl
eHRNZW51OjpzaG93KCkKIAogICAgIC8vIE1hcmsgdGhlIFdlYlBhZ2UgaGFzIGhhdmluZyBhIHNo
b3duIGNvbnRleHQgbWVudSB0aGVuIG5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIG1fcGFnZS0+
Y29udGV4dE1lbnVTaG93aW5nKCk7Ci0gICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OlNob3dDb250ZXh0TWVudSh2aWV3LT5jb250ZW50c1RvV2luZG93KGNvbnRyb2xsZXIu
aGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKSksIGNvbnRleHRN
ZW51Q29udGV4dERhdGEsIG1lbnVJdGVtcywgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dDb250ZXh0TWVudSh2aWV3
LT5jb250ZW50c1RvV2luZG93KGNvbnRyb2xsZXIuaGl0VGVzdFJlc3VsdCgpLnJvdW5kZWRQb2lu
dEluSW5uZXJOb2RlRnJhbWUoKSksIGNvbnRleHRNZW51Q29udGV4dERhdGEsIG1lbnVJdGVtcywg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnU6Oml0
ZW1TZWxlY3RlZChjb25zdCBXZWJDb250ZXh0TWVudUl0ZW1EYXRhJiBpdGVtKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKaW5kZXggYjA1NDYwYTk4
MzcxNjgxMzllOGI1OTdmY2YyMjBmNWY0ZTk2N2U5YS4uM2ZmMDA1NzU2OWJkNGJlMDg1YjJiMWZj
MTg1YThjYTIxMTUwMzdhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwCkBAIC0xNTQsNyArMTU0LDcgQEAgV2ViRnJhbWU6OldlYkZyYW1lKHN0
ZDo6dW5pcXVlX3B0cjxXZWJGcmFtZUxvYWRlckNsaWVudD4gZnJhbWVMb2FkZXJDbGllbnQpCiAg
ICAgLCBtX2ZyYW1lSUQoZ2VuZXJhdGVGcmFtZUlEKCkpCiB7CiAgICAgbV9mcmFtZUxvYWRlckNs
aWVudC0+c2V0V2ViRnJhbWUodGhpcyk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkV2Vi
RnJhbWUobV9mcmFtZUlELCB0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRX
ZWJGcmFtZShtX2ZyYW1lSUQsIHRoaXMpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHdlYkZyYW1l
Q291bnRlci5pbmNyZW1lbnQoKTsKQEAgLTE5Miw3ICsxOTIsNyBAQCBXZWJGcmFtZSogV2ViRnJh
bWU6OmZyb21Db3JlRnJhbWUoRnJhbWUmIGZyYW1lKQogCiB2b2lkIFdlYkZyYW1lOjppbnZhbGlk
YXRlKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVXZWJGcmFtZShtX2ZyYW1l
SUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZVdlYkZyYW1lKG1fZnJhbWVJ
RCk7CiAgICAgbV9jb3JlRnJhbWUgPSAwOwogfQogCkBAIC0yNTEsMTMgKzI1MSwxMyBAQCB2b2lk
IFdlYkZyYW1lOjpzdGFydERvd25sb2FkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKICAgICBtX3BvbGljeURvd25sb2FkSUQgPSAwOwogCiAjaWYgRU5BQkxFKE5FVFdP
UktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9j
ZXNzKCkpIHsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24o
KS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6U3RhcnREb3dubG9hZChwYWdlKCktPnNlc3Npb25JRCgpLCBwb2xpY3lEb3dubG9hZElE
LCByZXF1ZXN0KSwgMCk7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtD
b25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlN0YXJ0RG93bmxvYWQocGFnZSgpLT5zZXNzaW9uSUQoKSwgcG9saWN5
RG93bmxvYWRJRCwgcmVxdWVzdCksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25s
b2FkKHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgcmVx
dWVzdCk7CiB9CiAKIHZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3du
bG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0yNzAsNyAr
MjcwLDcgQEAgdm9pZCBXZWJGcmFtZTo6Y29udmVydE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2Fk
KERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRlciwKICAgICBSZXNvdXJjZUxvYWRlciogbWFp
blJlc291cmNlTG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpOwog
CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVk
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgLy8gVXNlIDAgdG8gaW5kaWNhdGUg
dGhhdCB0aGVyZSBpcyBubyBtYWluIHJlc291cmNlIGxvYWRlci4KICAgICAgICAgLy8gVGhpcyBj
YW4gaGFwcGVuIGlmIHRoZSBtYWluIHJlc291cmNlIGlzIGluIHRoZSBXZWJDb3JlIG1lbW9yeSBj
YWNoZS4KICAgICAgICAgdWludDY0X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXI7CkBAIC0y
NzksMTggKzI3OSwxOCBAQCB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRv
RG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7CiAKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBwb2xpY3lEb3du
bG9hZElELCByZXF1ZXN0LCByZXNwb25zZSksIDApOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9hZFRv
RG93bmxvYWQobWFpblJlc291cmNlTG9hZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQsIHJl
cXVlc3QsIHJlc3BvbnNlKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAog
ICAgIGlmICghbWFpblJlc291cmNlTG9hZGVyKSB7CiAgICAgICAgIC8vIFRoZSBtYWluIHJlc291
cmNlIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLiBTdGFydCBhIG5ldyBkb3dubG9hZCBpbnN0ZWFk
LgotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERv
d25sb2FkKHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpOworICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHBvbGljeURvd25sb2Fk
SUQsIHJlcXVlc3QpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxvYWQocG9saWN5
RG93bmxvYWRJRCwgZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigpLT5oYW5kbGUo
KSwgcmVxdWVzdCwgcmVzcG9uc2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25s
b2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKHBvbGljeURvd25sb2FkSUQsIGRv
Y3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJl
c3BvbnNlKTsKIH0KIAogU3RyaW5nIFdlYkZyYW1lOjpzb3VyY2UoKSBjb25zdCAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKaW5kZXgg
ZjQyNGRiNmQ5MzZkNDIzM2JmYTMyMDdjMzYwZTNjNGUzYjVkYTA2ZC4uNDU3MGY5MTM0N2NmZTA1
ODEzOWUwNzU4YzYyMGE5Mzg1MDg2MDk5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKQEAgLTkyLDEyICs5MiwxMiBAQCB2b2lk
IFdlYkluc3BlY3Rvcjo6Y3JlYXRlSW5zcGVjdG9yUGFnZShib29sIHVuZGVyVGVzdCkKICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6Y3JlYXRlU2VydmVyQ29ubmVj
dGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMsIFJ1bkxvb3A6Om1haW4oKSk7CiAgICAg
bV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpDcmVhdGVJbnNwZWN0b3JQYWdlKGNvbm5lY3Rpb25DbGllbnRQb3J0LCBjYW5BdHRhY2hX
aW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OkNyZWF0ZUluc3BlY3RvclBhZ2UoY29ubmVjdGlvbkNsaWVudFBvcnQs
IGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAog
dm9pZCBXZWJJbnNwZWN0b3I6OmNsb3NlRnJvbnRlbmQoKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiAKICAgICBt
X2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwogICAgIG1fZnJvbnRlbmRDb25uZWN0
aW9uID0gbnVsbHB0cjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6Y2xv
c2VGcm9udGVuZCgpCiAKIHZvaWQgV2ViSW5zcGVjdG9yOjpicmluZ1RvRnJvbnQoKQogewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIH0KIAogLy8gQ2FsbGVkIGJ5IFdlYkluc3BlY3RvciBtZXNzYWdlcwpA
QCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpzaG93UmVzb3VyY2VzKCkKIAog
dm9pZCBXZWJJbnNwZWN0b3I6OnNob3dNYWluUmVzb3VyY2VGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlkZW50aWZpZXIpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVk
KCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOwogICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgV2ViSW5z
cGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKIAogICAgIG1fcHJldmlvdXNDYW5B
dHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5
Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBX
ZWJJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
QEAgLTI0OSw3ICsyNDksNyBAQCBib29sIFdlYkluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb0Zyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKICAgICBpZiAobV9yZW1vdGVGcm9udGVuZENvbm5lY3RlZCkKLSAgICAgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
SW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZChtZXNzYWdlKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZW5k
TWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQobWVzc2FnZSksIG1fcGFnZS0+cGFnZUlEKCkpOwogICAg
IGVsc2UKICNlbmRpZgogICAgICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNzYWdlKSwgMCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3RvclVJ
LmNwcAppbmRleCA3YzljZTZkNmQwNDdlZmY2OTliMTc3YmU0ODY0NTBhOTE1Yjc5ZWFmLi4zODc2
OWNmOWU5MDkwMDlmZWMxMTJhMzFmZmY0N2Q0ODJhMzA0YWJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAKQEAgLTExMSwx
MiArMTExLDEyIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6Om1vdmVXaW5kb3dCeShmbG9hdCB4LCBm
bG9hdCB5KQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpicmluZ1RvRnJvbnQoKQogewotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9udCgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6
Y2xvc2VXaW5kb3coKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQ
cm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAKICAgICBtX2Jh
Y2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9iYWNrZW5kQ29ubmVjdGlvbiA9
IG51bGxwdHI7CkBAIC0xMjksMTUgKzEyOSwxNSBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpyZXF1
ZXN0U2V0RG9ja1NpZGUoRG9ja1NpZGUgc2lkZSkKIHsKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAg
ICBjYXNlIERvY2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OkRldGFjaCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVy
KTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERvY2tTaWRlOjpSaWdodDoKLSAgICAgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoUmln
aHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFrOwogCiAgICAg
Y2FzZSBEb2NrU2lkZTo6Qm90dG9tOgotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
QXR0YWNoQm90dG9tKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0xNjcsMTcgKzE2NywxNyBA
QCB2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQogCiB2b2lk
IFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNpZ25lZCBoZWln
aHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93SGVp
Z2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQpLCBtX2luc3Bl
Y3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6Y2hhbmdlQXR0
YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdp
bmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQg
V2ViSW5zcGVjdG9yVUk6OnNldFRvb2xiYXJIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRUb29sYmFySGVpZ2h0KGhlaWdodCksIG1faW5z
cGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpT
ZXRUb29sYmFySGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQog
CiB2b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCkBA
IC0xODgsMTcgKzE4OCwxNyBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29u
c3QgU3RyaW5nJiB1cmwpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29uc3QgV1RGOjpT
dHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcyksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjphcHBl
bmQoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVu
dCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250
ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJ
bnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0ZWRVUkxDaGFuZ2VkKHVy
bFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3Bl
Y3RvclVJOjpzaG93Q29uc29sZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggZDg2ZDcyNjZjODMyMzFiODFiN2EyZmRjMTdjZmU3YzFiYjI2
N2Q5OC4uZTI4NmRkN2QyZmMzNGI2ZmI5MDQxNGVlMTRmM2NhNDA5MDAxMGYzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMjQwLDggKzI0
MCw4IEBAIFBhc3NSZWZQdHI8V2ViUGFnZT4gV2ViUGFnZTo6Y3JlYXRlKHVpbnQ2NF90IHBhZ2VJ
RCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1lCiB7CiAgICAgUmVmUHRyPFdlYlBhZ2U+IHBh
Z2UgPSBhZG9wdFJlZihuZXcgV2ViUGFnZShwYWdlSUQsIHBhcmFtZXRlcnMpKTsKIAotICAgIGlm
IChwYWdlLT5wYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmluamVjdGVkQnVuZGxlKCktPmRpZENyZWF0ZVBhZ2UocGFnZS5nZXQoKSk7CisgICAg
aWYgKHBhZ2UtPnBhZ2VHcm91cCgpLT5pc1Zpc2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKSkKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+ZGlkQ3JlYXRlUGFnZShwYWdlLmdldCgp
KTsKIAogICAgIHJldHVybiBwYWdlLnJlbGVhc2UoKTsKIH0KQEAgLTM0Nyw3ICszNDcsNyBAQCBX
ZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKICAgICAvLyA0bXMgc2hvdWxkIGJlIGFkb3B0ZWQgcHJvamVj
dC13aWRlIG5vdywgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYxMjE0
CiAgICAgU2V0dGluZ3M6OnNldERlZmF1bHRNaW5ET01UaW1lckludGVydmFsKDAuMDA0KTsKIAot
ICAgIG1fcGFnZUdyb3VwID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZUdyb3VwKHBhcmFt
ZXRlcnMucGFnZUdyb3VwRGF0YSk7CisgICAgbV9wYWdlR3JvdXAgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS53ZWJQYWdlR3JvdXAocGFyYW1ldGVycy5wYWdlR3JvdXBEYXRhKTsKIAogI2lmIFBM
QVRGT1JNKElPUykKICAgICBTZXR0aW5nczo6c2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0
ZWdvcnkodHJ1ZSk7CkBAIC00NzQsMTYgKzQ3NCwxNiBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2
NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
ICAgICAvLyBXZSB1c2UgdGhlIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCBtaWxlc3Rv
bmUgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gdW5mcmVlemUgdGhlIGxheWVyIHRyZWUuCiAgICAgbV9w
YWdlLT5hZGRMYXlvdXRNaWxlc3RvbmVzKERpZEZpcnN0TGF5b3V0IHwgRGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJ
RCwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRo
aXMpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIG9iamVjdCBj
b25zdHJ1Y3RvcnMsIGFuZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHNob3VsZCBiZSBtZXNzYWdl
IHJlY2VpdmVycy4KICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29v
cmRpbmF0ZWRMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAq
dGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlSUQsICp0aGlzKTsKICNlbmRpZgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZUlELCAqdGhpcyk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2VJRCwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZUlELCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2VJRCwgKnRoaXMpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJG
dWxsU2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMp
OwogI2VuZGlmCiAKICNpZm5kZWYgTkRFQlVHCkBAIC00OTIsNyArNDkyLDcgQEAgV2ViUGFnZTo6
V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpCiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAgIGlmIChtX3Vz
ZUFzeW5jU2Nyb2xsaW5nKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5ldmVudERpc3Bh
dGNoZXIoKS5hZGRTY3JvbGxpbmdUcmVlRm9yUGFnZSh0aGlzKTsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZXZlbnREaXNwYXRjaGVyKCkuYWRkU2Nyb2xsaW5nVHJlZUZvclBhZ2Uo
dGhpcyk7CiAjZW5kaWYKIAogICAgIGZvciAoYXV0byYgbWltZVR5cGUgOiBwYXJhbWV0ZXJzLm1p
bWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJzKQpAQCAtNTAwLDcgKzUwMCw3IEBAIFdl
YlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQogCiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQot
ICAgIGlmIChXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyKiBtYW5hZ2VyID0gV2ViUHJvY2Vzczo6
c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyPigpKQorICAgIGlm
IChXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyKiBtYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc3VwcGxlbWVudDxXZWJNZWRpYUtleVN0b3JhZ2VNYW5hZ2VyPigpKQogICAgICAgICBt
X3BhZ2UtPnNldHRpbmdzKCkuc2V0TWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeShtYW5hZ2VyLT5t
ZWRpYUtleVN0b3JhZ2VEaXJlY3RvcnkoKSk7CiAjZW5kaWYKIH0KQEAgLTU0MSw3ICs1NDEsNyBA
QCBXZWJQYWdlOjp+V2ViUGFnZSgpCiAKICNpZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogICAg
IGlmIChtX3VzZUFzeW5jU2Nyb2xsaW5nKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5l
dmVudERpc3BhdGNoZXIoKS5yZW1vdmVTY3JvbGxpbmdUcmVlRm9yUGFnZSh0aGlzKTsKKyAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZXZlbnREaXNwYXRjaGVyKCkucmVtb3ZlU2Nyb2xs
aW5nVHJlZUZvclBhZ2UodGhpcyk7CiAjZW5kaWYKIAogICAgIHBsYXRmb3JtRGV0YWNoKCk7CkBA
IC01NTgsMTYgKzU1OCwxNiBAQCBXZWJQYWdlOjp+V2ViUGFnZSgpCiAgICAgICAgIG1fZm9vdGVy
QmFubmVyLT5kZXRhY2hGcm9tUGFnZSgpOwogI2VuZGlmIC8vICFQTEFURk9STShJT1MpCiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6Oldl
YlBhZ2U6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgYmUgZG9uZSBpbiB0aGUgb2JqZWN0IGRlc3RydWN0b3JzLCBhbmQgdGhlIG9iamVjdHMgdGhl
bXNlbHZlcyBzaG91bGQgYmUgbWVzc2FnZSByZWNlaXZlcnMuCiAjaWYgVVNFKENPT1JESU5BVEVE
X0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogI2VuZGlmCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZUlEKTsKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJGdWxs
U2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJG
dWxsU2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjZW5k
aWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTU4MSw3ICs1ODEsNyBAQCB2b2lkIFdlYlBhZ2U6OmR1
bW15KGJvb2wmKQogCiBJUEM6OkNvbm5lY3Rpb24qIFdlYlBhZ2U6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKTsKIH0KIAogdWludDY0X3QgV2ViUGFnZTo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKQpAQCAtOTc0LDggKzk3NCw4IEBAIHZvaWQgV2ViUGFnZTo6Y2xvc2Uo
KQogICAgIGlmICghbWFpbldlYkZyYW1lKCktPnVybCgpLmlzRW1wdHkoKSkKICAgICAgICAgcmVw
b3J0VXNlZEZlYXR1cmVzKCk7CiAKLSAgICBpZiAocGFnZUdyb3VwKCktPmlzVmlzaWJsZVRvSW5q
ZWN0ZWRCdW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpKQot
ICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT53aWxsRGVzdHJv
eVBhZ2UodGhpcyk7CisgICAgaWYgKHBhZ2VHcm91cCgpLT5pc1Zpc2libGVUb0luamVjdGVkQnVu
ZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKSkKKyAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+d2lsbERlc3Ryb3lQ
YWdlKHRoaXMpOwogCiAgICAgaWYgKG1faW5zcGVjdG9yKSB7CiAgICAgICAgIG1faW5zcGVjdG9y
LT5kaXNjb25uZWN0RnJvbVBhZ2UoKTsKQEAgLTEwMzksNyArMTAzOSw3IEBAIHZvaWQgV2ViUGFn
ZTo6Y2xvc2UoKQogICAgIG1faXNSdW5uaW5nTW9kYWwgPSBmYWxzZTsKIAogICAgIC8vIFRoZSBX
ZWJQYWdlIGNhbiBiZSBkZXN0cm95ZWQgYnkgdGhpcyBjYWxsLgotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnJlbW92ZVdlYlBhZ2UobV9wYWdlSUQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnJlbW92ZVdlYlBhZ2UobV9wYWdlSUQpOwogCiAgICAgaWYgKGlzUnVubmluZ01vZGFsKQog
ICAgICAgICBSdW5Mb29wOjptYWluKCkuc3RvcCgpOwpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZW5kQ2xvc2UoKQogCiB2b2lkIFdlYlBhZ2U6OmxvYWRVUkxJbkZyYW1lKGNv
bnN0IFN0cmluZyYgdXJsLCB1aW50NjRfdCBmcmFtZUlEKQogewotICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1l
KiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAg
IGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTA4MSw3ICsxMDgxLDcgQEAgdm9p
ZCBXZWJQYWdlOjpsb2FkUmVxdWVzdCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCwKIAogICAgIC8vIExldCB0aGUgSW5qZWN0ZWRCdW5kbGUga25v
dyB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgdGhlIGxvYWQsIHBhc3NpbmcgdGhlIHVzZXIgZGF0YSBm
cm9tIHRoZSBVSVByb2Nlc3MKICAgICAvLyB0byBhbGwgdGhlIGNsaWVudCB0byBzZXQgdXAgYW55
IG5lZWRlZCBzdGF0ZS4KLSAgICBtX2xvYWRlckNsaWVudC53aWxsTG9hZFVSTFJlcXVlc3QodGhp
cywgcmVxdWVzdCwgV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0
cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOworICAgIG1fbG9hZGVyQ2xpZW50LndpbGxMb2Fk
VVJMUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKICAgICAvLyBJ
bml0YXRlIHRoZSBsb2FkIGluIFdlYkNvcmUuCiAgICAgY29yZVBhZ2UoKS0+dXNlcklucHV0QnJp
ZGdlKCkubG9hZFJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdChtX21haW5GcmFtZS0+Y29yZUZyYW1l
KCksIHJlcXVlc3QpKTsKQEAgLTExMDAsNyArMTEwMCw3IEBAIHZvaWQgV2ViUGFnZTo6bG9hZERh
dGFJbXBsKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHNo
YXJlCiAKICAgICAvLyBMZXQgdGhlIEluamVjdGVkQnVuZGxlIGtub3cgd2UgYXJlIGFib3V0IHRv
IHN0YXJ0IHRoZSBsb2FkLCBwYXNzaW5nIHRoZSB1c2VyIGRhdGEgZnJvbSB0aGUgVUlQcm9jZXNz
CiAgICAgLy8gdG8gYWxsIHRoZSBjbGllbnQgdG8gc2V0IHVwIGFueSBuZWVkZWQgc3RhdGUuCi0g
ICAgbV9sb2FkZXJDbGllbnQud2lsbExvYWREYXRhUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBjb25z
dF9jYXN0PFNoYXJlZEJ1ZmZlcio+KHN1YnN0aXR1dGVEYXRhLmNvbnRlbnQoKSksIHN1YnN0aXR1
dGVEYXRhLm1pbWVUeXBlKCksIHN1YnN0aXR1dGVEYXRhLnRleHRFbmNvZGluZygpLCBzdWJzdGl0
dXRlRGF0YS5mYWlsaW5nVVJMKCksIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybUhhbmRs
ZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKKyAgICBtX2xvYWRlckNsaWVu
dC53aWxsTG9hZERhdGFSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGNvbnN0X2Nhc3Q8U2hhcmVkQnVm
ZmVyKj4oc3Vic3RpdHV0ZURhdGEuY29udGVudCgpKSwgc3Vic3RpdHV0ZURhdGEubWltZVR5cGUo
KSwgc3Vic3RpdHV0ZURhdGEudGV4dEVuY29kaW5nKCksIHN1YnN0aXR1dGVEYXRhLmZhaWxpbmdV
UkwoKSwgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1
c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogCiAgICAgLy8gSW5pdGF0ZSB0aGUgbG9hZCBpbiBX
ZWJDb3JlLgogICAgIG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkubG9hZChGcmFt
ZUxvYWRSZXF1ZXN0KG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgcmVxdWVzdCwgc3Vic3RpdHV0
ZURhdGEpKTsKQEAgLTExNjIsNyArMTE2Miw3IEBAIHZvaWQgV2ViUGFnZTo6bmF2aWdhdGVUb1VS
TFdpdGhTaW11bGF0ZWRDbGljayhjb25zdCBTdHJpbmcmIHVybCwgSW50UG9pbnQgZG9jdW1lCiAK
IHZvaWQgV2ViUGFnZTo6c3RvcExvYWRpbmdGcmFtZSh1aW50NjRfdCBmcmFtZUlEKQogewotICAg
IFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQp
OworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1l
KGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTYxNiwx
MSArMTYxNiwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNldEdhcEJldHdlZW5QYWdlcyhkb3VibGUgZ2Fw
KQogCiB2b2lkIFdlYlBhZ2U6OnBvc3RJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIHVzZXJEYXRhKQogewotICAgIEluamVjdGVk
QnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVu
ZGxlKCk7CisgICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKTsKICAgICBpZiAoIWluamVjdGVkQnVuZGxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpbmplY3RlZEJ1bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VU
b1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybUhh
bmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkpLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1
bmRsZS0+ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UodGhpcywgbWVzc2FnZU5hbWUsIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0
KCkpLmdldCgpKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCkBAIC0yMTU0LDcgKzIxNTQsNyBA
QCB2b2lkIFdlYlBhZ2U6OmRpc3BhdGNoVG91Y2hFdmVudChjb25zdCBXZWJUb3VjaEV2ZW50JiB0
b3VjaEV2ZW50LCBib29sJiBoYW5kbGVkKQogdm9pZCBXZWJQYWdlOjp0b3VjaEV2ZW50U3luYyhj
b25zdCBXZWJUb3VjaEV2ZW50JiB0b3VjaEV2ZW50LCBib29sJiBoYW5kbGVkKQogewogICAgIEV2
ZW50RGlzcGF0Y2hlcjo6VG91Y2hFdmVudFF1ZXVlIHF1ZXVlZEV2ZW50czsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5ldmVudERpc3BhdGNoZXIoKS5nZXRRdWV1ZWRUb3VjaEV2ZW50c0ZvclBh
Z2UoKnRoaXMsIHF1ZXVlZEV2ZW50cyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZXZl
bnREaXNwYXRjaGVyKCkuZ2V0UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlzLCBxdWV1ZWRF
dmVudHMpOwogICAgIGRpc3BhdGNoQXN5bmNocm9ub3VzVG91Y2hFdmVudHMocXVldWVkRXZlbnRz
KTsKIAogICAgIGRpc3BhdGNoVG91Y2hFdmVudCh0b3VjaEV2ZW50LCBoYW5kbGVkKTsKQEAgLTIz
MzEsNyArMjMzMSw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlSXNJbldpbmRvdyhib29sIGlzSW5p
dGlhbFN0YXRlKQogICAgICAgICAKICAgICAgICAgLy8gVGhlIFdlYlByb2Nlc3MgZG9lcyBub3Qg
eWV0IGtub3cgYWJvdXQgdGhpcyBwYWdlOyBubyBuZWVkIHRvIHRlbGwgaXQgd2UncmUgbGVhdmlu
ZyB0aGUgd2luZG93LgogICAgICAgICBpZiAoIWlzSW5pdGlhbFN0YXRlKQotICAgICAgICAgICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFnZVdpbGxMZWF2ZVdpbmRvdyhtX3BhZ2VJRCk7CisgICAg
ICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYWdlV2lsbExlYXZlV2luZG93KG1fcGFn
ZUlEKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBEZWZlciB0aGUgY2FsbCB0byBQYWdlOjpz
ZXRDYW5TdGFydE1lZGlhKCkgc2luY2UgaXQgZW5kcyB1cCBzZW5kaW5nIGEgc3luY2hyb25vdXMg
bWVzc2FnZSB0byB0aGUgVUkgcHJvY2VzcwogICAgICAgICAvLyBpbiBvcmRlciB0byBnZXQgcGx1
Zy1pbiBjb25uZWN0aW9ucywgYW5kIHRoZSBVSSBwcm9jZXNzIHdpbGwgYmUgd2FpdGluZyBmb3Ig
dGhlIFdlYiBwcm9jZXNzIHRvIHVwZGF0ZSB0aGUgYmFja2luZwpAQCAtMjMzOSw3ICsyMzM5LDcg
QEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVJc0luV2luZG93KGJvb2wgaXNJbml0aWFsU3RhdGUpCiAg
ICAgICAgIGlmIChtX21heVN0YXJ0TWVkaWFXaGVuSW5XaW5kb3cpCiAgICAgICAgICAgICBtX3Nl
dENhblN0YXJ0TWVkaWFUaW1lci5zdGFydE9uZVNob3QoMCk7CiAKLSAgICAgICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFnZURpZEVudGVyV2luZG93KG1fcGFnZUlEKTsKKyAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFnZURpZEVudGVyV2luZG93KG1fcGFnZUlEKTsKICAgICB9CiAK
ICAgICBpZiAoaXNJbldpbmRvdykKQEAgLTIzNzcsMTMgKzIzNzcsMTMgQEAgdm9pZCBXZWJQYWdl
OjpzZXRMYXllckhvc3RpbmdNb2RlKHVuc2lnbmVkIGxheWVySG9zdGluZ01vZGUpCiB2b2lkIFdl
YlBhZ2U6OnNldFNlc3Npb25JRChTZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZW5zdXJl
UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQpOworICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCk7CiAgICAg
bV9wYWdlLT5zZXRTZXNzaW9uSUQoc2Vzc2lvbklEKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpkaWRS
ZWNlaXZlUG9saWN5RGVjaXNpb24odWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgbGlzdGVuZXJJ
RCwgdWludDMyX3QgcG9saWN5QWN0aW9uLCB1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90
IGRvd25sb2FkSUQpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVk
KCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuOwogICAgIGZyYW1lLT5kaWRSZWNlaXZlUG9saWN5RGVjaXNpb24obGlzdGVuZXJJRCwg
c3RhdGljX2Nhc3Q8UG9saWN5QWN0aW9uPihwb2xpY3lBY3Rpb24pLCBuYXZpZ2F0aW9uSUQsIGRv
d25sb2FkSUQpOwpAQCAtMjQ5NSw3ICsyNDk1LDcgQEAgSW50UmVjdCBXZWJQYWdlOjp3aW5kb3dS
ZXNpemVyUmVjdCgpIGNvbnN0CiAKIEtleWJvYXJkVUlNb2RlIFdlYlBhZ2U6OmtleWJvYXJkVUlN
b2RlKCkKIHsKLSAgICBib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQgPSBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CisgICAgYm9vbCBmdWxsS2V5
Ym9hcmRBY2Nlc3NFbmFibGVkID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlZCgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxLZXlib2FyZFVJTW9kZT4o
KGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQgPyBLZXlib2FyZEFjY2Vzc0Z1bGwgOiBLZXlib2Fy
ZEFjY2Vzc0RlZmF1bHQpIHwgKG1fdGFiVG9MaW5rcyA/IEtleWJvYXJkQWNjZXNzVGFic1RvTGlu
a3MgOiAwKSk7CiB9CiAKQEAgLTI1ODEsNyArMjU4MSw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0U2Vs
ZWN0aW9uT3JDb250ZW50c0FzU3RyaW5nKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBh
Z2U6OmdldFNvdXJjZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCiB7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKLSAgICBpZiAoV2ViRnJhbWUqIGZyYW1l
ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCkpCisgICAgaWYgKFdlYkZy
YW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpKQog
ICAgICAgIHJlc3VsdFN0cmluZyA9IGZyYW1lLT5zb3VyY2UoKTsKIAogICAgIHNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U3RyaW5nQ2FsbGJhY2socmVzdWx0U3RyaW5nLCBjYWxsYmFja0lE
KSk7CkBAIC0yNTkwLDcgKzI1OTAsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFNvdXJjZUZvckZyYW1l
KHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB2b2lkIFdlYlBhZ2U6Omdl
dE1haW5SZXNvdXJjZURhdGFPZkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiB7CiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKSkgewor
ICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFt
ZShmcmFtZUlEKSkgewogICAgICAgICBpZiAoUGx1Z2luVmlldyogcGx1Z2luVmlldyA9IHBsdWdp
blZpZXdGb3JGcmFtZShmcmFtZS0+Y29yZUZyYW1lKCkpKQogICAgICAgICAgICAgYnVmZmVyID0g
cGx1Z2luVmlldy0+bGl2ZVJlc291cmNlRGF0YSgpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewpA
QCAtMjYyMiw3ICsyNjIyLDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZXNv
dXJjZURhdGFGb3JGcmFtZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgcmUKIHZvaWQgV2ViUGFn
ZTo6Z2V0UmVzb3VyY2VEYXRhRnJvbUZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFN0cmlu
ZyYgcmVzb3VyY2VVUkxTdHJpbmcsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7CiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gYnVmZmVyOwotICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKSkgeworICAgIGlmIChXZWJGcmFtZSogZnJh
bWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKSkgewogICAgICAg
ICBVUkwgcmVzb3VyY2VVUkwoVVJMKCksIHJlc291cmNlVVJMU3RyaW5nKTsKICAgICAgICAgYnVm
ZmVyID0gcmVzb3VyY2VEYXRhRm9yRnJhbWUoZnJhbWUtPmNvcmVGcmFtZSgpLCByZXNvdXJjZVVS
TCk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CkBAIC0yNjQyLDcgKzI2NDIsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFdlYkFyY2hpdmVPZkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gZGF0YTsKLSAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCku
d2ViRnJhbWUoZnJhbWVJRCkpCisgICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpKQogICAgICAgICBkYXRhID0gZnJhbWUtPndl
YkFyY2hpdmVEYXRhKG51bGxwdHIsIG51bGxwdHIpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
ZnJhbWVJRCk7CkBAIC0zNzY4LDcgKzM3NjgsNyBAQCBSZXRhaW5QdHI8UERGRG9jdW1lbnQ+IFdl
YlBhZ2U6OnBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShGcmFtZSogY29yZUZyYW1lKQogCiB2
b2lkIFdlYlBhZ2U6OmJlZ2luUHJpbnRpbmcodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJ
bmZvJiBwcmludEluZm8pCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hh
cmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0zODMzLDcgKzM4MzMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVQ
YWdlc0ZvclByaW50aW5nSW1wbCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHBy
aQogI2lmIFBMQVRGT1JNKENPQ09BKQogdm9pZCBXZWJQYWdlOjpkcmF3UmVjdFRvSW1hZ2UodWlu
dDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGltYWdlU2l6ZSwgdWludDY0X3QgY2FsbGJh
Y2tJRCkKIHsKLSAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJG
cmFtZShmcmFtZUlEKTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUgPyBm
cmFtZS0+Y29yZUZyYW1lKCkgOiAwOwogCiAgICAgUmVmUHRyPFdlYkltYWdlPiBpbWFnZTsKQEAg
LTM4ODUsNyArMzg4NSw3IEBAIHZvaWQgV2ViUGFnZTo6ZHJhd1BhZ2VzVG9QREYodWludDY0X3Qg
ZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQzCiAKIHZvaWQgV2ViUGFn
ZTo6ZHJhd1BhZ2VzVG9QREZJbXBsKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYg
cHJpbnRJbmZvLCB1aW50MzJfdCBmaXJzdCwgdWludDMyX3QgY291bnQsIFJldGFpblB0cjxDRk11
dGFibGVEYXRhUmVmPiYgcGRmUGFnZURhdGEpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1l
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgRnJhbWUq
IGNvcmVGcmFtZSA9IGZyYW1lID8gZnJhbWUtPmNvcmVGcmFtZSgpIDogMDsKIAogICAgIHBkZlBh
Z2VEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKQEAgLTQ1NDksNyAr
NDU0OSw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFtZSogZnJhbWUpCiAg
ICAgY2FuY2VsUG90ZW50aWFsVGFwKCk7CiAKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5ldmVudERpc3BhdGNoZXIoKS5jbGVhclF1ZXVlZFRv
dWNoRXZlbnRzRm9yUGFnZSgqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZXZl
bnREaXNwYXRjaGVyKCkuY2xlYXJRdWV1ZWRUb3VjaEV2ZW50c0ZvclBhZ2UoKnRoaXMpOwogI2Vu
ZGlmCiAKICAgICByZXNldFZpZXdwb3J0RGVmYXVsdENvbmZpZ3VyYXRpb24oZnJhbWUpOwpAQCAt
NDU2Myw3ICs0NTYzLDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRDb21taXRMb2FkKFdlYkZyYW1lKiBm
cmFtZSkKICAgICByZXNldFByaW1hcnlTbmFwc2hvdHRlZFBsdWdJbigpOwogI2VuZGlmCiAKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS51cGRhdGVBY3RpdmVQYWdlcygpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnVwZGF0ZUFjdGl2ZVBhZ2VzKCk7CiAKICAgICB1cGRhdGVNYWluRnJh
bWVTY3JvbGxPZmZzZXRQaW5uaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAppbmRleCA2NDA1MmVjOTM0
ZWY1OTAwNjhjNTE5OWQyY2RmZWM0NzA2YWZlNzM1Li5lZTIyMzVhMjhjZWZiZjI0NDAxZjI3ZGE5
MmM5MWY5ZDU2MDMxNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKQEAgLTM4LDggKzM4LDggQEAgUGFzc1Jl
ZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJgogewogICAgIFJlZlB0cjxXZWJQYWdlR3JvdXBQcm94eT4gcGFnZUdy
b3VwID0gYWRvcHRSZWYobmV3IFdlYlBhZ2VHcm91cFByb3h5KGRhdGEpKTsKICAgICAKLSAgICBp
ZiAocGFnZUdyb3VwLT5pc1Zpc2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKSkKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
aW5qZWN0ZWRCdW5kbGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkp
OworICAgIGlmIChwYWdlR3JvdXAtPmlzVmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpKQorICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5kaWRJbml0aWFsaXplUGFnZUdyb3VwKHBh
Z2VHcm91cC5nZXQoKSk7CiAKICAgICByZXR1cm4gcGFnZUdyb3VwLnJlbGVhc2UoKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxp
c3RHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVy
TGlzdEd0ay5jcHAKaW5kZXggYzNlMzY0YjY0ZTgyZjAyYjU0OWE5ZWRlMTkzNDk4N2EyMDUwMzk1
ZS4uOWIzOWFmNzI0NDZiYzlkYmUzMmY3ZmU0YzBkMmNlYTc0ZDc1ZTdmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0
ay5jcHAKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIFByaW50ZXJMaXN0
R3RrKiBQcmludGVyTGlzdEd0azo6c19zaGFyZWRQcmludGVyTGlzdCA9IG51bGxwdHI7CiAKLVJl
ZlB0cjxQcmludGVyTGlzdEd0az4gUHJpbnRlckxpc3RHdGs6OnNoYXJlZCgpCitSZWZQdHI8UHJp
bnRlckxpc3RHdGs+IFByaW50ZXJMaXN0R3RrOjpzaW5nbGV0b24oKQogewogICAgIGlmIChzX3No
YXJlZFByaW50ZXJMaXN0KQogICAgICAgICByZXR1cm4gc19zaGFyZWRQcmludGVyTGlzdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxp
c3RHdGsuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxp
c3RHdGsuaAppbmRleCA1YTQ2NmY0N2QxMDBiNDljMGVlNWFhNTlkMjU4ODg4ODVlOTFmZGExLi5m
YWJhODJjZWY3OTlhZjQxYjM2MDI1ODNjNTJlY2M3MGQ1NmEwMDExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5oCkBA
IC0zOCw3ICszOCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBQcmludGVyTGlzdEd0
azogcHVibGljIFJlZkNvdW50ZWQ8UHJpbnRlckxpc3RHdGs+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgUmVmUHRyPFBy
aW50ZXJMaXN0R3RrPiBzaW5nbGV0b24oKTsKICAgICB+UHJpbnRlckxpc3RHdGsoKTsKIAogICAg
IEd0a1ByaW50ZXIqIGZpbmRQcmludGVyKGNvbnN0IGNoYXIqKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25H
dGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9w
ZXJhdGlvbkd0ay5jcHAKaW5kZXggMjMzMjZiNDBjNTdmZWU5MzE0YjU1OGI0N2JkZDk4YTQyMTkz
MDBmZS4uOTg1OTI5OGVmMzg4NTMxYTYzNzg1ZDdjNmIzYzBiNDc1M2E2Yzk1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQcmludE9wZXJhdGlv
bkd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQ
cmludE9wZXJhdGlvbkd0ay5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgICAgICBt
X3ByaW50Q29udGV4dCA9IHByaW50Q29udGV4dDsKICAgICAgICAgbV9jYWxsYmFja0lEID0gY2Fs
bGJhY2tJRDsKIAotICAgICAgICBSZWZQdHI8UHJpbnRlckxpc3RHdGs+IHByaW50ZXJMaXN0ID0g
UHJpbnRlckxpc3RHdGs6OnNoYXJlZCgpOworICAgICAgICBSZWZQdHI8UHJpbnRlckxpc3RHdGs+
IHByaW50ZXJMaXN0ID0gUHJpbnRlckxpc3RHdGs6OnNpbmdsZXRvbigpOwogICAgICAgICBjb25z
dCBjaGFyKiBwcmludGVyTmFtZSA9IGd0a19wcmludF9zZXR0aW5nc19nZXRfcHJpbnRlcihtX3By
aW50U2V0dGluZ3MuZ2V0KCkpOwogICAgICAgICBHdGtQcmludGVyKiBwcmludGVyID0gcHJpbnRl
ck5hbWUgPyBwcmludGVyTGlzdC0+ZmluZFByaW50ZXIocHJpbnRlck5hbWUpIDogcHJpbnRlckxp
c3QtPmRlZmF1bHRQcmludGVyKCk7CiAgICAgICAgIGlmICghcHJpbnRlcikgewpAQCAtMTQ5LDEz
ICsxNDksMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHByaW50Sm9iRmluaXNoZWQoV2Vi
UHJpbnRPcGVyYXRpb25HdGtVbml4KiBwcmludE9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIHBy
aW50T3BlcmF0aW9uLT5kZXJlZigpOwotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5lbmFi
bGVUZXJtaW5hdGlvbigpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbmFibGVU
ZXJtaW5hdGlvbigpOwogICAgIH0KIAogICAgIHZvaWQgZW5kUHJpbnQoKSBvdmVycmlkZQogICAg
IHsKICAgICAgICAgLy8gRGlzYWJsZSB3ZWIgcHJvY2VzcyB0ZXJtaW5hdGlvbiB1bnRpbCB0aGUg
cHJpbnQgam9iIGZpbmlzaGVzLgotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5kaXNhYmxl
VGVybWluYXRpb24oKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZGlzYWJsZVRl
cm1pbmF0aW9uKCk7CiAKICAgICAgICAgY2Fpcm9fc3VyZmFjZV9maW5pc2goZ3RrX3ByaW50X2pv
Yl9nZXRfc3VyZmFjZShtX3ByaW50Sm9iLmdldCgpLCAwKSk7CiAgICAgICAgIC8vIE1ha2Ugc3Vy
ZSB0aGUgb3BlcmF0aW9uIGlzIGFsaXZlIHVudGlsIHRoZSBqb2IgaXMgc2VudC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRl
eCBhODk1YmM1ZDY5NDY3OGMwYzA0NGY4MTdmNjEzMjIwZTM5NmU3YzRiLi5iOTg3OWFiYjdhNDM1
NGQ1ZTRkZDZhMmFmN2FiZDllMGUwNWJiNGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yODEsNyArMjgxLDcgQEAg
Ym9vbCBXZWJQYWdlOjpoYW5kbGVFZGl0aW5nS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBl
dmVudCkKIAogICAgIC8vIEZJWE1FOiBJbnRlcnByZXQgdGhlIGV2ZW50IGltbWVkaWF0ZWx5IHVw
b24gcmVjZWl2aW5nIGl0IGluIFVJIHByb2Nlc3MsIHdpdGhvdXQgc2VuZGluZyB0byBXZWJQcm9j
ZXNzIGZpcnN0LgogICAgIGJvb2wgZXZlbnRXYXNIYW5kbGVkID0gZmFsc2U7Ci0gICAgYm9vbCBz
ZW5kUmVzdWx0ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQoZWRp
dG9yU3RhdGUoKSwgcGxhdGZvcm1FdmVudC0+dHlwZSgpID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVu
dDo6Q2hhciksCisgICAgYm9vbCBzZW5kUmVzdWx0ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6SW50ZXJwcmV0S2V5RXZlbnQoZWRpdG9yU3RhdGUoKSwgcGxhdGZvcm1FdmVudC0+dHlwZSgp
ID09IFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6Q2hhciksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6SW50ZXJwcmV0S2V5RXZlbnQ6OlJlcGx5KGV2ZW50V2Fz
SGFuZGxlZCksIG1fcGFnZUlEKTsKICAgICBpZiAoIXNlbmRSZXN1bHQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKQEAgLTIyNzcsNyArMjI3Nyw3IEBAIHZvaWQgV2ViUGFnZTo6ZWxlbWVudERpZEZv
Y3VzKFdlYkNvcmU6Ok5vZGUqIG5vZGUpCiAgICAgICAgIGlmIChtX3VzZXJJc0ludGVyYWN0aW5n
KQogICAgICAgICAgICAgbV9mb3JtQ2xpZW50LT53aWxsQmVnaW5JbnB1dFNlc3Npb24odGhpcywg
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKCpub2RlLT5k
b2N1bWVudCgpLmZyYW1lKCkpLCB1c2VyRGF0YSk7CiAKLSAgICAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTdGFydEFzc2lzdGluZ05vZGUoaW5mb3JtYXRpb24sIG1fdXNlcklzSW50
ZXJhY3RpbmcsIG1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb24sIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOworICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0QXNzaXN0
aW5nTm9kZShpbmZvcm1hdGlvbiwgbV91c2VySXNJbnRlcmFjdGluZywgbV9oYXNQZW5kaW5nQmx1
ck5vdGlmaWNhdGlvbiwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgICAgIG1faGFz
UGVuZGluZ0JsdXJOb3RpZmljYXRpb24gPSBmYWxzZTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tCmluZGV4IGQwNGUzYzc0Yjc0MDk0MDQ3ZTFiNTA2ZDY3
MDFjMDkwOGIwOGE1MmEuLjFlZjlhOTkxMTE3OWYzOTE1NTNlOWI2YjcxODA2ZmE5NTYwYzVjNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tCkBAIC01OSw3ICs1OSw3
IEBAIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3Vz
dG9tKExheWVyVHlwZSBsYXllclR5cGUsIFBsCiB7CiAgICAgc3dpdGNoIChjb250ZXh0LmxheWVy
SG9zdGluZ01vZGUoKSkgewogICAgIGNhc2UgTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOgot
ICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVh
dGVGb3JQb3J0KFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9y
dCgpKTsKKyAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4
dDo6Y3JlYXRlRm9yUG9ydChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRl
clNlcnZlclBvcnQoKSk7CiAgICAgICAgIGJyZWFrOwogI2lmIEhBVkUoT1VUX09GX1BST0NFU1Nf
TEFZRVJfSE9TVElORykKICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IGYxMzFkNWUyZjA4MjRi
YjUyNDgzMzUxOTZmMGJjY2M2MjY2MDFlYWMuLmE3NTQ5MDdmYTk0MDdmZTJhNGUyYTJmYWIwZDE0
ZTE4YzQ5ZTVkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAt
MzkzLDE0ICszOTMsMTQgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hM
YXllcnMoKQogICAgIGlmIChoYWRBbnlDaGFuZ2VkQmFja2luZ1N0b3JlKQogICAgICAgICBiYWNr
aW5nU3RvcmVDb2xsZWN0aW9uLnNjaGVkdWxlVm9sYXRpbGl0eVRpbWVyKCk7CiAKLSAgICBSZWZQ
dHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gYmFja2luZ1N0b3JlRmx1c2hlciA9IEJhY2tpbmdTdG9y
ZUZsdXNoZXI6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLCBXVEY6Om1vdmUoY29tbWl0RW5jb2RlciksIFdURjo6bW92ZShjb250ZXh0c1RvRmx1
c2gpKTsKKyAgICBSZWZQdHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gYmFja2luZ1N0b3JlRmx1c2hl
ciA9IEJhY2tpbmdTdG9yZUZsdXNoZXI6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLCBXVEY6Om1vdmUoY29tbWl0RW5jb2RlciksIFdURjo6
bW92ZShjb250ZXh0c1RvRmx1c2gpKTsKICAgICBtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVy
ID0gYmFja2luZ1N0b3JlRmx1c2hlcjsKIAogICAgIHVpbnQ2NF90IHBhZ2VJRCA9IG1fd2ViUGFn
ZS5wYWdlSUQoKTsKICAgICBkaXNwYXRjaF9hc3luYyhtX2NvbW1pdFF1ZXVlLCBbYmFja2luZ1N0
b3JlRmx1c2hlciwgcGFnZUlEXSB7CiAgICAgICAgIGJhY2tpbmdTdG9yZUZsdXNoZXItPmZsdXNo
KCk7CiAKLSAgICAgICAgaWYgKFdlYlBhZ2UgKndlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQo
KS53ZWJQYWdlKHBhZ2VJRCkpIHsKKyAgICAgICAgaWYgKFdlYlBhZ2UgKndlYlBhZ2UgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHBhZ2VJRCkpIHsKICAgICAgICAgICAgIHN0ZDo6
Y2hyb25vOjptaWxsaXNlY29uZHMgdGltZXN0YW1wID0gc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25k
cyhzdGF0aWNfY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjpyZXA+KG1vbm90b25pY2Fs
bHlJbmNyZWFzaW5nVGltZSgpICogMTAwMCkpOwogICAgICAgICAgICAgZGlzcGF0Y2hfYXN5bmMo
ZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSwgXnsKICAgICAgICAgICAgICAgICB3ZWJQYWdlLT5k
aWRGbHVzaExheWVyVHJlZUF0VGltZSh0aW1lc3RhbXApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJl
YS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggMmY0NWIyZjRiNTk1YzUwNWI4NDZjZWFmODJmMzgx
NjYwMWQwNDBlZC4uNjc4Mzc5Nzc0YWE3YzdlZThlMzA2OWIzNTZkZmIyZDA3NDlhYTBlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVB
bmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBAIC00ODIsNyArNDgy
LDcgQEAgdm9pZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlTGF5ZXJIb3N0
aW5nQ29udGV4dCgpCiAgICAgLy8gQ3JlYXRlIGEgbmV3IGNvbnRleHQgYW5kIHNldCBpdCB1cC4K
ICAgICBzd2l0Y2ggKG1fd2ViUGFnZS5sYXllckhvc3RpbmdNb2RlKCkpIHsKICAgICBjYXNlIExh
eWVySG9zdGluZ01vZGU6OkluUHJvY2VzczoKLSAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0
ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yUG9ydChXZWJQcm9jZXNzOjpzaGFyZWQo
KS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSk7CisgICAgICAgIG1fbGF5ZXJIb3N0aW5n
Q29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQoV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkpOwogICAgICAgICBicmVh
azsKICNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVSX0hPU1RJTkcpCiAgICAgY2FzZSBMYXll
ckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggNGRiNmFiNzcxN2RkYmNjNTMy
NDFmNzNjMDhkN2NiOTUwNjFiYmM1Zi4uZTJmNjY3NWIxM2FlYTI1ZmI2NzAwNzlmZGQwOGU5MTM3
ZTM0ODhjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbQpAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZv
cm1Jbml0aWFsaXplKCkKICAgICBXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0KiBtb2NrQWNj
ZXNzaWJpbGl0eUVsZW1lbnQgPSBbW1tXS0FjY2Vzc2liaWxpdHlXZWJQYWdlT2JqZWN0IGFsbG9j
XSBpbml0XSBhdXRvcmVsZWFzZV07CiAKICAgICAvLyBHZXQgdGhlIHBpZCBmb3IgdGhlIHN0YXJ0
aW5nIHByb2Nlc3MuCi0gICAgcGlkX3QgcGlkID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkucHJlc2Vu
dGVyQXBwbGljYXRpb25QaWQoKTsgICAgCisgICAgcGlkX3QgcGlkID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucHJlc2VudGVyQXBwbGljYXRpb25QaWQoKTsKICAgICBXS0FYSW5pdGlhbGl6ZUVs
ZW1lbnRXaXRoUHJlc2VudGVyUGlkKG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCwgcGlkKTsKICAg
ICBbbW9ja0FjY2Vzc2liaWxpdHlFbGVtZW50IHNldFdlYlBhZ2U6dGhpc107CiAgICAgCkBAIC0y
MTIsNyArMjEyLDcgQEAgYm9vbCBXZWJQYWdlOjpleGVjdXRlS2V5cHJlc3NDb21tYW5kc0ludGVy
bmFsKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpLZXlwcmVzc0NvbW0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGJvb2wgY29tbWFuZFdhc0hh
bmRsZWRCeVVJUHJvY2VzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yKGNvbW1hbmRzW2ldLmNvbW1h
bmROYW1lKSwgCisgICAgICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhl
Y3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3IoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLAogICAg
ICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGVjdXRlU2F2ZWRDb21t
YW5kQnlTZWxlY3Rvcjo6UmVwbHkoY29tbWFuZFdhc0hhbmRsZWRCeVVJUHJvY2VzcyksIG1fcGFn
ZUlEKTsKICAgICAgICAgICAgICAgICBldmVudFdhc0hhbmRsZWQgfD0gY29tbWFuZFdhc0hhbmRs
ZWRCeVVJUHJvY2VzczsKICAgICAgICAgICAgIH0KQEAgLTgxNSw3ICs4MTUsNyBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZUhlYWRlckFuZEZvb3RlckxheWVyc0ZvckRldmljZVNjYWxlQ2hhbmdlKGZs
b2F0IHNjYWxlRmFjdG9yKQogdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGluZ1BE
RkRvY3VtZW50KHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBW
ZWN0b3I8SW50UmVjdD4mIHJlc3VsdFBhZ2VSZWN0cykKIHsKICAgICBBU1NFUlQocmVzdWx0UGFn
ZVJlY3RzLmlzRW1wdHkoKSk7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hh
cmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9
IGZyYW1lID8gZnJhbWUtPmNvcmVGcmFtZSgpIDogMDsKICAgICBSZXRhaW5QdHI8UERGRG9jdW1l
bnQ+IHBkZkRvY3VtZW50ID0gY29yZUZyYW1lID8gcGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1l
KGNvcmVGcmFtZSkgOiAwOwogICAgIGlmIChbcGRmRG9jdW1lbnQgYWxsb3dzUHJpbnRpbmddKSB7
CkBAIC0xMDgxLDcgKzEwODEsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1BY3Rpb25NZW51SGl0
VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlvbkluVgogICAgIFJlZlB0
cjxBUEk6Ok9iamVjdD4gdXNlckRhdGE7CiAgICAgaW5qZWN0ZWRCdW5kbGVDb250ZXh0TWVudUNs
aWVudCgpLnByZXBhcmVGb3JBY3Rpb25NZW51KCp0aGlzLCBoaXRUZXN0UmVzdWx0LCB1c2VyRGF0
YSk7CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1BY3Rpb25N
ZW51SGl0VGVzdChhY3Rpb25NZW51UmVzdWx0LCBmb3JJbW1lZGlhdGVBY3Rpb24sIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVy
Zm9ybUFjdGlvbk1lbnVIaXRUZXN0KGFjdGlvbk1lbnVSZXN1bHQsIGZvckltbWVkaWF0ZUFjdGlv
biwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViQ29yZTo6
UmFuZ2U+IFdlYlBhZ2U6Omxvb2t1cFRleHRBdExvY2F0aW9uKEZsb2F0UG9pbnQgbG9jYXRpb25J
blZpZXdDb29vcmRpbmF0ZXMsIE5TRGljdGlvbmFyeSAqKm9wdGlvbnMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAppbmRleCA5NjE2YjAwZDlmNjYxMjAwMjhjNzMzNzk5
NDAwYTk0ZWRkYTMwM2Q5Li5mNWE5NzNkOGU4YmIwNGNmZWI3YTEyYjI0ZThkOTkwMGU4ODU4OTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0Myw3ICsx
NDMsNyBAQCBzdGF0aWMgY29uc3QgZG91YmxlIG5vblZpc2libGVQcm9jZXNzQ2xlYW51cERlbGF5
ID0gMTA7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJQcm9jZXNzJiBXZWJQcm9jZXNzOjpz
aGFyZWQoKQorV2ViUHJvY2VzcyYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0
aWMgV2ViUHJvY2VzcyYgcHJvY2VzcyA9ICpuZXcgV2ViUHJvY2VzczsKICAgICByZXR1cm4gcHJv
Y2VzczsKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVDb25u
ZWN0aW9uKElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbikKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFNFQ19JVEVNX1NISU0pCi0gICAgU2VjSXRlbVNoaW06OnNoYXJlZCgpLmluaXRpYWxpemVDb25u
ZWN0aW9uKGNvbm5lY3Rpb24pOworICAgIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0aWFs
aXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICNlbmRpZgogICAgIAogICAgIFdlYlByb2Nlc3NT
dXBwbGVtZW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3VwcGxlbWVudHMuYmVnaW4oKTsK
QEAgLTM1Myw3ICszNTMsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNz
KFdlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgaWYgKHVzZXNOZXR3b3JrUHJvY2VzcygpKQotICAgICAgICBDb29raWVT
dG9yYWdlU2hpbTo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgpOworICAgICAgICBDb29raWVTdG9yYWdl
U2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSgpOwogI2VuZGlmCiAjZW5kaWYKICAgICBzZXRU
ZXJtaW5hdGlvblRpbWVvdXQocGFyYW1ldGVycy50ZXJtaW5hdGlvblRpbWVvdXQpOwpAQCAtMzcy
LDcgKzM3Miw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBhcmFtZXRlcnMpCiAgICAgYXVkaXRfdG9rZW5fdCBh
dWRpdFRva2VuOwogICAgIGlmIChwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRv
a2VuKGF1ZGl0VG9rZW4pKSB7CiAgICAgICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1ZGl0RGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIChjb25zdCBVSW50OCopJmF1ZGl0VG9r
ZW4sIHNpemVvZihhdWRpdFRva2VuKSkpOwotICAgICAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3Bl
Y3Rvcjo6c2hhcmVkKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKHByZXNlbnRlckFwcGxp
Y2F0aW9uUGlkKCksIGF1ZGl0RGF0YSk7CisgICAgICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS5zZXRQYXJlbnRQcm9jZXNzSW5mb3JtYXRpb24ocHJlc2VudGVyQXBw
bGljYXRpb25QaWQoKSwgYXVkaXREYXRhKTsKICAgICB9CiAjZW5kaWYKIH0KQEAgLTcwOCw3ICs3
MDgsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OmNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNo
ZXNUb0NsZWFyIHJlc291cmNlQ2FjaGVzVG9DbGVhcgogICAgIG1lbW9yeUNhY2hlKCkuZXZpY3RS
ZXNvdXJjZXMoKTsKIAogICAgIC8vIEVtcHR5IHRoZSBjcm9zcy1vcmlnaW4gcHJlZmxpZ2h0IGNh
Y2hlLgotICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNoYXJlZCgpLmVtcHR5
KCk7CisgICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkuZW1w
dHkoKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKQpAQCAt
OTUxLDcgKzk1MSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xs
ZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBmbGFnKQogCiB2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZUlu
amVjdGVkQnVuZGxlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2Vy
RGF0YSYgbWVzc2FnZUJvZHkpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxl
ID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKTsKKyAgICBJbmplY3RlZEJ1
bmRsZSogaW5qZWN0ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1
bmRsZSgpOwogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUpCiAgICAgICAgIHJldHVybjsKIApAQCAt
OTYwLDcgKzk2MCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6aGFuZGxlSW5qZWN0ZWRCdW5kbGVNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzCiAKIHZvaWQgV2ViUHJvY2Vz
czo6c2V0SW5qZWN0ZWRCdW5kbGVQYXJhbWV0ZXIoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgdmFsdWUpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVk
QnVuZGxlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZSogaW5qZWN0ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmpl
Y3RlZEJ1bmRsZSgpOwogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTA3OSw3ICsxMDc5LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRFbmhhbmNlZEFjY2Vz
c2liaWxpdHkoYm9vbCBmbGFnKQogdm9pZCBXZWJQcm9jZXNzOjpzdGFydE1lbW9yeVNhbXBsZXIo
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWxlSGFuZGxlLCBjb25z
dCBTdHJpbmcmIHNhbXBsZUxvZ0ZpbGVQYXRoLCBjb25zdCBkb3VibGUgaW50ZXJ2YWwpCiB7CiAj
aWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKSAgICAKLSAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFy
ZWQoKS0+c3RhcnQoc2FtcGxlTG9nRmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVy
dmFsKTsKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaW5nbGV0b24oKS0+c3RhcnQoc2FtcGxlTG9n
RmlsZUhhbmRsZSwgc2FtcGxlTG9nRmlsZVBhdGgsIGludGVydmFsKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKHNhbXBsZUxvZ0ZpbGVIYW5kbGUpOwogICAgIFVOVVNFRF9QQVJBTShzYW1wbGVM
b2dGaWxlUGF0aCk7CkBAIC0xMDkwLDcgKzEwOTAsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnN0YXJ0
TWVtb3J5U2FtcGxlcihjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNhbXBsZUxvZ0Zp
bAogdm9pZCBXZWJQcm9jZXNzOjpzdG9wTWVtb3J5U2FtcGxlcigpCiB7CiAjaWYgRU5BQkxFKE1F
TU9SWV9TQU1QTEVSKQotICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdG9wKCk7Cisg
ICAgV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0b3AoKTsKICNlbmRpZgogfQogCkBA
IC0xMTE2LDcgKzExMTYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFRleHRDaGVja2VyU3RhdGUo
Y29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgdGV4dENoZWNrZXJTdGF0ZSkKIAogdm9pZCBXZWJQcm9j
ZXNzOjpyZWxlYXNlUGFnZUNhY2hlKCkKIHsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5l
VG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVBy
ZXNzdXJlKTsKIH0KIAogI2lmICFQTEFURk9STShDT0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmgKaW5kZXggZjljZjM3Y2FhYjgzMzI3MGY5YjJjYzJkNmI2YzMzYmY3YjAx
OTMwZC4uNWJhZjA3MjEzN2RlNmFlN2RmNWM3M2Y1NGI1ZDM4OTlmOGZkMzI1ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKQEAgLTkzLDcgKzkzLDcgQEAgY2xhc3MgV2Vi
VG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOwogY2xhc3MgV2ViUHJvY2VzcyA6IHB1YmxpYyBD
aGlsZFByb2Nlc3MsIHB1YmxpYyBXZWJPcmlnaW5EYXRhTWFuYWdlclN1cHBsZW1lbnQsIHByaXZh
dGUgRG93bmxvYWRNYW5hZ2VyOjpDbGllbnQgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ry
b3llZDxEb3dubG9hZE1hbmFnZXI+OwogcHVibGljOgotICAgIHN0YXRpYyBXZWJQcm9jZXNzJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgV2ViUHJvY2VzcyYgc2luZ2xldG9uKCk7CiAKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KICAgICBUKiBzdXBwbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KaW5kZXggYmM0ODZlNzNl
ZTdmM2IxZjNhZWViMzZlYzhkNTliYWUwMjQ0MzU5MS4uMGQ4YTNjZjE1NTg4Y2QwN2FmZmIzNTQx
MWIwYTNhNGQxZWVhM2Y0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9j
b2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFdlYlByb2Nl
c3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBt
ZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4
RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hlKCkuc2V0
RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbklu
dGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6
ZSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUp
OwogCiAgICAgTlNVUkxDYWNoZSAqbnN1cmxDYWNoZSA9IFtOU1VSTENhY2hlIHNoYXJlZFVSTENh
Y2hlXTsKIApAQCAtMTQ0LDcgKzE0NCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1DbGVh
clJlc291cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciBjYWNoZXNUb0NsZWFyCiAjaWYg
VVNFKEFQUEtJVCkKIHN0YXRpYyBpZCBOU0FwcGxpY2F0aW9uQWNjZXNzaWJpbGl0eUZvY3VzZWRV
SUVsZW1lbnQoTlNBcHBsaWNhdGlvbiosIFNFTCkKIHsKLSAgICBXZWJQYWdlKiBwYWdlID0gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuZm9jdXNlZFdlYlBhZ2UoKTsKKyAgICBXZWJQYWdlKiBwYWdlID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZm9jdXNlZFdlYlBhZ2UoKTsKICAgICBpZiAoIXBhZ2Ug
fHwgIXBhZ2UtPmFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKQEAgLTIyNiw3ICsyMjYsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6
ZVByb2Nlc3MoY29uc3QgQ2hpbGRQcm9jZXNzSW5pdGlhbGl6YXRpb25QYXJhbQogICAgIFdLQVhS
ZWdpc3RlclJlbW90ZUFwcCgpOwogCiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2Vj
SXRlbVNoaW06OnNoYXJlZCgpLmluaXRpYWxpemUodGhpcyk7CisgICAgU2VjSXRlbVNoaW06OnNp
bmdsZXRvbigpLmluaXRpYWxpemUodGhpcyk7CiAjZW5kaWYKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmNwcAppbmRleCBi
MzNlMjg2YWU0NmU4MmM4NjM1MWM4Y2Q3ZDYyMDExMTk5Zjc0ZTlhLi5mMGI5NjNlYjI2NzQ5OWNi
NmJkZGYyOWQ1NDhlZDRkZTU0ZWRlODc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmNwcApAQCAtMzUsNyArMzUsNyBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotRXh0ZW5zaW9uTWFuYWdlckVmbCYgRXh0ZW5zaW9uTWFu
YWdlckVmbDo6c2hhcmVkKCkKK0V4dGVuc2lvbk1hbmFnZXJFZmwmIEV4dGVuc2lvbk1hbmFnZXJF
Zmw6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEV4dGVuc2lvbk1h
bmFnZXJFZmw+IGV4dGVuc2lvbk1hbmFnZXI7CiAgICAgcmV0dXJuIGV4dGVuc2lvbk1hbmFnZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5h
Z2VyRWZsLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2Vy
RWZsLmgKaW5kZXggOWJhNTNiNjk4OGQ0MDRkNGM3NzgyNGFjMDk3YmUwYzI2NGNjYWFiOC4uMjJl
NWVhODY4ZjBlMjdhZjA5NTMxNDQxYjU3OGYwNThmNTNmOWQ0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuaApAQCAtNDAsNyAr
NDAsNyBAQCBjbGFzcyBNb2R1bGU7CiBjbGFzcyBFeHRlbnNpb25NYW5hZ2VyRWZsIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShFeHRlbnNpb25NYW5hZ2VyRWZsKTsKIHB1YmxpYzoKLSAgICBX
S19FWFBPUlQgc3RhdGljIEV4dGVuc2lvbk1hbmFnZXJFZmwmIHNoYXJlZCgpOworICAgIFdLX0VY
UE9SVCBzdGF0aWMgRXh0ZW5zaW9uTWFuYWdlckVmbCYgc2luZ2xldG9uKCk7CiAgICAgV0tfRVhQ
T1JUIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmKTsKIHByaXZhdGU6CiAg
ICAgRXh0ZW5zaW9uTWFuYWdlckVmbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvV2ViSW5qZWN0ZWRCdW5kbGVNYWluRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvZWZsL1dlYkluamVjdGVkQnVuZGxlTWFpbkVmbC5jcHAKaW5kZXggOWU1MGE4
Y2MxYmZkNmU4ZTViZmJkYjI3MjQ1ZDZkZjg0NWMwMGFlZi4uODIwNTlmOTk5ODkxMDc3OWNhNjJk
Y2RhOWU3ODZkZmFmYjFmNjM5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9lZmwvV2ViSW5qZWN0ZWRCdW5kbGVNYWluRWZsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2VmbC9XZWJJbmplY3RlZEJ1bmRsZU1haW5FZmwuY3BwCkBAIC0zMiw1ICszMiw1
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKIGV4dGVybiAiQyIgdm9pZCBXS0J1bmRsZUlu
aXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgdXNlckRhdGEpCiB7Ci0gICAg
RXh0ZW5zaW9uTWFuYWdlckVmbDo6c2hhcmVkKCkuaW5pdGlhbGl6ZShidW5kbGUsIHVzZXJEYXRh
KTsKKyAgICBFeHRlbnNpb25NYW5hZ2VyRWZsOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKGJ1bmRs
ZSwgdXNlckRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9n
dGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2d0ay9XZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmNwcAppbmRleCA1OGNjNzVkMjBjNTFkNGJmYTI4
ZjQxMDZlNzAyMTZjOWU0Y2FhNjJiLi5kZTI1ZTNkYmMxNjBhZTQ4ODM3MmExODgzMDFiMGRkNjJj
ODRkYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtF
eHRlbnNpb25NYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9X
ZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAotV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciYgV2ViR3RrRXh0ZW5zaW9uTWFuYWdl
cjo6c2hhcmVkKCkKK1dlYkd0a0V4dGVuc2lvbk1hbmFnZXImIFdlYkd0a0V4dGVuc2lvbk1hbmFn
ZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkd0a0V4dGVu
c2lvbk1hbmFnZXI+IGV4dGVuc2lvbk1hbmFnZXI7CiAgICAgcmV0dXJuIGV4dGVuc2lvbk1hbmFn
ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRl
bnNpb25NYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRl
bnNpb25NYW5hZ2VyLmgKaW5kZXggZmNjODY2YjQ3YTgxMDA2YzdiNWYxMjU3YzcwNDlkMDZkN2Nk
OWU3Yi4uMzdjNWU2Njc2NTkxZGUzNTI2MGNhZjMwYTU5ZTNhNDQxMjAzZWRhNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFn
ZXIuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJHdGtFeHRlbnNpb25NYW5hZ2VyKTsKIAogcHVibGlj
OgotICAgIFdLX0VYUE9SVCBzdGF0aWMgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciYgc2hhcmVkKCk7
CisgICAgV0tfRVhQT1JUIHN0YXRpYyBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyJiBzaW5nbGV0b24o
KTsKIAogICAgIFdLX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoV0tCdW5kbGVSZWYsIFdLVHlwZVJl
Zik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0lu
amVjdGVkQnVuZGxlTWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJH
dGtJbmplY3RlZEJ1bmRsZU1haW4uY3BwCmluZGV4IGYxOTJmYWEzOTY1ZTljMWRiOGQwYTJhM2U0
YmRjMDY5Zjc0ZDUxM2IuLjAwMzdjZDQ3Njk0YTc2Mjk5ODhmMWJiYjIzYTk0NjkyNDg4OGJiZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0luamVjdGVk
QnVuZGxlTWFpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3Rr
SW5qZWN0ZWRCdW5kbGVNYWluLmNwcApAQCAtMzEsNSArMzEsNSBAQCBleHRlcm4gIkMiCiAjZW5k
aWYKIHZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tUeXBlUmVm
IHVzZXJEYXRhKQogewotICAgIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXI6OnNoYXJlZCgpLmluaXRp
YWxpemUoYnVuZGxlLCB1c2VyRGF0YSk7CisgICAgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlcjo6c2lu
Z2xldG9uKCkuaW5pdGlhbGl6ZShidW5kbGUsIHVzZXJEYXRhKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2Vy
Lm1tCmluZGV4IGZmYjA0YmQ1ZTNhNGM2MmQ5NGI3MTdmYjQ4OWFlNjRmMDgxNjQ3NGMuLjc0MmU5
ZGI1YmY5Y2ZhNDI4OTZiZDg1MDUyYTZhMjJkMzgwNzFjYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5t
bQpAQCAtNzMsMTIgKzczLDEyIEBAIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXIoUGFzc1JlZlB0cjxXZWJQYWdlPiBwYWdlKQogICAgICwgbV9pc0Z1
bGxzY3JlZW4oZmFsc2UpCiB7CiAgICAgc2V0V2ViVmlkZW9GdWxsc2NyZWVuSW50ZXJmYWNlKHRo
aXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBwYWdl
LT5wYWdlSUQoKSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBwYWdlLT5wYWdlSUQoKSwgKnRoaXMpOwogfQogCiBXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjp+V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcigpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1
bGxzY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogYm9vbCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpz
dXBwb3J0c1ZpZGVvRnVsbHNjcmVlbigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAppbmRleCAxMThjNzIyZjc2MjQ5YTVlMmZl
YTRhYWVmMDU1Zjg0OWZhYzA5YzA2Li45YTI4NzA4NDU3ZjRhMmM1MWNkZjAzY2QzOWUzZjViODIz
MjRjOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJv
Y2Vzc1NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9j
ZXNzU291cC5jcHAKQEAgLTEwNCwxMCArMTA0LDEwIEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZv
cm1TZXRDYWNoZU1vZGVsKENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKICAgICBXZWJDb3JlOjptZW1v
cnlDYWNoZSgpLnNldERpc2FibGVkKGNhY2hlTW9kZWwgPT0gQ2FjaGVNb2RlbERvY3VtZW50Vmll
d2VyKTsKICAgICBXZWJDb3JlOjptZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5E
ZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwog
ICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRl
cnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBXZWJDb3JlOjpQYWdl
Q2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CisgICAgV2ViQ29yZTo6
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogCiAjaWYg
UExBVEZPUk0oR1RLKQotICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0U2hvdWxk
Q2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOworICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2luZ2xl
dG9uKCkuc2V0U2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKHRydWUpOwogI2VuZGlmCiAKICAgICBp
ZiAoIXVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFkODc1MmQxM2Q3MjU2ZGMwOWQ4OWNjYzhlOWU2ZGM3
MDdjMTJjMi4uYTAxMzIyMTZmYzdjNzZlNDIyYzg0ZjcwNWZlYTYzN2MxMTczNDdlMCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDE1LTAxLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigp
IGZvciBzaW5nbGV0b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE0MTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0
byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSBy
ZWNlbnQgY29kaW5nIHN0eWxlIGNoYW5nZS4KKwogMjAxNS0wMS0yOSAgQWxleGV5IFByb3NrdXJ5
YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsdCByZXN1bHQgdGFrZXMgdG9vIGxv
bmcgdG8gYmUgY29tcHJlc3NlZCBvbiBib3RzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3Bw
CmluZGV4IDQ1ZmI5N2FkNzE2MWYwYTFmMmY3NTRkZjBlYjdiZjg0Y2FmMmUzMTUuLjNhZmMwYzJl
M2M2MWNjNzZlZGUzNjBjNjQ3YTM1NWY5ZGNkMDgwZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RS
dW5uZXIuY3BwCkBAIC0yMTQ0LDM3ICsyMTQ0LDM3IEBAIEpTU3RhdGljRnVuY3Rpb24qIFRlc3RS
dW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRN
TFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMKQogewotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVu
dCwgYmFzZVVSTCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVlKG5ldyBMb2Fk
SFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnF1ZXVlTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmcoSlNTdHJpbmdSZWYgY29udGVudCwgSlNTdHJp
bmdSZWYgYmFzZVVSTCwgSlNTdHJpbmdSZWYgdW5yZWFjaGFibGVVUkwpCiB7Ci0gICAgV29ya1F1
ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNl
VVJMLCB1bnJlYWNoYWJsZVVSTCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVl
KG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgdW5yZWFjaGFibGVVUkwp
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dGYXJC
YWNrKQogewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBCYWNrSXRlbShob3dG
YXJCYWNrKSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUobmV3IEJhY2tJdGVt
KGhvd0ZhckJhY2spKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0
aW9uKGludCBob3dGYXJGb3J3YXJkKQogewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVl
KG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJkKSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0
b24oKS0+cXVldWUobmV3IEZvcndhcmRJdGVtKGhvd0ZhckZvcndhcmQpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQp
KTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0
ZW0oc2NyaXB0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShu
ZXcgTm9uTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0
b24oKS0+cXVldWUobmV3IE5vbkxvYWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5x
dWV1ZShuZXcgUmVsb2FkSXRlbSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUo
bmV3IFJlbG9hZEl0ZW0pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Omlnbm9yZUxlZ2FjeVdlYk5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0cygpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9Xb3JrUXVldWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmNw
cAppbmRleCBjMmZjMDRmMTM2Yzc1MTE3MzQ2NjE3NGMwZjcyNDhkNDBjNDU4Njc4Li5kMjZlNDAz
ZGRkODZjMGJhZGVhMDAyMzVhOTQ0NGYzNzY3OGU1ZDViIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9Xb3JrUXVldWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtR
dWV1ZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgc3RhdGljIFdvcmtRdWV1ZUl0ZW0qIHRoZVF1ZXVl
W3F1ZXVlTGVuZ3RoXTsKIHN0YXRpYyB1bnNpZ25lZCBzdGFydE9mUXVldWU7CiBzdGF0aWMgdW5z
aWduZWQgZW5kT2ZRdWV1ZTsKIAotV29ya1F1ZXVlKiBXb3JrUXVldWU6OnNoYXJlZCgpCitXb3Jr
UXVldWUqIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV29ya1F1ZXVlKiBz
aGFyZWRJbnN0YW5jZSA9IG5ldyBXb3JrUXVldWU7CiAgICAgcmV0dXJuIHNoYXJlZEluc3RhbmNl
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmggYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaAppbmRleCA4MzU4NWVhNjc4M2ZiN2M4YmUzNDBkNDll
MzEwNTQ1YWRjNTgxZTQ5Li40NGU3ODY0MDFmM2ZkODRiOGJmYWNkMmE1OGNiZmQ2ZWU4ZTg0ZDhm
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVldWUuaApAQCAtMzMsNyArMzMsNyBAQCBjbGFzcyBXb3Jr
UXVldWVJdGVtOwogCiBjbGFzcyBXb3JrUXVldWUgewogcHVibGljOgotICAgIHN0YXRpYyBXb3Jr
UXVldWUqIHNoYXJlZCgpOworICAgIHN0YXRpYyBXb3JrUXVldWUqIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCBxdWV1ZShXb3JrUXVldWVJdGVtKik7CiAgICAgV29ya1F1ZXVlSXRlbSogZGVxdWV1
ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGQy
NWUwNzg4NGRlNWJhM2EyZGY1NDUwZTc1ODNhODljY2U3NjMwMWEuLmU0NTUzMzhhOWIxY2ZjYmEz
N2ZjYjQ4YjVjOTAxNzkwNzlhMWQxYzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KQEAgLTE4NzAsOCArMTg3MCw4IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3Qo
Y29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgW3ByZXZUZXN0QkZJdGVtIHJlbGVhc2VdOwog
ICAgIHByZXZUZXN0QkZJdGVtID0gW1tbW21haW5GcmFtZSB3ZWJWaWV3XSBiYWNrRm9yd2FyZExp
c3RdIGN1cnJlbnRJdGVtXSByZXRhaW5dOwogCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xl
YXIoKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4oZmFsc2UpOworICAgIFdv
cmtRdWV1ZTo6c2luZ2xldG9uKCktPmNsZWFyKCk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24o
KS0+c2V0RnJvemVuKGZhbHNlKTsKIAogICAgIGJvb2wgaWdub3JlV2ViQ29yZU5vZGVMZWFrcyA9
IHNob3VsZElnbm9yZVdlYkNvcmVOb2RlTGVha3ModGVzdFVSTCk7CiAgICAgaWYgKGlnbm9yZVdl
YkNvcmVOb2RlTGVha3MpCkBAIC0xODk1LDcgKzE4OTUsNyBAQCBzdGF0aWMgdm9pZCBydW5UZXN0
KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIFtFdmVudFNlbmRpbmdDb250cm9sbGVyIGNs
ZWFyU2F2ZWRFdmVudHNdOwogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIHNldFNlbGVjdGVkRE9N
UmFuZ2U6bmlsIGFmZmluaXR5Ok5TU2VsZWN0aW9uQWZmaW5pdHlEb3duc3RyZWFtXTsKIAotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNsZWFyKCk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24o
KS0+Y2xlYXIoKTsKIAogICAgIGlmIChnVGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlKCkpIHsKICAgICAgICAgTlNBcnJheSogYXJyYXkgPSBbRHVtcFJlbmRlclRy
ZWVXaW5kb3cgb3BlbldpbmRvd3NdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1l
TG9hZERlbGVnYXRlLm1tCmluZGV4IDA0NTcyOTM1MzYyMDE0ODBkMTkxMjY1ODI2YmY1MTNkMGNm
M2I3NGQuLjQzMGNiMDdlZTYyNTM5NWNjNmU4ZDlkNGIzZjA4ZGRhMzM0ZDA4NzQgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KQEAgLTE0Niw3ICsx
NDYsNyBAQAogI2VuZGlmCiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxsIHRoZSBjb21tYW5kcywg
d2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5w
cm9jZXNzV29yaygpICYmICFnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChXb3Jr
UXVldWU6OnNpbmdsZXRvbigpLT5wcm9jZXNzV29yaygpICYmICFnVGVzdFJ1bm5lci0+d2FpdFRv
RHVtcCgpKQogICAgICAgICBkdW1wKCk7CiB9CiAKQEAgLTE1OSw5ICsxNTksOSBAQAogewogICAg
IGlmIChbZGF0YVNvdXJjZSB3ZWJGcmFtZV0gPT0gdG9wTG9hZGluZ0ZyYW1lKSB7CiAgICAgICAg
IHRvcExvYWRpbmdGcmFtZSA9IG5pbDsKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0
RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVlIGZv
ciB0aGUgcmVzdCBvZiB0aGlzIHRlc3QKKyAgICAgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+
c2V0RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVl
IGZvciB0aGUgcmVzdCBvZiB0aGlzIHRlc3QKICAgICAgICAgaWYgKCFnVGVzdFJ1bm5lci0+d2Fp
dFRvRHVtcCgpKSB7Ci0gICAgICAgICAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y291bnQo
KSkKKyAgICAgICAgICAgIGlmIChXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5jb3VudCgpKQogICAg
ICAgICAgICAgICAgIFtzZWxmIHBlcmZvcm1TZWxlY3RvcjpAc2VsZWN0b3IocHJvY2Vzc1dvcms6
KSB3aXRoT2JqZWN0Om5pbCBhZnRlckRlbGF5OjBdOwogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgIGR1bXAoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9U
ZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW0KaW5kZXggZDMyZDk2NDYwZDJlYjZiNzlkODc0NGM5YmEyNjg1NmIyZjcyZDcyYS4uNzdjZjEx
ZDUwNTVmNWYzNmVkOTM3MWY0YjM0ZTVhZTI2MWJkNmQ5NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KQEAgLTI2MSw3ICsyNjEsNyBAQCBzaXplX3QgVGVzdFJ1
bm5lcjo6d2ViSGlzdG9yeUl0ZW1Db3VudCgpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9u
ZSgpCiB7Ci0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3Jr
UXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIXRvcExv
YWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+Y291bnQoKSkKICAgICAgICAg
ZHVtcCgpOwogICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOwogfQpAQCAtMzM5LDcgKzMzOSw3IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYg
dGFyZ2V0KQogICAgIE5TU3RyaW5nICpuc3VybFN0cmluZyA9IFtuc3VybCBhYnNvbHV0ZVN0cmlu
Z107CiAKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gYWJzb2x1dGVVUkwoQWRvcHQsIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKFtuc3VybFN0cmluZyBVVEY4U3RyaW5nXSkpOwot
ICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShhYnNvbHV0ZVVSTC5n
ZXQoKSwgdGFyZ2V0KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUobmV3IExv
YWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRBY2NlcHRzRWRpdGluZyhib29sIG5ld0FjY2VwdHNFZGl0aW5nKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXggM2RjZWNmNzQzZGJlNDllYmVi
YzgwMDcwZDAxOTFjY2JhYjBjZjI4MS4uYWViYTFiZTE1ODMxZmE1NDg2NzhmNmI3ZDhjN2Y2NWEy
MDQ2ZGRmOCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3Bw
CkBAIC0xMTA3LDggKzExMDcsOCBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYg
aW5wdXRMaW5lKQogICAgIGlmICh3ZWJWaWV3ICYmIFNVQ0NFRURFRCh3ZWJWaWV3LT5iYWNrRm9y
d2FyZExpc3QoJmJmTGlzdCkpKQogICAgICAgICBiZkxpc3QtPmN1cnJlbnRJdGVtKCZwcmV2VGVz
dEJGSXRlbSk7CiAKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigpOwotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbihmYWxzZSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0
b24oKS0+Y2xlYXIoKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5zZXRGcm96ZW4oZmFs
c2UpOwogCiAgICAgTVNHIG1zZyA9IHsgMCB9OwogICAgIEhXTkQgaG9zdFdpbmRvdzsKQEAgLTEx
NDAsNyArMTE0MCw3IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExp
bmUpCiAgICAgfQogCiAgICAgLy8gRXZlbnRTZW5kaW5nQ29udHJvbGxlciBjbGVhclNhdmVkRXZl
bnRzCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xlYXIoKTsKKyAgICBXb3JrUXVldWU6OnNp
bmdsZXRvbigpLT5jbGVhcigpOwogCiAgICAgaWYgKDo6Z1Rlc3RSdW5uZXItPmNsb3NlUmVtYWlu
aW5nV2luZG93c1doZW5Db21wbGV0ZSgpKSB7CiAgICAgICAgIFZlY3RvcjxIV05EPiB3aW5kb3dz
ID0gb3BlbldpbmRvd3MoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9G
cmFtZUxvYWREZWxlZ2F0ZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2Fk
RGVsZWdhdGUuY3BwCmluZGV4IGFiYmE0Yzg3NDZlNjcyYjExODBkNmZlNDFmNjQ4NGIzZTY2NjM3
MTYuLmI1Y2Y4ODQwOTZjZTAyNTI1ZDI3ZDJjODdiOWU3NWMzYjY5YWI3NDEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcApAQCAtMTk3LDcgKzE5
Nyw3IEBAIHZvaWQgRnJhbWVMb2FkRGVsZWdhdGU6OnByb2Nlc3NXb3JrKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gaWYgd2UgZmluaXNoIGFsbCB0aGUgY29tbWFuZHMsIHdlJ3JlIHJlYWR5
IHRvIGR1bXAgc3RhdGUKLSAgICBpZiAoV29ya1F1ZXVlOjpzaGFyZWQoKS0+cHJvY2Vzc1dvcmso
KSAmJiAhOjpnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChXb3JrUXVldWU6OnNp
bmdsZXRvbigpLT5wcm9jZXNzV29yaygpICYmICE6OmdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkp
CiAgICAgICAgIGR1bXAoKTsKIH0KIApAQCAtMjM0LDEyICsyMzQsMTIgQEAgdm9pZCBGcmFtZUxv
YWREZWxlZ2F0ZTo6bG9jYXRpb25DaGFuZ2VEb25lKElXZWJFcnJvciosIElXZWJGcmFtZSogZnJh
bWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAgV29y
a1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xl
dG9uKCktPnNldEZyb3plbih0cnVlKTsKIAogICAgIGlmICg6OmdUZXN0UnVubmVyLT53YWl0VG9E
dW1wKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5j
b3VudCgpKSB7CisgICAgaWYgKFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPmNvdW50KCkpIHsKICAg
ICAgICAgaWYgKCFwcm9jZXNzV29ya1RpbWVySUQpCiAgICAgICAgICAgICBwcm9jZXNzV29ya1Rp
bWVySUQgPSA6OlNldFRpbWVyKDAsIDAsIDAsIHByb2Nlc3NXb3JrVGltZXIpOwogICAgICAgICBk
ZWxlZ2F0ZXNXaXRoRGVsYXllZFdvcmsoKS5hcHBlbmQodGhpcyk7CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKaW5kZXggZTQ0ZDUwOGE4NDgyMDZjZGRmZDM2ZjRj
YmY2YjBjNDVhM2MzNTNiOC4uMzViMGNiNTYwMTYxM2Y0OGU2ZDFhZWQwY2Q5N2ZlOTE1YzU2MDU5
NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcApAQCAtMjY1
LDcgKzI2NSw3IEBAIHNpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIHZv
aWQgVGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAgLy8gU2FtZSBhcyBvbiBtYWMuICBU
aGlzIGNhbiBiZSBzaGFyZWQuCi0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0Zy
YW1lICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgIGlmIChtX3dhaXRUb0R1
bXAgJiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+Y291bnQo
KSkKICAgICAgICAgZHVtcCgpOwogICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOwogfQpAQCAtMzE3
LDcgKzMxNyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwg
SlNTdHJpbmdSZWYgdGFyZ2V0KQogICAgIHdzdHJpbmcgd0Fic29sdXRlVVJMID0gcmVzcG9uc2VV
UkwgKyBURVhUKCIvIikgKyB3VVJMOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc0Fi
c29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKHdBYnNvbHV0ZVVS
TC5kYXRhKCksIHdBYnNvbHV0ZVVSTC5sZW5ndGgoKSkpOwogCi0gICAgV29ya1F1ZXVlOjpzaGFy
ZWQoKS0+cXVldWUobmV3IExvYWRJdGVtKGpzQWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwor
ICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRl
VVJMLmdldCgpLCB0YXJnZXQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRp
dGluZyhib29sIGFjY2VwdHNFZGl0aW5nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQppbmRleCA0NTMxOTk1YTliNDJkZmYx
ODIwZWI3OGFhYjBkMWU5YmY3ZWU4NWUzLi44ZmU1NjkzOWJjZDUxN2I5ZjI4NjFlMmI3ZDZiODYy
YmZiYWRiMWMyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXJzL2NwcF91bml0dGVzdC5weQpAQCAtNDA5MywxNCArNDA5MywxNCBAQCBjbGFzcyBXZWJL
aXRTdHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAnfVxuJywKICAgICAg
ICAgICAgICcnKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAg
ICAgICAnI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICghKGV4cHJlc3Np
b24pKSB7IFRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19M
SU5FX18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0gd2hpbGUgKDApXG4nLAorICAgICAgICAg
ICAgJyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoIShleHByZXNzaW9u
KSkgeyBUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9f
TElORV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKICAgICAgICAg
ICAgICcnKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICggIShleHByZXNzaW9u
KSkgeyBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9fTElO
RV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKKyAgICAgICAgICAg
ICcjZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCAhKGV4cHJlc3Npb24p
KSB7IFRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19M
SU5FX18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0gd2hpbGUgKDApXG4nLAogICAgICAgICAg
ICAgJ0V4dHJhIHNwYWNlIGFmdGVyICggaW4gaWYgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykK
ICAgICAgICAgIyBGSVhNRTogY3VycmVudGx5IHdlIG9ubHkgY2hlY2sgZmlyc3QgY29uZGl0aW9u
YWwsIHNvIHdlIGNhbm5vdCBkZXRlY3QgZXJyb3JzIGluIG5leHQgb25lcy4KICAgICAgICAgIyBz
ZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICMgICAgICcjZGVmaW5lIFRFU1Rf
QVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCEoZXhwcmVzc2lvbikpIHsgVGVzdHNDb250cm9s
bGVyOjpzaGFyZWQoKS50ZXN0RmFpbGVkKF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24p
OyByZXR1cm47IH0gfSB3aGlsZSAoMCApXG4nLAorICAgICAgICAjICAgICAnI2RlZmluZSBURVNU
X0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICghKGV4cHJlc3Npb24pKSB7IFRlc3RzQ29udHJv
bGxlcjo6c2luZ2xldG9uKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICNleHByZXNz
aW9uKTsgcmV0dXJuOyB9IH0gd2hpbGUgKDAgKVxuJywKICAgICAgICAgIyAgICAgJ01pc21hdGNo
aW5nIHNwYWNlcyBpbnNpZGUgKCkgaW4gaWYgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKICAg
ICAgICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAogICAgICAgICAgICAgJ1dURl9NQUtF
X05PTkNPUFlBQkxFKENsYXNzTmFtZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEO1xuJywKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcAppbmRl
eCA3MmVmZWYxYWM4NmFhNDRmOWYyMTczMjc2OGViMDM4NmIwYjEyYjdhLi41M2YzOWE4NzQzYzM0
MzU4OGZkYWUxMWYwOWU0NTBjM2RmMWMyODkxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVz
cGFjZSBUZXN0V2ViS2l0QVBJIHsKIAotSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyJiBJbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpCitJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIElu
amVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyJiBzaGFyZWQgPSAqbmV3IEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjsKICAgICByZXR1cm4gc2hhcmVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9J
bmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRC
dW5kbGVDb250cm9sbGVyLmgKaW5kZXggNjFhMDk2YzYwM2NiNjhkODA2M2Y3NThjMzhhYTdkOWIx
MzQ2NjU5NC4uZWFhN2YwZDE3OGQ0MzY4MzY2ZjVkMjZlMWU5MTZiYWI1ZTgzZWYxMyAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5oCkBAIC0zNiw3
ICszNiw3IEBAIGNsYXNzIEluamVjdGVkQnVuZGxlVGVzdDsKIAogY2xhc3MgSW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9s
bGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyJiBzaW5n
bGV0b24oKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1haW4uY3Bw
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCmluZGV4IDY4NDAy
Y2EyYTE0NzRkMGM5M2Y5MmUwNjgxYjUwZjgwOWRjMTk1MzcuLmIyNTM3ZjczN2Q1MWU4OWVlNGIx
YjU1YWM1ZDVkMTVmNDBkZGQ4Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5q
ZWN0ZWRCdW5kbGVNYWluLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVu
ZGxlTWFpbi5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiB2b2lkIFdL
QnVuZGxlSW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXph
dGlvblVzZXJEYXRhKQogewotICAgIFRlc3RXZWJLaXRBUEk6OkluamVjdGVkQnVuZGxlQ29udHJv
bGxlcjo6c2hhcmVkKCkuaW5pdGlhbGl6ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEp
OworICAgIFRlc3RXZWJLaXRBUEk6OkluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9u
KCkuaW5pdGlhbGl6ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOwogfQogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0Lmgg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5oCmluZGV4IGQwZjk5NmFm
ZmU5MWU3NWYxODcwZDEwNTA1M2FiOTU5Y2UwMjgzNDMuLmFkMmNiOTU4MTE1ZjlkMGM1OThhY2Qy
YThiM2Y5Y2VjNTEzYzAwZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0
ZWRCdW5kbGVUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRl
c3QuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBSZWdp
c3Rlcihjb25zdCBzdGQ6OnN0cmluZyYgdGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5yZWdpc3RlckNyZWF0ZUluamVjdGVkQnVu
ZGxlVGVzdEZ1bmN0aW9uKHRlc3QsIFJlZ2lzdGVyOjpjcmVhdGUpOworICAgICAgICAgICAgSW5q
ZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZWdpc3RlckNyZWF0ZUluamVjdGVk
QnVuZGxlVGVzdEZ1bmN0aW9uKHRlc3QsIFJlZ2lzdGVyOjpjcmVhdGUpOwogICAgICAgICB9CiAK
ICAgICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwCmlu
ZGV4IGM5NWI0NjkyNDkzNjU5MWRlYTI0NWFhZDg5ZTJlYjQyOWFkMjlmNjguLjVkY2Q5MWRhODRh
YmM1MDEyZGNlZTE5NmJhNDYyMDdmZTYzNmM2ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNv
bnRyb2xzX0J1bmRsZS5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIHZvaWQgZGlkQXNzb2Np
YXRlRm9ybUNvbnRyb2xzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0FycmF5UmVmIGVsZW1lbnRI
YW4KICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbnVtYmVyT2ZFbGVtZW50cyA9IGFkb3B0
V0soV0tVSW50NjRDcmVhdGUoV0tBcnJheUdldFNpemUoZWxlbWVudEhhbmRsZXMpKSk7CiAgICAg
V0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgVXRpbDo6dG9XSygiTnVtYmVy
T2ZDb250cm9scyIpLmdldCgpLCBudW1iZXJPZkVsZW1lbnRzLmdldCgpKTsKIAotICAgIFdLQnVu
ZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUo
KSwgVXRpbDo6dG9XSygiRGlkUmVjZWl2ZURpZEFzc29jaWF0ZUZvcm1Db250cm9scyIpLmdldCgp
LCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNl
aXZlRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
IH0KIAogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdDo6RGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzVGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9IaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5k
bGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0hpdFRlc3RSZXN1bHRO
b2RlSGFuZGxlX0J1bmRsZS5jcHAKaW5kZXggZmI5NGJmODJlOWQxYmE0NGM5YzIyNWMzNDgyMzY3
YTZkZTBhNzVlNS4uZDY4ZmYyMTkzZDc4YTM3YjVlMmRkNzI4YzM1OTg1YmJmYzQ3YTA3MSAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0hpdFRlc3RSZXN1bHRO
b2RlSGFuZGxlX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyL0hpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAg
cHVibGljOgogICAgICAgICBpZiAoIW5vZGVIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIAotICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJv
bGxlcjo6c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFu
ZGxlVGVzdERvbmVNZXNzYWdlTmFtZSIpLmdldCgpLCBVdGlsOjp0b1dLKCJIaXRUZXN0UmVzdWx0
Tm9kZUhhbmRsZVRlc3REb25lTWVzc2FnZUJvZHkiKS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgVXRpbDo6dG9XSygiSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVUZXN0RG9uZU1lc3NhZ2VOYW1l
IikuZ2V0KCksIFV0aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFuZGxlVGVzdERvbmVNZXNz
YWdlQm9keSIpLmdldCgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlUGFn
ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1Bhc3RlYm9hcmROb3RpZmljYXRpb25z
X0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvUGFzdGVib2Fy
ZE5vdGlmaWNhdGlvbnNfQnVuZGxlLmNwcAppbmRleCBjOTg1NTIwNDE5ZWNkYzM3MDEwMGJmOTdh
MmRlN2Q2Yzc0MWViYjYwLi44YzE0MDRlN2E3OTFkZWZlOWUwMjcxMWJkNzNhOTNlNDE4NDZmZjBi
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvUGFzdGVib2Fy
ZE5vdGlmaWNhdGlvbnNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvUGFzdGVib2FyZE5vdGlmaWNhdGlvbnNfQnVuZGxlLmNwcApAQCAtNDksNyArNDks
NyBAQCBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxQYXN0ZWJvYXJkTm90aWZp
Y2F0aW9uc1Rlc3Q+IHJlZ2lzdHJhcigiUGFzdAogc3RhdGljIHZvaWQgd2lsbFdyaXRlVG9QYXN0
ZWJvYXJkKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdl
LCAgY29uc3Qgdm9pZCopCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGls
Ojp0b1dLKCJQYXN0ZWJvYXJkTm90aWZpY2F0aW9uVGVzdERvbmVNZXNzYWdlTmFtZSIpLmdldCgp
LCBVdGlsOjp0b1dLKCJ3aWxsV3JpdGV0b1Bhc3RlYm9hcmRGYWlsIikuZ2V0KCkpOworICAgICAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0RG9uZU1l
c3NhZ2VOYW1lIikuZ2V0KCksIFV0aWw6OnRvV0soIndpbGxXcml0ZXRvUGFzdGVib2FyZEZhaWwi
KS5nZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlLCBXS0FycmF5UmVmKiBw
YXN0ZWJvYXJkVHlwZXMsIFdLQXJyYXlSZWYqIHBhc3RlYm9hcmREYXRhLCBjb25zdCB2b2lkKikK
QEAgLTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShX
S0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmEKIAogc3RhdGljIHZvaWQg
ZGlkV3JpdGVUb1Bhc3RlYm9hcmQoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKikKIHsKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCku
YnVuZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0RG9uZU1lc3Nh
Z2VOYW1lIikuZ2V0KCksIFV0aWw6OnRvV0soImRpZFdyaXRlVG9QYXN0ZWJvYXJkIikuZ2V0KCkp
OworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiUGFzdGVib2FyZE5vdGlmaWNhdGlvblRlc3RE
b25lTWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygiZGlkV3JpdGVUb1Bhc3RlYm9hcmQi
KS5nZXQoKSk7CiB9CiAKIFBhc3RlYm9hcmROb3RpZmljYXRpb25zVGVzdDo6UGFzdGVib2FyZE5v
dGlmaWNhdGlvbnNUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxMb2FkX0J1bmRsZS5jcHAg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcApp
bmRleCAyY2IwNjg2YmE5NjhkNGQ0N2E4ODA1OGQyYjMwOTI3NDFmYWFlNjczLi4wOTFlNWE5NDJh
MWU4OTFmZGE3YzE4MzZiZGJiMmVlOGFkYTYwNGI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcApAQCAtNTAsNyArNTAs
NyBAQCBwcml2YXRlOgogICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBVdGlsOjp0b1dLKCJVUkxSZXF1ZXN0UmV0dXJuIikuZ2V0KCksIHJlcXVlc3QpOwogICAg
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dLKCJV
c2VyRGF0YVJldHVybiIpLmdldCgpLCB1c2VyRGF0YSk7CiAKLSAgICAgICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGls
Ojp0b1dLKCJXaWxsTG9hZFVSTFJlcXVlc3RSZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6c2luZ2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIldpbGxMb2FkVVJMUmVxdWVzdFJl
dHVybiIpLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZv
aWQgd2lsbExvYWREYXRhUmVxdWVzdChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tVUkxSZXF1ZXN0
UmVmIHJlcXVlc3QsIFdLRGF0YVJlZiBkYXRhLCBXS1N0cmluZ1JlZiBNSU1FVHlwZSwgV0tTdHJp
bmdSZWYgZW5jb2RpbmdOYW1lLCBXS1VSTFJlZiB1bnJlYWNoYWJsZVVSTCwgV0tUeXBlUmVmIHVz
ZXJEYXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQpAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRl
OgogICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0
b1dLKCJVbnJlYWNoYWJsZVVSTFJldHVybiIpLmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7CiAgICAg
ICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIFV0aWw6OnRvV0soIlVz
ZXJEYXRhUmV0dXJuIikuZ2V0KCksIHVzZXJEYXRhKTsKIAotICAgICAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6
OnRvV0soIldpbGxMb2FkRGF0YVJlcXVlc3RSZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0
KCkpOworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6c2luZ2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIldpbGxMb2FkRGF0YVJlcXVlc3RS
ZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAgfQogCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRFdmVudF9C
dW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxTZW5kU3Vi
bWl0RXZlbnRfQnVuZGxlLmNwcAppbmRleCBmYzdjYThhY2U4YTMzOTJlNWJjNjY0MmE4OWY2ODNk
ZmQ4YTMxZjZlLi5mYTdkMmE5YTdmODA4NGRmYWVkYTE4Y2I4MDY1YmZmMDZiODcyYmIyIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRF
dmVudF9CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9X
aWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIElu
amVjdGVkQnVuZGxlVGVzdDo6UmVnaXN0ZXI8V2lsbFNlbmRTdWJtaXRFdmVudFRlc3Q+IHJlZ2lz
dHJhcigiV2lsbFNlbmQKIAogc3RhdGljIHZvaWQgd2lsbFNlbmRTdWJtaXRFdmVudChXS0J1bmRs
ZVBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgV0tCdW5k
bGVGcmFtZVJlZiwgV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgY29uc3Qgdm9pZCopCiB7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNlaXZlV2lsbFNlbmRTdWJtaXRFdmVudCIpLmdldCgp
LCB2YWx1ZXMpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiRGlkUmVjZWl2ZVdpbGxTZW5k
U3VibWl0RXZlbnQiKS5nZXQoKSwgdmFsdWVzKTsKIH0KIAogV2lsbFNlbmRTdWJtaXRFdmVudFRl
c3Q6OldpbGxTZW5kU3VibWl0RXZlbnRUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVy
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3BwCmluZGV4IDViYmJlZWVjMmE1
Y2Q0ODNkZjczOTY3N2Q4YTc0YTY3ZTM3OGJhNDMuLjkxMzMwNWQ3YmVmMDg4YTE5OGQxNmRhYTFj
OTZjNjVhMjM0MzEyNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250
cm9sbGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxlci5jcHAK
QEAgLTU0LDcgKzU0LDcgQEAgY2xhc3MgUHJpbnRlciA6IHB1YmxpYyA6OnRlc3Rpbmc6OkVtcHR5
VGVzdEV2ZW50TGlzdGVuZXIgewogICAgIHN0ZDo6c3RyaW5nIGZhaWx1cmVzOwogfTsKIAotVGVz
dHNDb250cm9sbGVyJiBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpCitUZXN0c0NvbnRyb2xsZXIm
IFRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8VGVzdHNDb250cm9sbGVyPiBzaGFyZWQ7CiAgICAgcmV0dXJuIHNoYXJlZDsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmggYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzQ29udHJvbGxlci5oCmluZGV4IGY1NWFlYWFmM2JiNmM3MjdkMDNlYzcwYWFk
NWJiNzgxNDFiNzdiNzkuLmVhODQ5Njg1M2I5ZDU0M2NlOWZkMjYxMjJlY2E5OTE0OGI1NjliOTYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmgKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuaApAQCAtMzIsNyArMzIsNyBAQCBu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIGNsYXNzIFRlc3RzQ29udHJvbGxlciB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFRlc3RzQ29udHJvbGxlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFRl
c3RzQ29udHJvbGxlciYgc2luZ2xldG9uKCk7CiAKICAgICBib29sIHJ1bihpbnQgYXJnYywgY2hh
cioqIGFyZ3YpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCmluZGV4IGZjMjliMWUwZTM5YmY5
M2JhMmVmMDU0ZGI3ODUxZDIzYTMyNmMxNjEuLjkwMDJiYzdiNWY4MTFlNDQyMTI3ZDgyZGJkMGU4
MjY3MDdhODIxNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3Bw
CisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCkBAIC01Niw3ICs1Niw3IEBA
IGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAogICAgIHVzZVgxMVdpbmRvdyA9IGNo
ZWNrRm9yVXNlWDExV2luZG93QXJndW1lbnQoYXJnYywgYXJndik7CiAKLSAgICBpbnQgcmV0dXJu
Q29kZSA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkucnVuKGFyZ2Ms
IGFyZ3YpID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOworICAgIGludCByZXR1cm5Db2Rl
ID0gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywg
YXJndikgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7CiAKICAgICBld2tfc2h1dGRvd24o
KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvbWFpbi5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcAppbmRleCAxYjdmZWY2NGZkMDQyMGI5ODZlZWVj
OGZhOGFmMjdjZjk1ZmViNWU0Li4yYzY4NTY1OTVhZTMyN2M5OGFlMDAyZTIzNTY1ZGU2YTAzYTc5
NGFkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcApAQCAtMzIsNSArMzIsNSBAQCBpbnQgbWFp
bihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsK
IAotICAgIHJldHVybiBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1
bihhcmdjLCBhcmd2KSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKKyAgICByZXR1cm4g
VGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJn
dikgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2lvcy9tYWluSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvbWFp
bklPUy5tbQppbmRleCBlYjFjZGY0ZTNkODI1OGQ3ZTczMGEwYmE2Y2NmNGNkMDg4YzBiZTUzLi5m
YTJiZTJlYWMyNWNhNDViYjE0MWYyNjA5OGM1ZjYyZjlkYTI2NDgwIDEwMDY0NAotLS0gYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL2lvcy9tYWluSU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
aW9zL21haW5JT1MubW0KQEAgLTMxLDcgKzMxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9v
bCBhbGxvY10gaW5pdF07CiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1
bHRzXSByZW1vdmVQZXJzaXN0ZW50RG9tYWluRm9yTmFtZTpAIlRlc3RXZWJLaXRBUEkiXTsKLSAg
ICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCku
cnVuKGFyZ2MsIGFyZ3YpOworICAgIGJvb2wgcGFzc2VkID0gVGVzdFdlYktpdEFQSTo6VGVzdHND
b250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJndik7CiAKICAgICBbcG9vbCBkcmFp
bl07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL21hYy9tYWluTWFjLm1tCmluZGV4IDA5ODA0Y2U4MDQ3YjZmOWVm
ZjQ1M2I3NWFjN2RlY2U0NjY3OWQ0ODEuLjBmMGZmOGRlN2UwYWRhZTNhMGRiZWY3YmMwNWY1NjY0
M2UyZTI1ZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0K
KysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvbWFpbk1hYy5tbQpAQCAtMzMsNyArMzMsNyBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBz
dGFuZGFyZFVzZXJEZWZhdWx0c10gcmVtb3ZlUGVyc2lzdGVudERvbWFpbkZvck5hbWU6QCJUZXN0
V2ViS2l0QVBJIl07CiAgICAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwogCi0g
ICAgYm9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgp
LnJ1bihhcmdjLCBhcmd2KTsKKyAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3Rz
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2MsIGFyZ3YpOwogCiAgICAgW3Bvb2wgZHJh
aW5dOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9tYWluLmNwcCBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCmluZGV4IGQ5NDk5YzUyNGMzM2RhNmY4NjVm
MjUxOGRkYjdmZDMwNTMzYTY2NDkuLjcwYjZhMDk4NzljYzhjYTU1ZmQ2MDYzMDlhOTM0OTRjNjM4
YTRhODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCkBAIC01MCw3ICs1MCw3IEBAIGludCBt
YWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbGlu
ZSBvbmNlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzMyODY3PiBpcyBmaXhlZC4KICAgICA6Ok9sZUlu
aXRpYWxpemUoMCk7CiAKLSAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29u
dHJvbGxlcjo6c2hhcmVkKCkucnVuKGFyZ2MsIGFyZ3YpOworICAgIGJvb2wgcGFzc2VkID0gVGVz
dFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJndik7
CiAKICAgICByZXR1cm4gcGFzc2VkID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOwogfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAzNDhkNjkxNzJmNTIxMDUzMGZj
MTVmYjIwZDFhYmZmNjA0NDEwMmNiLi44YjIyM2ZlNGM5OTBiMzMxZTgyZGIzNGNkOGJkNThhMTI5
NWY1MmJiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtNzQsNyArNzQs
NyBAQCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2liaWxpdHlF
bmFibGVkKCkKICNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oRUZMKQogUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVs
ZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIHZvaWQqIHJvb3QgPSBX
S0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpOwogICAgIAogICAgIHJldHVybiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KHJv
b3QpKTsgICAgCkBAIC04Miw3ICs4Miw3IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKIAogUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNl
ZEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIHZvaWQqIHJvb3Qg
PSBXS0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KHBhZ2UpOwogICAgIAogICAgIHJldHVybiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1l
bnQ+KHJvb3QpKTsgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAppbmRleCA5MGQ0
ZjE1MzljMmZiZWRmMTkxOGQ4YzYwZTIyN2ZiZmM3NjhiOGI2Li5mMDFhNzgwYjc5ZGRkMjk4MDNi
M2YyNGExYjU4ZDcxYzhmMzBlMmQ3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAK
QEAgLTIwOCw3ICsyMDgsNyBAQCBzdGF0aWMgV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBjcmVhdGVN
b3VzZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0bwogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRG93bihpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlm
aWVyQXJyYXkpIAogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUp
OwogICAgIFdLRXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNv
bnRleHQsIG1vZGlmaWVyQXJyYXkpOwpAQCAtMjE2LDEyICsyMTYsMTIgQEAgdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZURvd24oaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmll
ckFycmF5KQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIp
KTsKICAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5KEFkb3B0V0ssIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0
b24sIG1vZGlmaWVycykpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VVcChpbnQgYnV0
dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChmcmFtZSk7CiAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBw
YXJzZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7CkBAIC0yMjksNyArMjI5
LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpT
VmFsdWVSZWYgbW9kaWZpZXJBcnJheSkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiRXZlbnRTZW5kZXIiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJl
Zj4gRXZlbnRTZW5kZXJNZXNzYWdlQm9keShBZG9wdFdLLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5
KE1vdXNlVXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJv
bm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1l
c3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpt
b3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCkBAIC0yNDksNyArMjQ5LDcgQEAgdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjptb3VzZU1vdmVUbyhpbnQgeCwgaW50IHkpCiAgICAgV0tSZXRhaW5Q
dHI8V0tEb3VibGVSZWY+IHlSZWYoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoeSkpOwogICAgIFdL
RGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQo
KSwgeVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdl
dCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQg
bWlsbGlzZWNvbmRzKQpAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKICAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gdGltZVJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShtaWxsaXNlY29uZHMpKTsK
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHRp
bWVLZXkuZ2V0KCksIHRpbWVSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2No
ZWR1bGVBc3luY2hyb25vdXNDbGljaygpCkBAIC0yNzcsMTEgKzI3NywxMSBAQCB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soKQogCiAgICAgLy8g
QXN5bmNocm9ub3VzIG1vdXNlIGRvd24uCiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlv
bmFyeVJlZj4gbW91c2VEb3duTWVzc2FnZUJvZHkoQWRvcHRXSywgY3JlYXRlTW91c2VNZXNzYWdl
Qm9keShNb3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIG1vdXNlRG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAg
Ly8gQXN5bmNocm9ub3VzIG1vdXNlIHVwLgogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IG1vdXNlVXBNZXNzYWdlQm9keShBZG9wdFdLLCBjcmVhdGVNb3VzZU1lc3NhZ2VC
b2R5KE1vdXNlVXAsIGJ1dHRvbiwgbW9kaWZpZXJzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIG1vdXNlVXBNZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBX
S1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBjcmVhdGVLZXlEb3duTWVzc2FnZUJv
ZHkoSlNTdHJpbmdSZWYga2V5LCBXS0V2ZW50TW9kaWZpZXJzIG1vZGlmaWVycywgaW50IGxvY2F0
aW9uKQpAQCAtMzA4LDcgKzMwOCw3IEBAIHN0YXRpYyBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoSlNTdHJpbmdSZWYKIAogdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjprZXlEb3duKEpTU3RyaW5nUmVmIGtleSwgSlNWYWx1ZVJl
ZiBtb2RpZmllckFycmF5LCBpbnQgbG9jYXRpb24pCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChmcmFtZSk7CiAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMgPSBw
YXJzZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7CkBAIC0zMTYsNyArMzE2
LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjprZXlEb3duKEpTU3RyaW5nUmVmIGtl
eSwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5LAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJFdmVudFNlbmRlciIpKTsKICAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9u
YXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHkoa2V5
LCBtb2RpZmllcnMsIGxvY2F0aW9uKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJv
bm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KQpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKEpTU3RyaW5n
UmVmIGtleSkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIi
KSk7CiAgICAgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3Nh
Z2VCb2R5ID0gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgMCAvKiBtb2RpZmllcnMgKi8s
IDAgLyogbG9jYXRpb24gKi8pOwogCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIGtl
eURvd25NZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCkBAIC0zNDQsNyArMzQ0LDcgQEAg
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSkK
ICAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZihBZG9wdFdLLCBXS0RvdWJsZUNyZWF0
ZSh5KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5Lmdl
dCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50IHksIEpTU3Ry
aW5nUmVmIHBoYXNlU3RyLCBKU1N0cmluZ1JlZiBtb21lbnR1bVN0ciwgYm9vbCBhc3luY1Njcm9s
bGluZykKQEAgLTM5Nyw5ICszOTcsOSBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcyhpbnQgeCwgaW50CiAgICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBtb21lbnR1bUtl
eS5nZXQoKSwgbW9tZW50dW1SZWYuZ2V0KCkpOwogCiAgICAgaWYgKGFzeW5jU2Nyb2xsaW5nKQot
ICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpKTsKICAgICBlbHNlCi0gICAgICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OworICAgICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHksIGJvb2wgcGFnZWQp
CkBAIC00MjMsMTIgKzQyMywxMiBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRp
bnVvdXNNb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKICAgICBXS1JldGFp
blB0cjxXS1VJbnQ2NFJlZj4gcGFnZWRSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUocGFnZWQp
KTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IHBhZ2VkS2V5LmdldCgpLCBwYWdlZFJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNl
bmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsK
KyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogSlNWYWx1ZVJlZiBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBh
Z2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KG1haW5GcmFtZSk7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCkBAIC00NTcs
NDMgKzQ1Nyw0MyBAQCBKU1ZhbHVlUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRleHRD
bGljaygpCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRleHRab29tSW4oKQogewogICAg
IC8vIEVuc3VyZSBwYWdlIHpvb20gaXMgcmVzZXQuCi0gICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpv
b21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAg
ICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIDEpOwogCi0gICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRs
ZVBhZ2VHZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCkpOwotICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAqIFpvb21NdWx0aXBsaWVyUmF0
aW8pOworICAgIGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0VGV4dFpvb21GYWN0
b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1
bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgKiBab29tTXVsdGlwbGllclJhdGlvKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0ZXh0Wm9vbU91dCgpCiB7CiAgICAgLy8gRW5zdXJl
IHBhZ2Ugem9vbSBpcyByZXNldC4KLSAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIDEpOworICAgIFdLQnVuZGxl
UGFnZVNldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSwgMSk7CiAKLSAgICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFRl
eHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0g
ICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFjdG9yIC8gWm9vbU11bHRpcGxpZXJSYXRpbyk7CisgICAg
ZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBhZ2VHZXRUZXh0Wm9vbUZhY3RvcihJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlUGFnZVNl
dFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSwgem9vbUZhY3RvciAvIFpvb21NdWx0aXBsaWVyUmF0aW8pOwogfQogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Onpvb21QYWdlSW4oKQogewogICAgIC8vIEVuc3VyZSB0ZXh0IHpvb20g
aXMgcmVzZXQuCi0gICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0
Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIDEp
OwogCi0gICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBhZ2VHZXRQYWdlWm9vbUZhY3Rv
cihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwotICAgIFdLQnVuZGxl
UGFnZVNldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSwgem9vbUZhY3RvciAqIFpvb21NdWx0aXBsaWVyUmF0aW8pOworICAgIGRvdWJsZSB6b29t
RmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZh
Y3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0
b3IgKiBab29tTXVsdGlwbGllclJhdGlvKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjp6b29tUGFnZU91dCgpCiB7CiAgICAgLy8gRW5zdXJlIHRleHQgem9vbSBpcyByZXNldC4K
LSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCksIDEpOworICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9y
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgMSk7CiAKLSAgICBk
b3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tCdW5kbGVQYWdlU2V0UGFn
ZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB6b29t
RmFjdG9yIC8gWm9vbU11bHRpcGxpZXJSYXRpbyk7CisgICAgZG91YmxlIHpvb21GYWN0b3IgPSBX
S0J1bmRsZVBhZ2VHZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlUGFnZVNldFBhZ2Vab29tRmFjdG9yKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAvIFpvb21N
dWx0aXBsaWVyUmF0aW8pOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjYWxl
UGFnZUJ5KGRvdWJsZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KQogewogICAgIFdLUG9pbnQg
b3JpZ2luID0geyB4LCB5IH07Ci0gICAgV0tCdW5kbGVQYWdlU2V0U2NhbGVBdE9yaWdpbihJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHNjYWxlLCBvcmlnaW4pOworICAg
IFdLQnVuZGxlUGFnZVNldFNjYWxlQXRPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBzY2FsZSwgb3JpZ2luKTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjph
ZGRUb3VjaFBvaW50KGludCB4LCBpbnQgeSkKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
eVJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZSh5KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRl
bShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsK
IAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQg
eCwgaW50IHkpCkBAIC01MzgsNyArNTM4LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
Ojp1cGRhdGVUb3VjaFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogICAgIFdLUmV0YWlu
UHRyPFdLVUludDY0UmVmPiB5UmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKHkpKTsKICAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0
KCksIHlSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmll
cihjb25zdCBKU1N0cmluZ1JlZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQpAQCAtNTY4LDcgKzU2
OCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25z
dCBKU1N0cmluZ1JlZiAmbW9kaWZpZXIsIGJvb2wKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gZW5hYmxlUmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVuYWJsZSkpOwogICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlS2V5Lmdl
dCgpLCBlbmFibGVSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CiB9CiAKIApAQCAtNTg5LDcgKzU4OSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kp
CiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVh
dGUocmFkaXVzWSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RT
eW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNl
bmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9s
bGVyOjp0b3VjaFN0YXJ0KCkKQEAgLTYwMSw3ICs2MDEsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OnRvdWNoU3RhcnQoKQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hT
dGFydCIpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKIAotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50
U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoTW92ZSgpCkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaE1vdmUoKQogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVG91Y2hNb3ZlIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAK
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hFbmQoKQpAQCAtNjI1LDcgKzYyNSw3
IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hFbmQoKQogICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiVG91Y2hFbmQiKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdl
TmFtZS5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5j
aHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAw
KTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaENhbmNlbCgpCkBAIC02
MzcsNyArNjM3LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaENhbmNlbCgp
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaENhbmNlbCIpKTsKICAgICBXS0RpY3Rp
b25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXku
Z2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9u
b3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNs
ZWFyVG91Y2hQb2ludHMoKQpAQCAtNjQ5LDcgKzY0OSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29u
dHJvbGxlcjo6Y2xlYXJUb3VjaFBvaW50cygpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHN1Yk1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJD
bGVhclRvdWNoUG9pbnRzIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAK
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4
KQpAQCAtNjY1LDcgKzY2NSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6cmVsZWFz
ZVRvdWNoUG9pbnQoaW50IGluZGV4KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRl
eFJlZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwogICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4
UmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNo
cm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbmNlbFRvdWNoUG9pbnQoaW50
IGluZGV4KQpAQCAtNjgxLDcgKzY4MSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+
IGluZGV4UmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGluZGV4KSk7CiAgICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwg
aW5kZXhSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDE4M2ZmNWVkMDNhOTA2ZDQ3NzU0
ZTZjMjgzZDYxZDJiNjgwNGFmMTEuLmZkMGNjM2E3OGFhNDljOGE2ZmY0ODVmNmE5OTAzNmYwMmYy
ZjJjOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
R0NDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0dDQ29udHJvbGxlci5jcHAKQEAgLTUyLDE3ICs1MiwxNyBAQCBKU0NsYXNzUmVmIEdDQ29u
dHJvbGxlcjo6d3JhcHBlckNsYXNzKCkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3QoKQog
ewotICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyhJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkpOworICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZh
U2NyaXB0T2JqZWN0cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQog
CiB2b2lkIEdDQ29udHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVu
dGlsRG9uZSkKIHsKLSAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNP
bkFsdGVybmF0ZVRocmVhZEZvckRlYnVnZ2luZyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIHdhaXRVbnRpbERvbmUpOworICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2Ny
aXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgd2FpdFVudGlsRG9uZSk7CiB9CiAKIHNpemVfdCBHQ0NvbnRy
b2xsZXI6OmdldEpTT2JqZWN0Q291bnQoKQogewotICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFT
Y3JpcHRPYmplY3RzQ291bnQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKKyAg
ICByZXR1cm4gV0tCdW5kbGVHZXRKYXZhU2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcAppbmRleCBkMjZlZDk0YmYwMTVjZTMxM2Y4NWI2M2ExNmIxODg0ZTc0ZTE3YTY1Li40
NGVhMzkxNTBjYmQ4MmEyNTcwM2MzNmNmYjkwMjgxM2QyZmM3N2UyIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cApAQCAtNDEsNyArNDEsNyBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSW5qZWN0ZWRCdW5kbGUm
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKQorSW5qZWN0ZWRCdW5kbGUmIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZSYgc2hhcmVkID0gKm5l
dyBJbmplY3RlZEJ1bmRsZTsKICAgICByZXR1cm4gc2hhcmVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCmluZGV4IDhm
MGE4NDA0ODA5NTg4YTlmM2I0ZDA4MmZiOTczOWIyZWU1Yzc5M2QuLjYwMzU0MzRjOWI0MzJjYTEy
OTEyMzg5ZWUxMWZmZjVmMjUyZTQxYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAg
Y2xhc3MgSW5qZWN0ZWRCdW5kbGVQYWdlOwogCiBjbGFzcyBJbmplY3RlZEJ1bmRsZSB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIEluamVjdGVkQnVuZGxlJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgSW5q
ZWN0ZWRCdW5kbGUmIHNpbmdsZXRvbigpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgSW5qZWN0
ZWRCdW5kbGUuCiAgICAgdm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUmVmLCBXS1R5cGVSZWYgaW5p
dGlhbGl6YXRpb25Vc2VyRGF0YSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlTWFpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlTWFpbi5jcHAKaW5kZXggOWM0YjAz
ZWNlNmJjNTBhM2VmNjE2NTYxNzQ4MzM1ODk0NjczNDIyZi4uNGYxMjcyMjE0NzhmZDA1NDdjZDc1
ZDgyZDZkMGE4MTI4YWYwNGE2OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcApAQCAtMzEsNSAr
MzEsNSBAQAogZXh0ZXJuICJDIgogdm9pZCBXS0J1bmRsZUluaXRpYWxpemUoV0tCdW5kbGVSZWYg
YnVuZGxlLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKLSAgICBXVFI6Oklu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pbml0aWFsaXplKGJ1bmRsZSwgaW5pdGlhbGl6YXRpb25V
c2VyRGF0YSk7CisgICAgV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6
ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2Uu
Y3BwCmluZGV4IDA4ZjgxMTU5ZTQ3YjdhMGFjZjM5MWMyNmU1OTgyMDVkZTUwZDQ1NTAuLjNiYTI4
YTY4OWMzNzcxZTY1MGVkOTEwN2IwNjkzMTdjMGQzZDVhNTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFn
ZS5jcHAKQEAgLTI0MCw3ICsyNDAsNyBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhT
dWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWlzTG9jYWxG
aWxlU2NoZW1lKHNjaGVtZVN0cmluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmlu
ZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyhmaWxlVXJsKSkpOwogCi0gICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpOwogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwg
PSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgIGlmICghbWFp
bkZyYW1lVVJMKQogICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVD
b3B5UHJvdmlzaW9uYWxVUkwobWFpbkZyYW1lKSk7CkBAIC00NjMsNyArNDYzLDcgQEAgc3RhdGlj
IHZvaWQgZHVtcExvYWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBl
dmVudE5hbWUpCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSAiKTsKICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChldmVudE5hbWUpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lk
IGR1bXBSZXF1ZXN0RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0
UmVmIHJlcXVlc3QsIFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCkBAIC02NTIsMzIgKzY1
MiwzMiBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2FjaGVSZXNwb25zZShXS0J1
bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+dGVzdFVSTCgpKSB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT50ZXN0VVJMKCkpIHsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IHRlc3RVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9uYWxVUkwoZnJh
bWUpKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2V0
VGVzdFVSTCh0ZXN0VVJMLmdldCgpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+c2V0VGVzdFVSTCh0ZXN0VVJMLmdldCgpKTsKICAgICB9CiAKICAg
ICBwbGF0Zm9ybURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoZnJhbWUpOwogCi0gICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFt
ZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICBkdW1w
TG9hZEV2ZW50KGZyYW1lLCAiZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSIpOwogCi0g
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudG9wTG9hZGluZ0ZyYW1lKCkpCi0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRUb3BMb2FkaW5nRnJhbWUoZnJhbWUpOwor
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRvcExvYWRpbmdGcmFtZSgpKQor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0VG9wTG9hZGluZ0ZyYW1lKGZy
YW1lKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZFN0b3BQcm92aXNpb25hbEZyYW1lTG9h
ZHMoKSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgInN0b3BwaW5nIGxvYWQgaW4gZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZSBjYWxsYmFjayIpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIik7CkBAIC02ODUsMTAgKzY4NSwxMCBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxM
b2FkRm9yRnJhbWUoV0tCdQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLRXJy
b3JSZWYpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmlu
ZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9h
ZENhbGxiYWNrcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmFpbFByb3Zp
c2lvbmFsTG9hZFdpdGhFcnJvciIpOwogCiAgICAgZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihmcmFt
ZSk7CkBAIC02OTYsMTAgKzY5NiwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFp
bFByb3Zpc2lvbmFsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ29tbWl0TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGR1bXBMb2FkRXZlbnQo
ZnJhbWUsICJkaWRDb21taXRMb2FkRm9yRnJhbWUiKTsKQEAgLTcwNywxMyArNzA3LDEzIEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDb21taXRMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaFByb2dyZXNz
KCkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkp
CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBQcm9n
cmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoInBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0
aW9uXG4iKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgicG9z
dFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb25cbiIpOwogfQogCiBlbnVtIEZyYW1lTmFtZVBv
bGljeSB7IFNob3VsZE5vdEluY2x1ZGVGcmFtZU5hbWUsIFNob3VsZEluY2x1ZGVGcmFtZU5hbWUg
fTsKQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcERPTUFz
V2ViQXJjaGl2ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBTdHJpbmdCdWlsZAogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiB7Ci0gICAgQVNTRVJUKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpOworICAgIEFTU0VSVChJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuaXNUZXN0UnVubmluZygpKTsKIAogICAgIC8vIEZvcmNlIGEgcGFpbnQgYmVmb3Jl
IGR1bXBpbmcuIFRoaXMgbWF0Y2hlcyBEdW1wUmVuZGVyVHJlZSBvbiBXaW5kb3dzLiAoRHVtcFJl
bmRlclRyZWUgb24gTWFjCiAgICAgLy8gZG9lcyB0aGlzIGF0IGEgc2xpZ2h0bHkgZGlmZmVyZW50
IHRpbWUuKSBTZWUgPGh0dHA6Ly93ZWJraXQub3JnL2IvNTU0Njk+IGZvciBkZXRhaWxzLgpAQCAt
ODQ1LDEzICs4NDUsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmR1bXAoKQogICAgIFN0
cmluZyB1cmwgPSB0b1dURlN0cmluZyhhZG9wdFdLKFdLVVJMQ29weVN0cmluZyh1cmxSZWYuZ2V0
KCkpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhX
S0J1bmRsZUZyYW1lQ29weU1JTUVUeXBlRm9yUmVzb3VyY2VXaXRoVVJMKGZyYW1lLCB1cmxSZWYu
Z2V0KCkpKTsKICAgICBpZiAodXJsLmZpbmQoImR1bXBBc1RleHQvIikgIT0gbm90Rm91bmQgfHwg
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtaW1lVHlwZS5nZXQoKSwgInRleHQvcGxhaW4i
KSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+ZHVtcEFz
VGV4dChmYWxzZSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPmR1bXBBc1RleHQoZmFsc2UpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWls
ZGVyOwogCi0gICAgc3dpdGNoIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT53aGF0VG9EdW1wKCkpIHsKKyAgICBzd2l0Y2ggKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS50ZXN0UnVubmVyKCktPndoYXRUb0R1bXAoKSkgewogICAgIGNhc2UgVGVzdFJ1bm5lcjo6UmVu
ZGVyVHJlZTogewotICAgICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+aXNQcmludGluZygpKQorICAgICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+aXNQcmludGluZygpKQogICAgICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQodG9XVEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4
dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZyhtX3BhZ2UpKS5nZXQoKSkpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9w
dFdLKFdLQnVuZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX3Bh
Z2UpKS5nZXQoKSkpOwpAQCAtODcwLDM0ICs4NzAsMzQgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OmR1bXAoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRp
b25zKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucygpKQogICAgICAgICBkdW1wQWxsRnJh
bWVTY3JvbGxQb3NpdGlvbnMoc3RyaW5nQnVpbGRlcik7Ci0gICAgZWxzZSBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcE1haW5GcmFtZVNjcm9sbFBv
c2l0aW9uKCkpCisgICAgZWxzZSBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcE1haW5GcmFtZVNjcm9sbFBvc2l0aW9uKCkpCiAgICAgICAgIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2UpLCBz
dHJpbmdCdWlsZGVyKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoKSkKLSAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmR1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsUGFn
ZXMoc3RyaW5nQnVpbGRlcik7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsV2luZG93cygpKQor
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuZHVtcEJhY2tGb3J3YXJkTGlzdHNG
b3JBbGxQYWdlcyhzdHJpbmdCdWlsZGVyKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuc2hvdWxkRHVtcFBpeGVscygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBQaXhlbHMoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuc2hvdWxkRHVtcFBpeGVscygpICYmIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBQaXhlbHMoKSkgewogICAgICAgICBXS1NuYXBz
aG90T3B0aW9ucyBvcHRpb25zID0ga1dLU25hcHNob3RPcHRpb25zU2hhcmVhYmxlIHwga1dLU25h
cHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7Ci0gICAgICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpKQorICAg
ICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFNlbGVjdGlvblJlY3QoKSkKICAgICAgICAgICAgIG9wdGlvbnMgfD0ga1dLU25hcHNob3RP
cHRpb25zUGFpbnRTZWxlY3Rpb25SZWN0YW5nbGU7CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnNldFBpeGVsUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNo
b3RXaXRoT3B0aW9ucyhtX3BhZ2UsIFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJvdW5k
cyhXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSksIG9wdGlvbnMpKS5nZXQoKSk7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRQaXhlbFJlc3VsdChhZG9wdFdL
KFdLQnVuZGxlUGFnZUNyZWF0ZVNuYXBzaG90V2l0aE9wdGlvbnMobV9wYWdlLCBXS0J1bmRsZUZy
YW1lR2V0VmlzaWJsZUNvbnRlbnRCb3VuZHMoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFn
ZSkpLCBvcHRpb25zKSkuZ2V0KCkpOwogICAgICAgICBpZiAoV0tCdW5kbGVQYWdlSXNUcmFja2lu
Z1JlcGFpbnRzKG1fcGFnZSkpCi0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c2V0UmVwYWludFJlY3RzKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVRyYWNrZWRSZXBhaW50UmVj
dHMobV9wYWdlKSkuZ2V0KCkpOworICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnNldFJlcGFpbnRSZWN0cyhhZG9wdFdLKFdLQnVuZGxlUGFnZUNvcHlUcmFja2VkUmVwYWlu
dFJlY3RzKG1fcGFnZSkpLmdldCgpKTsKICAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5kb25lKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuZG9uZSgpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RmluaXNoTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAg
ICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoTG9hZEZvckZyYW1lIik7CiAKICAgICBm
cmFtZURpZENoYW5nZUxvY2F0aW9uKGZyYW1lLCAvKnNob3VsZER1bXAqLyB0cnVlKTsKQEAgLTkw
NSwxMCArOTA1LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9y
RnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tF
cnJvclJlZikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmlu
ZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRGYWlsTG9h
ZFdpdGhFcnJvciIpOwogCiAgICAgZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihmcmFtZSk7CkBAIC05
MTYsMjkgKzkxNiwyOSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRXaXRo
RXJyb3JGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXSwogCiB2b2lkIEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUoV0tTdHJpbmdSZWYgdGl0bGUsIFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBz
dHJpbmdCdWlsZGVyOwotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKSB7CiAgICAgICAgIGR1bXBGcmFtZURlc2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVz
dWx0KGZyYW1lLCBzdHJpbmdCdWlsZGVyKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRM
aXRlcmFsKCIgLSBkaWRSZWNlaXZlVGl0bGU6ICIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyh0aXRsZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKICAgICB9CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFRpdGxlQ2hhbmdlcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBUaXRsZUNoYW5nZXMoKSkgewog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlRJVExFIENIQU5HRUQ6ICciKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcodGl0bGUpKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCInXG4iKTsKICAgICB9CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldp
bmRvd0ZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRS
ZWYgd29ybGQpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHRGb3JXb3JsZChmcmFtZSwgd29ybGQp
OwpAQCAtOTUwLDIxICs5NTAsMjEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENsZWFy
V2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGUKICAgICB9CiAK
ICAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbiA9IDA7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNl
cHRpb24pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5nY0NvbnRyb2xsZXIoKS0+bWFr
ZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5ldmVudFNlbmRpbmdDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmpl
Y3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGV4dElucHV0Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdp
bmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhj
ZXB0aW9uKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5t
YWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNv
bnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmV2ZW50U2VuZGluZ0NvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3
aW5kb3csICZleGNlcHRpb24pOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXh0
SW5wdXRDb250cm9sbGVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhj
ZXB0aW9uKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24p
OwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0OjppbmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4
dCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVj
dEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZv
ckZyYW1lIik7CkBAIC05NzIsMTAgKzk3MiwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
ZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQog
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvckZy
YW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tVUkxSZWYgdXJs
LCBkb3VibGUgZGVsYXksIGRvdWJsZSBkYXRlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CkBAIC05ODMsNyArOTgzLDcgQEAgdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYsIFdLQnUKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAt
IHdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VSTDogIik7CiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQocGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdCh1cmwpKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiBcbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS1NhbWVEb2N1bWVudE5hdmlnYXRpb25UeXBlIHR5cGUp
CkBAIC05OTIsMTAgKzk5MiwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURv
Y3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbQogCiB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rl
c3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRG
aW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSIpOwogCiAgICAgdW5zaWduZWQgcGVuZGluZ0ZyYW1l
VW5sb2FkRXZlbnRzID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSk7
CkBAIC0xMDA1LDQwICsxMDA1LDQwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5p
c2hEb2N1bWVudExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGhhcyAiKTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmROdW1iZXIocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgb251bmxvYWQgaGFuZGxlcihzKVxuIik7Ci0gICAg
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkSGFuZGxlT25sb2FkRXZlbnRzRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5n
KCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRIYW5kbGVPbmxv
YWRFdmVudHNGb3JGcmFtZSIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRGlz
cGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0g
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOworICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KCJkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50XG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1
dFRleHQoImRpZFJ1bkluc2VjdXJlQ29udGVudFxuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWREZXRlY3RYU1NGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewot
ICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
dXRwdXRUZXh0KCJkaWREZXRlY3RYU1NcbiIpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJkaWREZXRlY3RY
U1NcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkSW5pdGlhdGVMb2FkRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90
IGlkZW50aWZpZXIsIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBib29sKQogewotICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENv
cHlVUkwocmVxdWVzdCkpOwpAQCAtMTA1OSw4ICsxMDU5LDggQEAgc3RhdGljIGlubGluZSBib29s
IGlzSFRUUE9ySFRUUFNTY2hlbWUoV0tTdHJpbmdSZWYgc2NoZW1lKQogCiBXS1VSTFJlcXVlc3RS
ZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBh
Z2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgdWludDY0X3QgaWRlbnRpZmllciwg
V0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3QsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0g
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkKLSAgICAgICAg
JiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5pc1Rlc3RSdW5uaW5nKCkKKyAgICAgICAgJiYgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291cmNlVVJM
KGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAtIHdpbGxTZW5kUmVxdWVzdCAiKTsKQEAgLTEwNjgsMTUgKzEwNjgsMTUgQEAg
V0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJh
bWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCIgcmVkaXJlY3RSZXNwb25zZSAiKTsKICAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKICAgICB9CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53aWxsU2Vu
ZFJlcXVlc3RSZXR1cm5zTnVsbCgpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwog
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJl
c3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJM
KSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJSZXR1cm5p
bmcgbnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkgJiYgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJlZGlyZWN0KCkgJiYg
cmVkaXJlY3RVUkwpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1
dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCkBAIC0xMDg5LDggKzEwODksOCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZQogICAgICAgICAmJiAhV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhob3N0LmdldCgp
LCAiMjU1LjI1NS4yNTUuMjU1IikgLy8gVXNlZCBpbiBzb21lIHRlc3RzIHRoYXQgZXhwZWN0IHRv
IGdldCBiYWNrIGFuIGVycm9yLgogICAgICAgICAmJiAhaXNMb2NhbEhvc3QoaG9zdC5nZXQoKSkp
IHsKICAgICAgICAgYm9vbCBtYWluRnJhbWVJc0V4dGVybmFsID0gZmFsc2U7Ci0gICAgICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKSB7Ci0gICAgICAgICAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
b3BMb2FkaW5nRnJhbWUoKTsKKyAgICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5pc1Rlc3RSdW5uaW5nKCkpIHsKKyAgICAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRvcExvYWRpbmdGcmFtZSgpOwogICAg
ICAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlVUkwobWFpbkZyYW1lKSk7CiAgICAgICAgICAgICBpZiAoIW1haW5GcmFt
ZVVSTCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3Ry
aW5nKG1haW5GcmFtZVVSTC5nZXQoKSkpLmdldCgpLCAiYWJvdXQ6YmxhbmsiKSkKICAgICAgICAg
ICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9u
YWxVUkwobWFpbkZyYW1lKSk7CkBAIC0xMTA0LDcgKzExMDQsNyBAQCBXS1VSTFJlcXVlc3RSZWYg
SW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VS
ZWYgcGFnZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJCbG9ja2Vk
IGFjY2VzcyB0byBleHRlcm5hbCBVUkwgIik7CiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCh0b1dURlN0cmluZyh1cmxTdHJpbmcpKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKCdcbicpOwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTExMTUsMjAgKzExMTUs
MjAgQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0
Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1
bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS1VSTFJlc3BvbnNlUmVmIHJlc3Bv
bnNlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291
cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVSZXNwb25z
ZSAiKTsKICAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1
bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9CiAKIAotICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZVJlc3BvbnNlTUlNRVR5cGVz
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBh
ZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7CkBAIC0xMTQ4LDcgKzExNDgs
NyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3Vy
Y2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQgogCiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJl
ZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QsIHVpbnQ2NF90KQpAQCAtMTE1NywyNCArMTE1
NywyNCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhG
b3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkRmluaXNoTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFt
ZVJlZiwgdWludDY0X3QgaWRlbnRpZmllcikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIGR1bXBSZXNvdXJjZVVS
TChpZGVudGlmaWVyLCBzdHJpbmdCdWlsZGVyKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiAtIGRpZEZpbmlzaExvYWRpbmdcbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS0Vy
cm9yUmVmIGVycm9yKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQor
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CkBAIC0xMTgzLDIxICsxMTgzLDIxIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwg
V0tCdW5kbGVGcmFtZVJlCiAKICAgICBkdW1wRXJyb3JEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVz
dFJlc3VsdChlcnJvciwgc3RyaW5nQnVpbGRlcik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
J1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxl
UGFnZTo6c2hvdWxkQ2FjaGVSZXNwb25zZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVS
ZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBXaWxsQ2FjaGVS
ZXNwb25zZSgpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkpCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTnVtYmVyKGlkZW50aWZpZXIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIC0gd2lsbENhY2hlUmVzcG9uc2U6IGNhbGxlZFxuIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOwogCiAgICAgLy8gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdGhlIGNhY2hlIHRoZSByZXNw
b25zZS4KICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyMjgsMTAgKzEyMjgsMTAgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnVuYWJsZVRvSW1wbGVtZW50UG9saWN5KFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUYKIAogV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5h
dmlnYXRpb25BY3Rpb24sIFdLVVJMUmVxdWVzdFJlZiByZXF1ZXN0LCBXS1R5cGVSZWYqIHVzZXJE
YXRhKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25Vc2U7CiAKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVF
bmFibGVkKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5l
cigpLT5pc1BvbGljeURlbGVnYXRlRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gV0tCdW5kbGVQ
YWdlUG9saWN5QWN0aW9uVXNlOwogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9IGFk
b3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CkBAIC0xMjU2LDEwICsxMjU2LDEw
IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBv
bGljeUZvck5hdmlnYXRpb25BY3Rpb24oV0tCCiAgICAgfQogCiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3Ry
aW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5ub3RpZnlEb25lKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5ub3RpZnlEb25lKCk7CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZVBlcm1p
c3NpdmUoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIo
KS0+aXNQb2xpY3lEZWxlZ2F0ZVBlcm1pc3NpdmUoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxl
UGFnZVBvbGljeUFjdGlvblVzZTsKICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9u
UGFzc1Rocm91Z2g7CiB9CkBAIC0xMjc3LDcgKzEyNzcsNyBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lB
Y3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JSZXNwb25zZShXS0J1bmRs
ZVBhZwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlBvbGljeSBkZWxlZ2F0
ZTogcmVzb3VyY2UgaXMgYW4gYXR0YWNobWVudCwgc3VnZ2VzdGVkIGZpbGUgbmFtZSBcJyIpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhmaWxlbmFtZSkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlwnXG4iKTsKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
KyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKICAgICB9CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4g
bWltZVR5cGUgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5TUlNRVR5cGUocmVzcG9uc2UpKTsK
QEAgLTEzNDcsNyArMTM0Nyw3IEBAIHN0YXRpYyBXVEY6OlN0cmluZyBsYXN0RmlsZVVSTFBhdGhD
b21wb25lbnQoY29uc3QgV1RGOjpTdHJpbmcmIHBhdGgpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjp3aWxsQWRkTWVzc2FnZVRvQ29uc29sZShXS1N0cmluZ1JlZiBtZXNzYWdlLCB1aW50MzJf
dCBsaW5lTnVtYmVyKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdURjo6U3RyaW5nIG1lc3NhZ2VTdHJp
bmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKQEAgLTEzNjksNDYgKzEzNjksNDYgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3RyaW5nUmVmIG1l
c3NhZ2UsIHVpbnQzMl90IGwKICAgICB9CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWVzc2Fn
ZVN0cmluZyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFNldFN0YXR1c2Jh
clRleHQoV0tTdHJpbmdSZWYgc3RhdHVzYmFyVGV4dCkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXND
YWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBTdGF0dXNDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RBVFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIpOwog
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpKTsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdEFsZXJ0KFdLU3Ry
aW5nUmVmIG1lc3NhZ2UsIFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiQUxFUlQ6ICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1lc3Nh
Z2UpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdENv
bmZpcm0oV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJDT05GSVJNOiAiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyhtZXNzYWdlKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1
bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdHJpbmdSZWYgZGVmYXVs
dFZhbHVlLCBXS0J1bmRsZUZyYW1lUmVmKQpAQCAtMTQxOSwxMiArMTQxOSwxMiBAQCB2b2lkIElu
amVjdGVkQnVuZGxlUGFnZTo6d2lsbFJ1bkphdmFTY3JpcHRQcm9tcHQoV0tTdHJpbmdSZWYgbWVz
c2FnZSwgV0tTdHJpbmdSZQogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCBkZWZh
dWx0IHRleHQ6ICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRlZmF1
bHRWYWx1ZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlYWNoQXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLCBpbnQ2NF90
IHRvdGFsQnl0ZXNOZWVkZWQpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVDYWxsYmFja3Mo
KSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAg
Ly8gRm9yIGV4YW1wbGUsIG51bWJlcnMgZnJvbSAzMDAwMCAtIDM5OTk5IHdpbGwgb3V0cHV0IGFz
IDMwMDAwLgogICAgICAgICAvLyBSb3VuZGluZyB1cCBvciBkb3duIGRvZXMgbm90IHJlYWxseSBt
YXR0ZXIgZm9yIHRoZXNlIHRlc3RzLiBJdCdzCiAgICAgICAgIC8vIHN1ZmZpY2llbnQgdG8ganVz
dCBnZXQgYSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1pbmUgaWYgd2Ugd2VyZQpAQCAtMTQzNywz
NiArMTQzNywzNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlv
bkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiB0b3RhbFNwYWNlTmVlZGVkOn4iKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmROdW1iZXIodHJ1bmNhdGVkU3BhY2VOZWVkZWQpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
ICAgICB9CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpKQorICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREaXNhbGxv
d0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFJlc2V0IGRlZmF1bHQgYXBwbGljYXRpb24gY2FjaGUgcXVvdGEuCi0gICAgV0tCdW5k
bGVSZXNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlUb1N0cmluZyhvcmlnaW4p
KS5nZXQoKSk7CisgICAgV0tCdW5kbGVSZXNldEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIGFkb3B0V0soV0tTZWN1cml0eU9y
aWdpbkNvcHlUb1N0cmluZyhvcmlnaW4pKS5nZXQoKSk7CiB9CiAKIHVpbnQ2NF90IEluamVjdGVk
QnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9y
aWdpbiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VOYW1lLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURpc3Bs
YXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVvdGFCeXRlcywgdWludDY0X3QgY3VycmVudE9yaWdp
blVzYWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlQnl0ZXMsIHVpbnQ2NF90
IGV4cGVjdGVkVXNhZ2VCeXRlcykKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFiYXNlQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERhdGFi
YXNlQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVHQVRFIERBVEFCQVNF
IENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JTZWN1cml0eU9yaWdpbjoiKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc2VjdXJpdHlPcmlnaW5Ub1N0cihvcmlnaW4pKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZGF0YWJhc2U6Iik7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGRhdGFiYXNlTmFtZSkpOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICB9CiAKICAgICB1aW50NjRfdCBkZWZhdWx0UXVvdGEgPSA1ICogMTAyNCAq
IDEwMjQ7Ci0gICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEgPSBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOworICAgIGRvdWJsZSB0
ZXN0RGVmYXVsdFF1b3RhID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIo
KS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKICAgICBpZiAodGVzdERlZmF1bHRRdW90YSA+PSAw
KQogICAgICAgICBkZWZhdWx0UXVvdGEgPSB0ZXN0RGVmYXVsdFF1b3RhOwogCiAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIG5ld1F1b3RhID0gZGVmYXVsdFF1b3RhOwogCi0gICAgZG91YmxlIG1heFF1
b3RhID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VNYXhR
dW90YSgpOworICAgIGRvdWJsZSBtYXhRdW90YSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS50ZXN0UnVubmVyKCktPmRhdGFiYXNlTWF4UXVvdGEoKTsKICAgICBpZiAobWF4UXVvdGEgPj0g
MCkgewogICAgICAgICBpZiAoZGVmYXVsdFF1b3RhIDwgZXhwZWN0ZWRVc2FnZUJ5dGVzICYmIGV4
cGVjdGVkVXNhZ2VCeXRlcyA8PSBtYXhRdW90YSkgewogICAgICAgICAgICAgbmV3UXVvdGEgPSBl
eHBlY3RlZFVzYWdlQnl0ZXM7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB1aW50NjRfdCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZEV4Y2VlZERhdGFiYXNlUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZiBv
cmlnaW4sCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIlVJIERFTEVH
QVRFIERBVEFCQVNFIENBTExCQUNLOiBpbmNyZWFzZWQgcXVvdGEgdG8gIik7CiAgICAgICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihuZXdRdW90YSk7CiAgICAgICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBuZXdRdW90YTsKQEAgLTE1NDAs
MzcgKzE1NDAsMzcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlv
bihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbm8KIAogYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEJlZ2luRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdl
KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxk
QmVnaW5FZGl0aW5nSW5ET01SYW5nZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
cmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
b3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVj
dGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGluZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJh
bmdlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmco
KSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hv
dWxkRW5kRWRpdGluZ0luRE9NUmFuZ2U6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5v
ZGUsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0QWN0aW9u
VHlwZSBhY3Rpb24pCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0
UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1
bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciog
aW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CkBAIC0xNTc5LDcgKzE1NzksNyBAQCBib29sIEluamVj
dGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9k
ZSwgV0tCdW5kbGVSYQogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAg
IH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAg
ICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2RlOiIpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29ybGQuZ2V0
KCksIG5vZGUpKTsKQEAgLTE1ODgsMTQgKzE1ODgsMTQgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUsIFdLQnVuZGxl
UmEKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25d
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Cisg
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7
CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRUZXh0KFdLU3RyaW5n
UmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2VUb1JlcGxhY2UsIFdLSW5zZXJ0
QWN0aW9uVHlwZSBhY3Rpb24pCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
aXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciAqaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CkBAIC0xNjA0LDcgKzE2MDQsNyBAQCBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBX
S0J1bmRsZVJhbmdlSGFuZGxlUgogICAgICAgICAiV2ViVmlld0luc2VydEFjdGlvbkRyb3BwZWQi
LAogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnRUZXh0
OiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyh0ZXh0KSk7CkBA
IC0xNjEzLDI5ICsxNjEzLDI5IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNl
cnRUZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIGdpdmVuQWN0aW9uOiIpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChpbnNlcnRhY3Rpb25zdHJpbmdbYWN0aW9uXSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OwogICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIElu
amVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJl
ZiByYW5nZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmlu
ZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZERlbGV0ZURPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChy
YW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAg
ICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKIGJvb2wgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgZnJvbVJhbmdlLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHRvUmFuZ2UsIFdLQWZmaW5p
dHlUeXBlIGFmZmluaXR5LCBib29sIHN0aWxsU2VsZWN0aW5nKQogewotICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgKmFmZmluaXR5c3RyaW5nW10gPSB7CkBAIC0xNjQ3LDcg
KzE2NDcsNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRS
YW5nZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGZyb21SYQogICAgICAgICAiVFJVRSIKICAgICB9
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAg
ICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQ2hhbmdlU2VsZWN0ZWRET01S
YW5nZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2Us
IG1fd29ybGQuZ2V0KCksIGZyb21SYW5nZSkpOwpAQCAtMTY1OCw5OCArMTY1OCw5OCBAQCBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2hhbmdlU2VsZWN0ZWRSYW5nZShXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIGZyb21SYQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiBzdGlsbFNlbGVjdGluZzoiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoYm9vbHN0
cmluZ1tzdGlsbFNlbGVjdGluZ10pOyAKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xu
Jyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmco
KTsKKyAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91
bGRBcHBseVN0eWxlKFdLQnVuZGxlQ1NTU3R5bGVEZWNsYXJhdGlvblJlZiBzdHlsZSwgV0tCdW5k
bGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRl
ciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVE
SVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5bGU6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9NUmFuZ2U6Iik7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEJlZ2luRWRpdGluZyhXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rl
c3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5H
IERFTEVHQVRFOiB3ZWJWaWV3RGlkQmVnaW5FZGl0aW5nOiIpOwogICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRFbmRFZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUp
CiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQor
ICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZp
ZXdEaWRFbmRFZGl0aW5nOiIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KG5vdGlmaWNhdGlvbk5hbWUpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRD
aGFuZ2UoV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGlu
Z0NhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZToiKTsKICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRpb25OYW1lKSk7CiAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQog
CiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdLU3RyaW5nUmVm
IG5vdGlmaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
aXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJ
TkcgREVMRUdBVEU6IHdlYlZpZXdEaWRDaGFuZ2VTZWxlY3Rpb246Iik7CiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzdXBwb3J0c0Z1
bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLRnVsbFNjcmVlbktleWJvYXJkUmVx
dWVzdFR5cGUgcmVxdWVzdFR5cGUpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJzdXBwb3J0c0Z1bGxTY3JlZW4o
KSA9PSB0cnVlXG4iKTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoInN1cHBvcnRzRnVsbFNjcmVlbigpID09
IHRydWVcbiIpOwogICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tC
dW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1lbnRSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkp
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJlbnRlckZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KClcbiIpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQorICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiZW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudCgpXG4iKTsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKKyAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3Jl
ZW5CZWhhdmlvcigpKSB7CiAgICAgICAgIFdLQnVuZGxlUGFnZVdpbGxFbnRlckZ1bGxTY3JlZW4o
cGFnZVJlZik7CiAgICAgICAgIFdLQnVuZGxlUGFnZURpZEVudGVyRnVsbFNjcmVlbihwYWdlUmVm
KTsKICAgICB9CkBAIC0xNzU3LDEwICsxNzU3LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdl
OjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV0tC
dW5kbGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiBlbGVtZW50UmVmKQog
ewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dCgiZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOworICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNj
cmVlbkNhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0
cHV0VGV4dCgiZXhpdEZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCi0gICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVo
YXZpb3IoKSkgeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKICAgICAgICAgV0tCdW5kbGVQ
YWdlV2lsbEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgICAgICBXS0J1bmRsZVBhZ2VEaWRF
eGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICB9CkBAIC0xNzY4LDIyICsxNzY4LDIyIEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoV0tCdW5kbGVQ
YWdlUmVmIHBhZ2VSZWYsIFdLQnVuCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpiZWdhbkVu
dGVyRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYsIFdLUmVjdCwgV0tSZWN0KQogewotICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNj
cmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0
VGV4dCgiYmVnYW5FbnRlckZ1bGxTY3JlZW4oKVxuIik7CisgICAgaWYgKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tz
KCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJiZWdh
bkVudGVyRnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmJl
Z2FuRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVjdCkKIHsKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1
bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxuIik7CisgICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJh
Y2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJi
ZWdhbkV4aXRGdWxsU2NyZWVuKClcbiIpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6
Y2xvc2VGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmKQogewotICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNh
bGxiYWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgi
Y2xvc2VGdWxsU2NyZWVuKClcbiIpOworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQorICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiY2xvc2VGdWxsU2NyZWVu
KClcbiIpOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkgeworICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9y
KCkpIHsKICAgICAgICAgV0tCdW5kbGVQYWdlV2lsbEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwog
ICAgICAgICBXS0J1bmRsZVBhZ2VEaWRFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICB9CkBA
IC0xODkyLDIzICsxODkyLDIzIEBAIFN0cmluZyBJbmplY3RlZEJ1bmRsZVBhZ2U6OnBsYXRmb3Jt
UmVzcG9uc2VNaW1lVHlwZShXS1VSTFJlc3BvbnNlUmVmKQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZnJhbWVEaWRDaGFuZ2VMb2NhdGlvbihXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBib29s
IHNob3VsZER1bXApCiB7Ci0gICAgaWYgKGZyYW1lICE9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50b3BMb2FkaW5nRnJhbWUoKSkKKyAgICBpZiAoZnJhbWUgIT0gSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnRvcExvYWRpbmdGcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0VG9wTG9hZGluZ0ZyYW1lKDApOworICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5zZXRUb3BMb2FkaW5nRnJhbWUoMCk7CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcCgpKQorICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2hv
dWxkUHJvY2Vzc1dvcmtRdWV1ZSgpKSB7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wcm9jZXNzV29ya1F1ZXVlKCk7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5zaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkpIHsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnByb2Nlc3NXb3JrUXVldWUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChzaG91bGREdW1wKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZSgpLT5kdW1wKCk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PmR1bXAoKTsKICAgICBlbHNlCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kb25l
KCk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5kb25lKCk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYjRiNTViYjkwNjg2YThhYWQxNDVjOWNkZDgz
MTgyNjBjNmEyN2RhNy4uNDI4ODNiMTgzOGFlMzJlMGM3NDA0YTA2ZDA5YTZiZDRmZjcwNTFlYiAx
MDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVu
bmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSlNDbGFzc1JlZiBUZXN0UnVubmVyOjp3cmFw
cGVyQ2xhc3MoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3BsYXkoKQogewotICAgIFdLQnVuZGxl
UGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOwor
ICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlUGFnZUZvcmNlUmVwYWludChwYWdlKTsKICAgICBX
S0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0cnVlKTsKICAgICBXS0J1bmRsZVBh
Z2VSZXNldFRyYWNrZWRSZXBhaW50cyhwYWdlKTsKQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJvb2wgZW5hYmxlZCwgYm9vbCBwZXJt
aXNzaXZlKQogICAgIG1fcG9saWN5RGVsZWdhdGVFbmFibGVkID0gZW5hYmxlZDsKICAgICBtX3Bv
bGljeURlbGVnYXRlUGVybWlzc2l2ZSA9IHBlcm1pc3NpdmU7CiAKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEN1c3RvbVBvbGljeURlbGVnYXRl
KGVuYWJsZWQsIHBlcm1pc3NpdmUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xp
Y3lEZWxlZ2F0ZSgpCkBAIC0xNDEsMjQgKzE0MSwyNCBAQCB2b2lkIFRlc3RSdW5uZXI6OndhaXRG
b3JQb2xpY3lEZWxlZ2F0ZSgpCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRVbnRpbERvbmUoKQogewog
ICAgIG1fd2FpdFRvRHVtcCA9IHRydWU7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkudXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSkKICAgICAgICAgaW5pdGlh
bGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQoKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkKIHsKICAgICBpbnZhbGlkYXRlV2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIoKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0
cHV0VGV4dCgiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2Fs
bGVkXG5cbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5kb25lKCk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoIkZBSUw6IFRpbWVkIG91dCB3YWl0
aW5nIGZvciBub3RpZnlEb25lIHRvIGJlIGNhbGxlZFxuXG4iKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuZG9uZSgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6Om5vdGlmeURvbmUo
KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+ZHVtcCgpOworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIUluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS50b3BMb2FkaW5nRnJhbWUoKSkKKyAgICAgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+ZHVtcCgpOwogCiAgICAgLy8gV2UgZG9uJ3QgY2Fs
bCBpbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSBoZXJlLCBldmVuIGlmIHdlIGNv
bnRpbnVlIHRvIHdhaXQgZm9yIGEgbG9hZCB0byBmaW5pc2guCiAgICAgLy8gVGhlIHRlc3QgaXMg
c3RpbGwgc3ViamVjdCB0byB0aW1lb3V0IGNoZWNraW5nIC0gaXQgaXMgYmV0dGVyIHRvIGRldGVj
dCBhbiBhc3luYyB0aW1lb3V0IGluc2lkZSBXZWJLaXRUZXN0UnVubmVyCkBAIC0xNzIsNyArMTcy
LDcgQEAgdm9pZCBUZXN0UnVubmVyOjphZGRVc2VyU2NyaXB0KEpTU3RyaW5nUmVmIHNvdXJjZSwg
Ym9vbCBydW5BdFN0YXJ0LCBib29sIGFsbEZyYW0KICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7CiAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3Jp
cHRXb3JsZFJlZj4gc2NyaXB0V29ybGQoQWRvcHRXSywgV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0
ZVdvcmxkKCkpOwogCi0gICAgV0tCdW5kbGVBZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBz
Y3JpcHRXb3JsZC5nZXQoKSwgc291cmNlV0suZ2V0KCksIDAsIDAsIDAsCisgICAgV0tCdW5kbGVB
ZGRVc2VyU2NyaXB0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBzY3JpcHRXb3JsZC5nZXQoKSwgc291
cmNlV0suZ2V0KCksIDAsIDAsIDAsCiAgICAgICAgIChydW5BdFN0YXJ0ID8ga1dLSW5qZWN0QXRE
b2N1bWVudFN0YXJ0IDoga1dLSW5qZWN0QXREb2N1bWVudEVuZCksCiAgICAgICAgIChhbGxGcmFt
ZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9
CkBAIC0xODIsMjUgKzE4MiwyNSBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTdHlsZVNoZWV0
KEpTU3RyaW5nUmVmIHNvdXJjZSwgYm9vbCBhbGxGcmFtZXMpCiAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwogICAgIFdLUmV0YWluUHRyPFdLQnVu
ZGxlU2NyaXB0V29ybGRSZWY+IHNjcmlwdFdvcmxkKEFkb3B0V0ssIFdLQnVuZGxlU2NyaXB0V29y
bGRDcmVhdGVXb3JsZCgpKTsKIAotICAgIFdLQnVuZGxlQWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZUdyb3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwgMCwgMCwgMCwKKyAg
ICBXS0J1bmRsZUFkZFVzZXJTdHlsZVNoZWV0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBzY3JpcHRX
b3JsZC5nZXQoKSwgc291cmNlV0suZ2V0KCksIDAsIDAsIDAsCiAgICAgICAgIChhbGxGcmFtZXMg
PyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9wRnJhbWVPbmx5KSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoKQogewotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyh0cnVlKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucG9zdFNldEFkZHNWaXNpdGVkTGlua3ModHJ1ZSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYgbmFtZSwgSlNTdHJpbmdSZWYg
YXJndW1lbnQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9X
Syhhcmd1bWVudCkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFu
ZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSku
Z2V0KCksIHRvV0soYXJndW1lbnQpLmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpmaW5k
U3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVl
KQogewogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CiAKLSAgICBXS0J1bmRsZUZyYW1l
UmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1l
R2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gbGVuZ3RoUHJvcGVydHlOYW1lKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygibGVuZ3RoIikpOwogICAgIEpTT2JqZWN0UmVmIG9wdGlvbnNBcnJheSA9IEpTVmFsdWVU
b09iamVjdChjb250ZXh0LCBvcHRpb25zQXJyYXlBc1ZhbHVlLCAwKTsKQEAgLTIzMSwzNyArMjMx
LDM3IEBAIGJvb2wgVGVzdFJ1bm5lcjo6ZmluZFN0cmluZyhKU1N0cmluZ1JlZiB0YXJnZXQsIEpT
VmFsdWVSZWYgb3B0aW9uc0FycmF5QXNWYWx1ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIHJl
dHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
KCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCBvcHRpb25zKTsKKyAgICByZXR1cm4gV0tC
dW5kbGVQYWdlRmluZFN0cmluZyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIHRvV0sodGFyZ2V0KS5nZXQoKSwgb3B0aW9ucyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIFdLQnVuZGxlQ2xlYXJBbGxEYXRhYmFzZXMo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKKyAgICBXS0J1bmRsZUNsZWFyQWxs
RGF0YWJhc2VzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIHsKLSAgICBy
ZXR1cm4gV0tCdW5kbGVTZXREYXRhYmFzZVF1b3RhKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgcXVvdGEpOworICAgIHJldHVybiBXS0J1bmRsZVNldERhdGFiYXNlUXVvdGEoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBxdW90YSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpCiB7Ci0gICAgV0tCdW5kbGVDbGVh
ckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKKyAg
ICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFyQXBwbGljYXRpb25DYWNo
ZUZvck9yaWdpbihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgV0tCdW5kbGVDbGVhckFwcGxp
Y2F0aW9uQ2FjaGVGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0
b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIFdLQnVuZGxlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9y
T3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgdG9XSyhvcmlnaW4p
LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVp
bnQ2NF90IHNpemUpCiB7Ci0gICAgV0tCdW5kbGVTZXRBcHBDYWNoZU1heGltdW1TaXplKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgc2l6ZSk7CisgICAgV0tCdW5kbGVTZXRBcHBD
YWNoZU1heGltdW1TaXplKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgc2l6
ZSk7CiB9CiAKIGxvbmcgbG9uZyBUZXN0UnVubmVyOjphcHBsaWNhdGlvbkNhY2hlRGlza1VzYWdl
Rm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVHZXRB
cHBDYWNoZVVzYWdlRm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
dG9XSyhvcmlnaW4pLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVHZXRBcHBDYWNoZVVzYWdl
Rm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgdG9XSyhvcmln
aW4pLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBw
bGljYXRpb25DYWNoZVF1b3RhKCkKQEAgLTI4Niw5ICsyODYsOSBAQCBzdGF0aWMgaW5saW5lIEpT
VmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpTQ29udGV4dFJlZiBjb250ZXh0LCBXS0FycmF5UmVm
IHN0cmluZwogCiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZSgpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyhBZG9wdFdLLCBX
S0J1bmRsZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tBcnJheVJlZj4gb3JpZ2lucyhB
ZG9wdFdLLCBXS0J1bmRsZUNvcHlPcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKSk7CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2
YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIHJldHVybiBzdHJpbmdBcnJheVRvSlMo
Y29udGV4dCwgb3JpZ2lucy5nZXQoKSk7CkBAIC0yOTYsNyArMjk2LDcgQEAgSlNWYWx1ZVJlZiBU
ZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9uQ2FjaGUoKQogCiBib29sIFRlc3RSdW5u
ZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tC
dW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQ
YWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRDYW5PcGVuV2luZG93cyhib29sKQpAQCAtMzA4LDU4ICszMDgsNTggQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRDYW5PcGVuV2luZG93cyhib29sKQogdm9pZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRp
dG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiV2ViS2l0WFNTQXVk
aXRvckVuYWJsZWQiKSk7Ci0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVz
dFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwga2V5LmdldCgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRs
ZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgp
LCBrZXkuZ2V0KCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93VW5p
dmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXS0J1bmRsZVNl
dEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVk
KTsKKyAgICBXS0J1bmRsZVNldEFsbG93VW5pdmVyc2FsQWNjZXNzRnJvbUZpbGVVUkxzKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxv
d0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0
QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAg
ICBXS0J1bmRsZVNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3Jv
dXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0UGx1Z2luc0VuYWJsZWQoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdy
b3VwKCksIGVuYWJsZWQpOworICAgIFdLQnVuZGxlU2V0UGx1Z2luc0VuYWJsZWQoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEphdmFTY3Jp
cHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBlbmFibGVkKQogewotICAgICBXS0J1bmRsZVNldEph
dmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAg
ICBXS0J1bmRsZVNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdy
b3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgICBXS0J1bmRsZVNldFByaXZhdGVCcm93c2lu
Z0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgICBXS0J1bmRsZVNldFByaXZh
dGVCcm93c2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICAgV0tCdW5kbGVTZXRQb3B1cEJsb2NraW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5h
YmxlZCk7CisgICAgIFdLQnVuZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEF1dGhvckFuZFVz
ZXJTdHlsZXNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICAgV0tCdW5kbGVTZXRBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CisgICAgIFdLQnVu
ZGxlU2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGVu
YWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVu
dHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Qcm90
b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRpb25T
dWJkb21haW5zKQogewotICAgIFdLQnVuZGxlQWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnko
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0b1dLKHNvdXJjZU9yaWdpbikuZ2V0
KCksIHRvV0soZGVzdGluYXRpb25Qcm90b2NvbCkuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Ib3N0
KS5nZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworICAgIFdLQnVuZGxlQWRkT3Jp
Z2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCB0b1dLKHNvdXJjZU9yaWdpbikuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Qcm90b2NvbCku
Z2V0KCksIHRvV0soZGVzdGluYXRpb25Ib3N0KS5nZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRv
bWFpbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZU9yaWdpbkFjY2Vzc1doaXRlbGlz
dEVudHJ5KEpTU3RyaW5nUmVmIHNvdXJjZU9yaWdpbiwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Q
cm90b2NvbCwgSlNTdHJpbmdSZWYgZGVzdGluYXRpb25Ib3N0LCBib29sIGFsbG93RGVzdGluYXRp
b25TdWJkb21haW5zKQogewotICAgIFdLQnVuZGxlUmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0
RW50cnkoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0b1dLKHNvdXJjZU9yaWdp
bikuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Qcm90b2NvbCkuZ2V0KCksIHRvV0soZGVzdGluYXRp
b25Ib3N0KS5nZXQoKSwgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpOworICAgIFdLQnVuZGxl
UmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCB0b1dLKHNvdXJjZU9yaWdpbikuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Q
cm90b2NvbCkuZ2V0KCksIHRvV0soZGVzdGluYXRpb25Ib3N0KS5nZXQoKSwgYWxsb3dEZXN0aW5h
dGlvblN1YmRvbWFpbnMpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmlzUGFnZUJveFZpc2libGUo
aW50IHBhZ2VJbmRleCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCkpOwotICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CisgICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVJc1Bh
Z2VCb3hWaXNpYmxlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWFpbkZy
YW1lLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFZhbHVlRm9yVXNlcihK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50LCBKU1N0cmluZ1JlZiB2YWx1
ZSkKQEAgLTM3NCwyMCArMzc0LDIwIEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VmFsdWVGb3JVc2Vy
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1lbnQsIEpTU3RyCiB2b2lkIFRl
c3RSdW5uZXI6OnNldEF1ZGlvUmVzdWx0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVm
IGRhdGEpCiB7CiAgICAgLy8gRklYTUUgKDEyMzA1OCk6IFVzZSBhIEpTQyBBUEkgdG8gZ2V0IGJ1
ZmZlciBjb250ZW50cyBvbmNlIHN1Y2ggaXMgZXhwb3NlZC4KLSAgICBXS1JldGFpblB0cjxXS0Rh
dGFSZWY+IGF1ZGlvRGF0YShBZG9wdFdLLCBXS0J1bmRsZUNyZWF0ZVdLRGF0YUZyb21VSW50OEFy
cmF5KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRBdWRpb1Jlc3VsdChhdWRpb0RhdGEuZ2V0
KCkpOworICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhKEFkb3B0V0ssIFdLQnVu
ZGxlQ3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBjb250ZXh0LCBkYXRhKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnNldEF1ZGlvUmVzdWx0KGF1ZGlvRGF0YS5nZXQoKSk7CiAgICAgbV93aGF0VG9EdW1wID0g
QXVkaW87CiAgICAgbV9kdW1wUGl4ZWxzID0gZmFsc2U7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5u
ZXI6OndpbmRvd0NvdW50KCkKIHsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2VDb3VudCgpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZUNvdW50KCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQog
ewotICAgIFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0Zv
cndhcmRMaXN0KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworICAg
IFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOwogfQogCiAv
LyBPYmplY3QgQ3JlYXRpb24KQEAgLTM5OSwxOCArMzk5LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6
bWFrZVdpbmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93
T2JqZWN0CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tC
dW5kbGVJbnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3co
V0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkK
IHsKLSAgICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUlu
c3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0
ZUluV2ViSW5zcGVjdG9yKEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0
b3JFdmFsdWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBX
S0J1bmRsZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNw
ZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSwgc2NyaXB0
V0suZ2V0KCkpOwogfQogCiB0eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5Q
dHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4gPiBXb3JsZE1hcDsKQEAgLTQ0Nyw3ICs0NDcsNyBA
QCB2b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4
dFJlZiBjb250ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9
IFdLQnVuZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChjb250ZXh0KTsKICAgICBpZiAoIWZy
YW1lKQotICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgICAgICBmcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwogCiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNF
dmFsdWF0ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlwdCwgMCwgMCwgMCwgMCk7IApAQCAtNDYyLDI4
ICs0NjIsMjggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBs
b2NhbGUpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBk
aXJlY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
KyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIHJldHVy
biBXS0J1bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0soZGlyZWN0aW9u
KS5nZXQoKSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VB
ZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKIHsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKCFz
aG91bGRTdGF5T25QYWdlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdE5l
d0JlZm9yZVVubG9hZFJldHVyblZhbHVlKCFzaG91bGRTdGF5T25QYWdlKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgc2hvdWxkRGVmZXJMb2FkaW5nKQogewot
ICAgIFdLQnVuZGxlUGFnZVNldERlZmVyc0xvYWRpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpLCBzaG91bGREZWZlckxvYWRpbmcpOworICAgIFdLQnVuZGxlUGFnZVNl
dERlZmVyc0xvYWRpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
LCBzaG91bGREZWZlckxvYWRpbmcpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNp
YmlsaXR5KEpTU3RyaW5nUmVmIHN0YXRlKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5zZXRIaWRkZW4oSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0ZSwgImhpZGRlbiIp
IHx8IEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJwcmVyZW5kZXIiKSk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEhpZGRlbihKU1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKHN0YXRlLCAiaGlkZGVuIikgfHwgSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhzdGF0ZSwgInByZXJlbmRlciIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldFBh
Z2VWaXNpYmlsaXR5KCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0SGlkZGVu
KGZhbHNlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNl
KTsKIH0KIAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxi
YWNrTWFwOwpAQCAtNTA1LDcgKzUwNSw3IEBAIHN0YXRpYyB2b2lkIGNhY2hlVGVzdFJ1bm5lckNh
bGxiYWNrKHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogICAgIGlmICghY2Fs
bGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1l
ID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
KCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgp
KTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0
Q29udGV4dChtYWluRnJhbWUpOwogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNr
KTsKICAgICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY2FsbGJhY2spOwpAQCAtNTE1LDcgKzUx
NSw3IEBAIHN0YXRpYyB2b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgp
CiB7CiAgICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKICAgICAgICAgcmV0
dXJuOwotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwog
ICAgIEpTT2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGNhbGxi
YWNrTWFwKCkudGFrZShpbmRleCksIDApOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29u
dGV4dCwgY2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgMCwgMCwg
MCk7CkBAIC01MjUsMzAgKzUyNSwzMCBAQCBzdGF0aWMgdm9pZCBjYWxsVGVzdFJ1bm5lckNhbGxi
YWNrKHVuc2lnbmVkIGluZGV4KQogdm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxk
KEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWRk
Q2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucG9zdEFkZENocm9tZUlucHV0RmllbGQoKTsKKyAgICBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucG9zdEFkZENocm9tZUlucHV0RmllbGQoKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAg
ICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFJlbW92ZUNo
cm9tZUlucHV0RmllbGQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFJl
bW92ZUNocm9tZUlucHV0RmllbGQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZp
ZXcoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhG
b2N1c1dlYlZpZXdDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBvc3RGb2N1c1dlYlZpZXcoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucG9zdEZvY3VzV2ViVmlldygpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdT
Y2FsZUZhY3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yLCBKU1ZhbHVlUmVmIGNhbGxiYWNr
KQogewogICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldEJhY2tpbmdTY2FsZUZhY3RvckNh
bGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNl
dEJhY2tpbmdTY2FsZUZhY3RvcihiYWNraW5nU2NhbGVGYWN0b3IpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGJhY2tpbmdTY2FsZUZh
Y3Rvcik7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkK
IHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNldFdpbmRvd0lzS2V5KGlzS2V5
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFNldFdpbmRvd0lzS2V5KGlz
S2V5KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxi
YWNrKCkKQEAgLTU3OSwxMiArNTc5LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0b0Jvb2woSlNT
dHJpbmdSZWYgdmFsdWUpCiB2b2lkIFRlc3RSdW5uZXI6Om92ZXJyaWRlUHJlZmVyZW5jZShKU1N0
cmluZ1JlZiBwcmVmZXJlbmNlLCBKU1N0cmluZ1JlZiB2YWx1ZSkKIHsKICAgICAvLyBGSVhNRTog
aGFuZGxlIG5vbi1ib29sZWFuIHByZWZlcmVuY2VzLgotICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29s
UHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgp
LCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIHRvV0socHJlZmVyZW5jZSku
Z2V0KCksIHRvQm9vbCh2YWx1ZSkpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5j
ZUZvclRlc3RSdW5uZXIoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIHRvV0socHJlZmVyZW5jZSkuZ2V0
KCksIHRvQm9vbCh2YWx1ZSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2Vw
dENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0gICAgV0tCdW5kbGVTZXRBbHdheXNBY2NlcHRDb29r
aWVzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgYWNjZXB0KTsKKyAgICBXS0J1
bmRsZVNldEFsd2F5c0FjY2VwdENvb2tpZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBhY2NlcHQpOwogfQogCiBkb3VibGUgVGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpA
QCAtNTk4LDcgKzU5OCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKIAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVVy
bCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpKTsKICAgICBXS1N0
cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBtX3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0
KCkgOiBlbXB0eVVybC5nZXQoKTsKLSAgICBXS0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZUdyb3VwKCksIGxvY2F0aW9uKTsKKyAgICBXS0J1bmRsZVNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGxvY2F0aW9uKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKEpTU3RyaW5nUmVmIGxvY2F0aW9u
KQpAQCAtNjExLDY4ICs2MTEsNjggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyU3R5bGVTaGVl
dExvY2F0aW9uKEpTU3RyaW5nUmVmIGxvY2F0aW9uKQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNw
YXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgp
LCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgIFdL
QnVuZGxlU2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBl
bmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxl
bWVudHMoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3Vn
aEVsZW1lbnRzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKKyAgICBXS0J1bmRsZVNldFRh
YktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgZW5hYmxl
ZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKCkKIHsKLSAg
ICBXS0J1bmRsZVNldFNlcmlhbExvYWRpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgdHJ1ZSk7CisgICAgV0tCdW5kbGVTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRydWUpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCiB7Ci0gICAgV0tCdW5kbGVE
aXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpKTsKKyAgICBXS0J1bmRsZURpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cyhJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENh
Y2hlTW9kZWwoaW50IG1vZGVsKQogewotICAgIFdLQnVuZGxlU2V0Q2FjaGVNb2RlbChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1vZGVsKTsKKyAgICBXS0J1bmRsZVNldENhY2hl
TW9kZWwoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtb2RlbCk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgIFdLQnVuZGxlU2V0QXN5bmNocm9u
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OmdyYW50V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihKU1N0
cmluZ1JlZiBvcmlnaW4pCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG9yaWdpbldL
ID0gdG9XSyhvcmlnaW4pOwotICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lv
bihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5wYWdlKCktPnBhZ2UoKSwgb3JpZ2luV0suZ2V0KCksIHRydWUpOworICAgIFdLQnVuZGxl
U2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgb3Jp
Z2luV0suZ2V0KCksIHRydWUpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmRlbnlXZWJOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tCdW5kbGVTZXRXZWJO
b3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwg
ZmFsc2UpOworICAgIFdLQnVuZGxlU2V0V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvbihJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSwgb3JpZ2luV0suZ2V0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBUZXN0
UnVubmVyOjpyZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCiB7Ci0gICAgV0tC
dW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KSk7CisgICAgV0tCdW5kbGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2ltdWxhdGVXZWJO
b3RpZmljYXRpb25DbGljayhKU1ZhbHVlUmVmIG5vdGlmaWNhdGlvbikKIHsKLSAgICBXS0J1bmRs
ZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRs
ZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICB1aW50NjRfdCBub3Rp
ZmljYXRpb25JRCA9IFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmlj
YXRpb25JRCk7CisgICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdlYk5v
dGlmaWNhdGlvbklEKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgY29udGV4
dCwgbm90aWZpY2F0aW9uKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFNp
bXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihib29sIGVuYWJsZWQpCiB7CiAgICAg
Ly8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGRvbmUgYnkgZnJhbWUuCi0gICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNzaW9uKGVuYWJsZWQp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJs
ZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZG91YmxlIGFjY3VyYWN5LCBKU1ZhbHVlUmVm
IGpzQWx0aXR1ZGUsIEpTVmFsdWVSZWYganNBbHRpdHVkZUFjY3VyYWN5LCBKU1ZhbHVlUmVmIGpz
SGVhZGluZywgSlNWYWx1ZVJlZiBqc1NwZWVkKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgYm9vbCBwcm92aWRlc0FsdGl0dWRlID0g
ZmFsc2U7CkBAIC03MDMsNDQgKzcwMyw0NCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91YmxlIGxvbmdpdHVkZSwgZAogICAg
ICAgICBzcGVlZCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBqc1NwZWVkLCAwKTsKICAgICB9
CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRp
b24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0
dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVz
SGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9u
Z2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0
aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5n
LCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKEpTU3RyaW5nUmVmIG1lc3NhZ2UpCiB7
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VXSyA9IHRvV0sobWVzc2FnZSk7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9u
VW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IobWVz
c2FnZVdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRVc2VyTWVkaWFQZXJtaXNz
aW9uKGJvb2wgZW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBi
eSBmcmFtZS4KLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0VXNlck1lZGlhUGVybWlz
c2lvbihlbmFibGVkKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0VXNlck1l
ZGlhUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpjYWxsU2hvdWxk
Q2xvc2VPbldlYlZpZXcoKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAg
ICByZXR1cm4gV0tCdW5kbGVGcmFtZUNhbGxTaG91bGRDbG9zZU9uV2ViVmlldyhtYWluRnJhbWUp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFja05hdmlnYXRpb24odW5zaWduZWQgaG93
RmFyQmFja3dhcmQpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlQmFja05h
dmlnYXRpb24oaG93RmFyQmFja3dhcmQpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKGhvd0ZhckJhY2t3YXJkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZUZvcndhcmROYXZpZ2F0aW9uKHVuc2lnbmVkIGhvd0ZhckZvcndhcmQpCiB7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oaG93RmFy
Rm9yd2FyZCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlRm9yd2FyZE5h
dmlnYXRpb24oaG93RmFyRm9yd2FyZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2Fk
KEpTU3RyaW5nUmVmIHVybCwgSlNTdHJpbmdSZWYgdGFyZ2V0KQogewotICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiBiYXNlVVJMV0soQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KSkpKTsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gYmFzZVVSTFdLKEFkb3B0V0ssIFdLQnVu
ZGxlRnJhbWVDb3B5VVJMKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+
IHVybFdLKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0aEJhc2VVUkwoYmFzZVVSTFdLLmdldCgpLCB0
b1dURlN0cmluZyh0b1dLKHVybCkpLnV0ZjgoKS5kYXRhKCkpKTsKICAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gdXJsU3RyaW5nV0soQWRvcHRXSywgV0tVUkxDb3B5U3RyaW5nKHVybFdLLmdl
dCgpKSk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVMb2FkKHVybFN0cmlu
Z1dLLmdldCgpLCB0b1dLKHRhcmdldCkuZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5xdWV1ZUxvYWQodXJsU3RyaW5nV0suZ2V0KCksIHRvV0sodGFyZ2V0KS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBj
b250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTCkK
QEAgLTc0OSw0NSArNzQ5LDQ1IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmlu
ZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKCiAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dLKGJhc2VVUkwpIDog
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHVucmVhY2hhYmxlVVJMV0sgPSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwp
IDogV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KCk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0suZ2V0KCksIGJhc2VVUkxXSy5nZXQo
KSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCks
IHVucmVhY2hhYmxlVVJMV0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVs
b2FkKCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVSZWxvYWQoKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVSZWxvYWQoKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgp
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNj
cmlwdFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBz
Y3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVl
dWVOb25Mb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKIH0KIAog
dm9pZCBUZXN0UnVubmVyOjpzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wg
aGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcykKIHsKICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoIlNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSIpKTsKICAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShoYW5k
bGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNz
YWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZShKU1N0
cmluZ1JlZiB1c2VybmFtZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2Fn
ZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRp
Y2F0aW9uVXNlcm5hbWUiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VC
b2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAg
V0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVu
dGljYXRpb25QYXNzd29yZChKU1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uUGFzc3dvcmQiKSk7CiAgICAgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3Ry
aW5nKHBhc3N3b3JkKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVu
ZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIGJvb2wg
VGVzdFJ1bm5lcjo6c2VjdXJlRXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0CkBAIC03OTUsNyAr
Nzk1LDcgQEAgYm9vbCBUZXN0UnVubmVyOjpzZWN1cmVFdmVudElucHV0SXNFbmFibGVkKCkgY29u
c3QKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7
CiAgICAgV0tUeXBlUmVmIHJldHVybkRhdGEgPSAwOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIDAsICZyZXR1cm5EYXRhKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5n
ZXQoKSwgMCwgJnJldHVybkRhdGEpOwogICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0
aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KHJldHVybkRhdGEpKTsKIH0KIApAQCAtODAzLDE5ICs4MDMs
MTkgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9j
aykKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEJsb2NrQWxsUGx1Z2lucyIpKTsKICAg
ICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVh
bkNyZWF0ZShzaG91bGRCbG9jaykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQog
CiBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0
aGVGdW5jdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkp
OworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlND
b250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFp
bkZyYW1lKTsKICAgICByZXR1cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRo
ZUZ1bmN0aW9uKTsKIH0KIAogSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0
aW9uKEpTVmFsdWVSZWYgdGhlRnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWlu
RnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVu
ZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFT
Y3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUo
Y29udGV4dCwgdGhlRnVuY3Rpb24pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKaW5kZXgg
YWU3MzdmZGMxZmE0NjIxZGE5NmIxYzU2MzJhNTg5YjM2MDA1N2Y1ZC4uZjRlNjhmNjk1NTlmMzll
MzZhZmM1ZGQzMjI4MDhkYTQzZTA4ODhlOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBA
IC01OSwyMiArNTksMjIgQEAgdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2Jq
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiB3aW4KIAogdm9pZCBUZXh0SW5w
dXRDb250cm9sbGVyOjpzZXRNYXJrZWRUZXh0KEpTU3RyaW5nUmVmIHRleHQsIGludCBmcm9tLCBp
bnQgbGVuZ3RoKQogewotICAgIFdLQnVuZGxlUGFnZVNldENvbXBvc2l0aW9uKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0ZXh0KS5nZXQoKSwgZnJvbSwgbGVu
Z3RoKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRDb21wb3NpdGlvbihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGV4dCkuZ2V0KCksIGZyb20sIGxlbmd0aCk7
CiB9CiAKIGJvb2wgVGV4dElucHV0Q29udHJvbGxlcjo6aGFzTWFya2VkVGV4dCgpCiB7Ci0gICAg
cmV0dXJuIFdLQnVuZGxlUGFnZUhhc0NvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUhhc0NvbXBvc2l0aW9u
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiB9CiAKIHZvaWQg
VGV4dElucHV0Q29udHJvbGxlcjo6dW5tYXJrVGV4dCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ29u
ZmlybUNvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7
CisgICAgV0tCdW5kbGVQYWdlQ29uZmlybUNvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiB9CiAKIHZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6
aW5zZXJ0VGV4dChKU1N0cmluZ1JlZiB0ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZUNvbmZpcm1D
b21wb3NpdGlvbldpdGhUZXh0KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KSwgdG9XSyh0ZXh0KS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlQ29uZmlybUNvbXBvc2l0aW9u
V2l0aFRleHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dL
KHRleHQpLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9B
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAKaW5kZXggOTM1Mjc3MjIwZGRlNjRhYmYwMDYz
MjkzOTk4NjUyYTA4ODdkNjExZC4uNGI1NDFmNWIzZGY1ZDMxNmNkNTgyNTcxNzIxNTg1Zjg1YjA4
N2QyZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9h
dGsvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApA
QCAtODQsNyArODQsNyBAQCBzdGF0aWMgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09i
amVjdCogcGFyZW50LCBjb25zdCBjaGFyKiBpZCkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlk
KEpTU3RyaW5nUmVmIGlkKQogewotICAgIEF0a09iamVjdCogcm9vdCA9IEFUS19PQkpFQ1QoV0tB
Y2Nlc3NpYmlsaXR5Um9vdE9iamVjdChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCkpKTsKKyAgICBBdGtPYmplY3QqIHJvb3QgPSBBVEtfT0JKRUNUKFdLQWNjZXNzaWJpbGl0
eVJvb3RPYmplY3QoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7
CiAgICAgaWYgKCFyb290KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA3LDcgKzEw
Nyw3IEBAIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6
cGxhdGZvcm1OYW1lKCkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwogICAgIHZvaWQqIHJvb3QgPSBXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2Up
OwogCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxBdGtPYmplY3QqPihyb290KSk7CkBAIC0xMTUsNyArMTE1LDcgQEAgUGFzc1JlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQo
KQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250
cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAg
ICAgdm9pZCogcm9vdCA9IFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QocGFnZSk7CiAKICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEF0a09i
amVjdCo+KHJvb3QpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3Rp
ZmljYXRpb25IYW5kbGVyQXRrLmNwcAppbmRleCA2ZTBhMWM4MGNlNzE1MTQ5MGU4OWRmOGQ5ZTQy
Nzg1ODNlNTU0MzRjLi44MjFiMTUwNzMwMzU3NWM0MTA5ZmVlY2YxZmFiZGU1MmIxMWZlYWViIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRs
ZXJBdGsuY3BwCkBAIC01NSw3ICs1NSw3IEBAIGdib29sZWFuIGF4T2JqZWN0RXZlbnRMaXN0ZW5l
cihHU2lnbmFsSW52b2NhdGlvbkhpbnQqIHNpZ25hbEhpbnQsIHVuc2lnbmVkIG51bVBhCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0g
ICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgp
LT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGpzQ29u
dGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2Vs
c2UKQEAgLTE1MCw3ICsxNTAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyOjpzZXROb3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKEpTVmFsdWVSZQogICAgIG1fbm90
aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayA9IG5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2s7
CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBXS0J1bmRsZVBhZ2VS
ZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBX
S0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCkt
PnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVG
cmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAjZWxzZQpAQCAtMTgxLDcgKzE4
MSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNh
dGlvbkZ1bmN0aW9uQ2FsbGJhY2soSlNWYWx1ZVJlCiB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmlj
YXRpb25IYW5kbGVyOjpyZW1vdmVBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcigpCiB7
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0gICAgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2Vsc2UKQEAgLTIzMSw3ICsyMzEs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpjb25uZWN0QWNjZXNz
aWJpbGl0eUNhbGxiYWNrcygpCiAgICAgICAgIHVuc2lnbmVkIGlkID0gYXRrX2FkZF9nbG9iYWxf
ZXZlbnRfbGlzdGVuZXIoYXhPYmplY3RFdmVudExpc3RlbmVyLCAqc2lnbmFsTmFtZSk7CiAgICAg
ICAgIGlmICghaWQpIHsKICAgICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3Jt
YXQoImF0a19hZGRfZ2xvYmFsX2V2ZW50X2xpc3RlbmVyIGZhaWxlZCBmb3Igc2lnbmFsICVzXG4i
LCAqc2lnbmFsTmFtZSk7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0
cHV0VGV4dChtZXNzYWdlKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5vdXRwdXRUZXh0KG1lc3NhZ2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
IApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAppbmRleCAwYWQy
MjM1NGJkNzlhOTE1MzI3Y2I4YTA4YWJlMWE5ZmFjMWQ1ZmU4Li5jM2JlMWViMWE2NDk1Yzg1ODZh
OTJhNWI5MGE1MTEzOTgzNzM2ZDg3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50QXRrLmNwcApAQCAtNjIxLDcgKzYyMSw3IEBAIHN0YXRpYyBWZWN0b3I8UmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBjb252ZXJ0R1B0ckFycmF5VG9WZWN0b3IoY29uc3QgR1B0
CiAKIHN0YXRpYyBKU1ZhbHVlUmVmIGNvbnZlcnRUb0pTT2JqZWN0QXJyYXkoY29uc3QgVmVjdG9y
PFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Pj4mIGNoaWxkcmVuKQogewotICAgIFdLQnVu
ZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBt
YWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVu
ZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgc2l6ZV90IGVs
ZW1lbnRDb3VudCA9IGNoaWxkcmVuLnNpemUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0g
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVu
ZGxlUGFnZUNvY29hLm1tCmluZGV4IDM5ODkxOTEyZjM5ZGIyNmJiZGM5ZTUwNDAzNTVlOGYzYzlm
NGRkNDUuLjQ2MmFlNWI1Njk5ZTU0MTJkNjgyYmJmY2ZiMjdlODI0OTMxMjNkZmEgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRC
dW5kbGVQYWdlQ29jb2EubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQpAQCAtNDIsNyArNDIsNyBAQCB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZQogICAgIGlmICghV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1l
KGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlv
blNwZWNpZmljSW5mb3JtYXRpb25Ub1VSTChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT50ZXN0VVJMKCkpOworICAgIHNldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZp
Y0luZm9ybWF0aW9uVG9VUkwoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIo
KS0+dGVzdFVSTCgpKTsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICBXS0J1bmRsZVBhZ2VTZXRV
c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKHBhZ2UoKSwgdHJ1ZSk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVubmVyRWZs
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5u
ZXJFZmwuY3BwCmluZGV4IDgyODkwMjNkN2Q2ZDRlYjM1NTNkNTY1YTM1MjZkNWViNWEzZGQ0MmUu
LmNiYzA3MGIzYThmZmYzNTFmN2YxN2IxNGM1YzA1YTU2NTkzNzJlZjQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5u
ZXJFZmwuY3BwCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgRWlu
YV9Cb29sIHdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyQ2FsbGJhY2sodm9pZCopCiB7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXJGaXJlZCgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCkt
PndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXggYmM2OWQ4
ZGEyNzEyZjZkZjlkNzk4NjY5NTgxODg5MDJiODZlM2FjMi4uOGY5YzRlMDFjODU3YzI2MWMxMTk0
YWQyMGIzZWRhZThhMWMyMWU0ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXJJT1MubW0KQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2Jq
ZWN0QnlJZChpZCBvYmosIE5TU3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUGFzc1JlZlB0cjxBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVs
ZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJl
ZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdL
QnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+
cGFnZSgpOwogICAgIGlkIHJvb3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tB
Y2Nlc3NpYmlsaXR5Um9vdE9iamVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQgPSBmaW5kQWNj
ZXNzaWJsZU9iamVjdEJ5SWQocm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjpp
ZEF0dHJpYnV0ZV0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5t
bQppbmRleCA1M2ZlMjJjMzg2MGQwYTg4Yzc0MWVkMzViMDI3ODY4NGU5NjlkMmNmLi5lNjg4Yzk4
MjdlNTI1MTZjYmUyMzVlNGIwOTE3ZTZlYzE2Y2E5YmM0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1h
Yy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBpZCBm
aW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAK
IFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXI6OmFjY2Vzc2libGVFbGVtZW50QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsKLSAg
ICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZv
cm1VSUVsZW1lbnQ+KFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQg
cmVzdWx0ID0gZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdX
aXRoSlNTdHJpbmdSZWY6aWRBdHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5k
bGVyLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KaW5kZXggMjNiZTkzZjY2OTAzMTNmZjUyZjJj
YmU5MzYzZTkyNzdiYzAzYmE2NC4uNjUxYjU5MTEyZTg5N2ZiNjZhODNiMmU3NWY2ZjBlZjY2ZjAy
YzViMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhh
bmRsZXIubW0KQEAgLTc3LDcgKzc3LDcgQEAKIHsKICAgICBbc2VsZiBzdG9wT2JzZXJ2aW5nXTsK
IAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZy
YW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBX
S0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6
OkluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKIAogICAgIEpTVmFsdWVVbnByb3RlY3QoY29udGV4dCwgbV9ub3RpZmljYXRpb25GdW5j
dGlvbkNhbGxiYWNrKTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICBpZiAoIWNhbGxiYWNrKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkp
OwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7CiAKICAgICBpZiAobV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxi
YWNrKQpAQCAtMTI1LDcgKzEyNSw3IEBACiAgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50ICYmIG1f
cGxhdGZvcm1FbGVtZW50ICE9IFtub3RpZmljYXRpb24gb2JqZWN0XSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdU
Ujo6SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0Nv
bnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWlu
RnJhbWUpOwogCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFk
b3B0LCBbbm90aWZpY2F0aW9uTmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KaW5kZXggYTIwODlkZjFlMTllZWE2Nzg5OGEy
NTRiMjcwNTc1MzJjMzY0YjI3MS4uOTVkNTQzMzAxNWNhZjVjN2Y2OTFmNTRhNzY5MjQzNzFkMmNl
YzQ1MyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0z
NjAsNyArMzYwLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldp
dGhSYW5nZShWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUUKIAogSlNWYWx1ZVJlZiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50Ojpyb3dIZWFkZXJzKCkgY29uc3QKIHsKLSAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZy
YW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICAKICAgICBCRUdJTl9BWF9P
QkpDX0VYQ0VQVElPTlMKQEAgLTM3NCw3ICszNzQsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnJvd0hlYWRlcnMoKSBjb25zdAogCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OmNvbHVtbkhlYWRlcnMoKSBjb25zdAogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgQkVHSU5fQVhfT0JKQ19FWENF
UFRJT05TCkBAIC01OTQsNyArNTk0LDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
Om51bWJlckF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNWYWx1ZVJl
ZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpT
U3RyaW5nUmVmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNj
cmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ+PiBlbGVtZW50czsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDE0ZjJk
OWI5M2YwY2E0OWQzZDFlMDUxY2VjMzYyNDRiODZhZDcxOWIuLjIzZjViNjkwNTE2ZTliODFjNmMz
YTBhNjdiMDRmYzM5NGQyM2M3OTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDQsNyArNDQs
NyBAQCB2b2lkIFRlc3RSdW5uZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigp
CiAKIHN0YXRpYyB2b2lkIHdhaXRVbnRpbERvbmVXYXRjaGRvZ1RpbWVyRmlyZWQoQ0ZSdW5Mb29w
VGltZXJSZWYgdGltZXIsIHZvaWQqIGluZm8pCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyRmlyZWQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRvRHVt
cFdhdGNoZG9nVGltZXJJZk5lZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCmluZGV4IGEyOTQ0Mzk5OGVmNTVjZjljZDQwOTI4ZDIzNjdmZWZjZWE2MjQ5NzMu
LjMzN2FhNzY5Mzc5NTRhMmYxMGNiZjQ3MzM5N2E1YjQ2YWJlZjk2NTUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBX
S0RhdGFSZWYgY29weVdlYkNyeXB0b01hc3RlcktleShXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQq
KQogCiBzdGF0aWMgVGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXI7CiAKLVRlc3RDb250cm9sbGVy
JiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkKK1Rlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkKIHsKICAgICBBU1NFUlQoY29udHJvbGxlcik7CiAgICAgcmV0dXJuICpj
b250cm9sbGVyOwpAQCAtMTUwLDcgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiBz
dGF0aWMgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoV0tQYWdlUmVmIHBhZ2UsIFdL
U3RyaW5nUmVmIG1lc3NhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQqKQogewogICAg
IHByaW50ZigiQ09ORklSTSBOQVZJR0FUSU9OOiAlc1xuIiwgdG9TVEQobWVzc2FnZSkuY19zdHIo
KSk7Ci0gICAgcmV0dXJuIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5iZWZvcmVVbmxvYWRSZXR1
cm5WYWx1ZSgpOworICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUoKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuTW9kYWwo
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xODMsMTIgKzE4Mywx
MiBAQCBzdGF0aWMgdm9pZCB1bmZvY3VzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQogCiBzdGF0aWMgdm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIHBlcm1pc3Npb25SZXF1ZXN0LCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5oYW5kbGVH
ZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFuZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVz
dChwZXJtaXNzaW9uUmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvclVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0
eU9yaWdpblJlZiwgV0tVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiBwZXJtaXNzaW9uUmVx
dWVzdCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hh
cmVkKCkuaGFuZGxlVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QocGVybWlzc2lvblJlcXVlc3Qp
OworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYW5kbGVVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdChwZXJtaXNzaW9uUmVxdWVzdCk7CiB9CiAKIFdLUGFnZVJlZiBUZXN0Q29udHJv
bGxlcjo6Y3JlYXRlT3RoZXJQYWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVlc3RSZWYs
IFdLRGljdGlvbmFyeVJlZiwgV0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQpAQCAtMjU4LDcgKzI1OCw3IEBAIFdLUGFnZVJlZiBUZXN0
Q29udHJvbGxlcjo6Y3JlYXRlT3RoZXJQYWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVl
c3RSZWYsIFdLCiAgICAgV0tQYWdlU2V0UGFnZVVJQ2xpZW50KG5ld1BhZ2UsICZvdGhlclBhZ2VV
SUNsaWVudC5iYXNlKTsKIAogICAgIFdLUGFnZUxvYWRlckNsaWVudFY1IHBhZ2VMb2FkZXJDbGll
bnQgPSB7Ci0gICAgICAgIHsgNSwgJlRlc3RDb250cm9sbGVyOjpzaGFyZWQoKSB9LAorICAgICAg
ICB7IDUsICZUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkgfSwKICAgICAgICAgMCwgLy8gZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRG
YWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUKQEAgLTMwMiw3ICszMDIsNyBAQCBX
S1BhZ2VSZWYgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZU90aGVyUGFnZShXS1BhZ2VSZWYgb2xkUGFn
ZSwgV0tVUkxSZXF1ZXN0UmVmLCBXSwogICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQodmll
dy0+cGFnZSgpLCAmcGFnZUxvYWRlckNsaWVudC5iYXNlKTsKIAogICAgIFdLUGFnZVBvbGljeUNs
aWVudFYxIHBhZ2VQb2xpY3lDbGllbnQgPSB7Ci0gICAgICAgIHsgMSwgJlRlc3RDb250cm9sbGVy
OjpzaGFyZWQoKSB9LAorICAgICAgICB7IDEsICZUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkg
fSwKICAgICAgICAgMCwgLy8gZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbl9kZXByZWNh
dGVkRm9yVXNlV2l0aFYwCiAgICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0Fj
dGlvbgogICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZV9kZXByZWNhdGVkRm9y
VXNlV2l0aFYwCkBAIC0zMTQsNyArMzE0LDcgQEAgV0tQYWdlUmVmIFRlc3RDb250cm9sbGVyOjpj
cmVhdGVPdGhlclBhZ2UoV0tQYWdlUmVmIG9sZFBhZ2UsIFdLVVJMUmVxdWVzdFJlZiwgV0sKIAog
ICAgIHZpZXctPmRpZEluaXRpYWxpemVDbGllbnRzKCk7CiAKLSAgICBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkudXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KHZpZXcsICpUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkubV9jdXJyZW50SW52b2NhdGlvbik7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnVwZGF0ZVdpbmRvd1NjYWxlRm9yVGVzdCh2aWV3LCAqVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1fY3VycmVudEludm9jYXRpb24pOwogCiAgICAgV0tSZXRhaW4obmV3UGFnZSk7
CiAgICAgcmV0dXJuIG5ld1BhZ2U7CkBAIC02NzQsMTEgKzY3NCwxMSBAQCBib29sIFRlc3RDb250
cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICBXS1JldGFpblB0cjxX
S0Jvb2xlYW5SZWY+IHNob3VsZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2dj
QmV0d2VlblRlc3RzKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5
LmdldCgpLCBzaG91bGRHQ0tleS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQoKSk7CiAKLSAgICBX
S0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJl
ZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgcmVzZXRNZXNzYWdl
Qm9keS5nZXQoKSk7CiAKLSAgICBXS0NvbnRleHRTZXRTaG91bGRVc2VGb250U21vb3RoaW5nKFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIGZhbHNlKTsKKyAgICBXS0NvbnRleHRT
ZXRTaG91bGRVc2VGb250U21vb3RoaW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIGZhbHNlKTsKIAotICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwoVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwga1dLQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nlcik7Cisg
ICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29u
dGV4dCgpLCBrV0tDYWNoZU1vZGVsRG9jdW1lbnRCcm93c2VyKTsKIAogICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHBh
Z2Ugb3Blbi4KIApAQCAtMTM0Miw3ICsxMzQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlk
RmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lKQogICAg
ICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwotICAgIHNoYXJlZCgp
Lm5vdGlmeURvbmUoKTsKKyAgICBzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiB9CiAKIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUo
V0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VSZWYgYXV0aGVudGljYXRpb25DaGFsbGVuZ2UpCkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1
ZXN0SWZQb3NzaWJsZSgpCiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvck5v
dGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLUGFnZVJlZiBwYWdlLCBXS1NlY3VyaXR5T3Jp
Z2luUmVmIG9yaWdpbiwgV0tOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiByZXF1ZXN0
LCBjb25zdCB2b2lkKikKIHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuZGVjaWRlUG9s
aWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QocGFnZSwgb3JpZ2luLCByZXF1ZXN0
KTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZGVjaWRlUG9saWN5Rm9yTm90aWZp
Y2F0aW9uUGVybWlzc2lvblJlcXVlc3QocGFnZSwgb3JpZ2luLCByZXF1ZXN0KTsKIH0KIAogdm9p
ZCBUZXN0Q29udHJvbGxlcjo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QoV0tQYWdlUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0UmVmIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmgKaW5kZXggOGI1YzZlMjI2NWM5N2YyODA3YTljZmU1NzlkNTE0NDc2ZGVmOGMyNi4uODI2
NWNkNTZjNDk5MGFmYTJiOWQ4NDc1YTQ3M2YwZjU4MjI3NjgxYiAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBFdmVudFNlbmRl
clByb3h5OwogLy8gRklYTUU6IFJlbmFtZSB0aGlzIFRlc3RSdW5uZXI/CiBjbGFzcyBUZXN0Q29u
dHJvbGxlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFRlc3RDb250cm9sbGVyJiBzaGFyZWQoKTsK
KyAgICBzdGF0aWMgVGVzdENvbnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIHZpZXdXaWR0aDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld0hl
aWdodDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYmZi
NjVjZWMxZTZkNjNhNjEzZWNjNmE0OTIyOTgzYjY4MmYyMWM2YS4uNTIxZWViZGY2YzBhMjIwZTMy
YzNlNDdjZjQ2NjQzNmU3NWJhMTQxYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52
b2NhdGlvbi5jcHAKQEAgLTEyOSwxMyArMTI5LDEzIEBAIHN0YXRpYyBib29sIHNob3VsZExvZ0hp
c3RvcnlDbGllbnRDYWxsYmFja3MoY29uc3QgY2hhciogcGF0aE9yVVJMKQogCiB2b2lkIFRlc3RJ
bnZvY2F0aW9uOjppbnZva2UoKQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb25m
aWd1cmVWaWV3Rm9yVGVzdCgqdGhpcyk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmNvbmZpZ3VyZVZpZXdGb3JUZXN0KCp0aGlzKTsKIAotICAgIFdLUGFnZVNldEFkZHNWaXNpdGVk
TGlua3MoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFs
c2UpOworICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFsc2UpOwogCiAgICAgbV90ZXh0T3V0cHV0
LmNsZWFyKCk7CiAKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0U2hvdWxkTG9nSGlz
dG9yeUNsaWVudENhbGxiYWNrcyhzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKG1fcGF0
aE9yVVJMLmNfc3RyKCkpKTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hv
dWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyhzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJh
Y2tzKG1fcGF0aE9yVVJMLmNfc3RyKCkpKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2xl
YXIgb3V0IHZpc2l0ZWQgbGlua3MgaGVyZS4KIApAQCAtMTUxLDE2ICsxNTEsMTYgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVz
dE1lc3NhZ2VCb2R5LmdldCgpLCBkdW1wUGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUu
Z2V0KCkpOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZVdhaXRUb0R1bXBXYXRj
aGRvZ1RpbWVyS2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNl
V2FpdFRvRHVtcFdhdGNoZG9nVGltZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVm
PiB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lclZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVh
dGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkp
KTsKKyAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkudXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKSkpOwogICAgIFdLRGljdGlvbmFyeVNl
dEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1Rp
bWVyS2V5LmdldCgpLCB1c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lclZhbHVlLmdldCgpKTsKIAog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmlu
Z0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZW91dCIpKTsKICAgICBXS1JldGFpblB0cjxXS1VJ
bnQ2NFJlZj4gdGltZW91dFZhbHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtX3RpbWVvdXQp
KTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0
aW1lb3V0S2V5LmdldCgpLCB0aW1lb3V0VmFsdWUuZ2V0KCkpOwogCi0gICAgV0tDb250ZXh0UG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSk7CisgICAg
V0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9k
eS5nZXQoKSk7CiAKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkucnVuVW50aWwobV9nb3RJ
bml0aWFsUmVzcG9uc2UsIFRlc3RDb250cm9sbGVyOjpzaG9ydFRpbWVvdXQpOworICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW5VbnRpbChtX2dvdEluaXRpYWxSZXNwb25zZSwgVGVz
dENvbnRyb2xsZXI6OnNob3J0VGltZW91dCk7CiAgICAgaWYgKCFtX2dvdEluaXRpYWxSZXNwb25z
ZSkgewogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW5p
dGlhbCByZXNwb25zZSBmcm9tIHdlYiBwcm9jZXNzXG4iOwogICAgICAgICBtX3dlYlByb2Nlc3NJ
c1VucmVzcG9uc2l2ZSA9IHRydWU7CkBAIC0xNjksOSArMTY5LDkgQEAgdm9pZCBUZXN0SW52b2Nh
dGlvbjo6aW52b2tlKCkKICAgICBpZiAobV9lcnJvcikKICAgICAgICAgZ290byBlbmQ7CiAKLSAg
ICBXS1BhZ2VMb2FkVVJMKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5w
YWdlKCksIG1fdXJsLmdldCgpKTsKKyAgICBXS1BhZ2VMb2FkVVJMKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1fdXJsLmdldCgpKTsKIAotICAgIFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5ydW5VbnRpbChtX2dvdEZpbmFsTWVzc2FnZSwgVGVzdENv
bnRyb2xsZXI6Om5vVGltZW91dCk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1
blVudGlsKG1fZ290RmluYWxNZXNzYWdlLCBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0KTsKICAg
ICBpZiAobV9lcnJvcikKICAgICAgICAgZ290byBlbmQ7CiAKQEAgLTE4MCwxNyArMTgwLDE3IEBA
IHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiBlbmQ6CiAjaWYgIVBMQVRGT1JNKElPUykK
ICAgICBpZiAobV9nb3RJbml0aWFsUmVzcG9uc2UpCi0gICAgICAgIFdLSW5zcGVjdG9yQ2xvc2Uo
V0tQYWdlR2V0SW5zcGVjdG9yKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygp
LT5wYWdlKCkpKTsKKyAgICAgICAgV0tJbnNwZWN0b3JDbG9zZShXS1BhZ2VHZXRJbnNwZWN0b3Io
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSkpOwogI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCiAKICAgICBpZiAobV93ZWJQcm9jZXNzSXNVbnJlc3BvbnNp
dmUpCiAgICAgICAgIGR1bXBXZWJQcm9jZXNzVW5yZXNwb25zaXZlbmVzcygpOwotICAgIGVsc2Ug
aWYgKCFUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkucmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVl
cygpKSB7CisgICAgZWxzZSBpZiAoIVRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFN0
YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkpIHsKICAgICAgICAgLy8gVGhlIHByb2Nlc3MgZnJvemUg
d2hpbGUgbG9hZGluZyBhYm91dDpibGFuaywgbGV0J3Mgc3RhcnQgYSBmcmVzaCBvbmUuCiAgICAg
ICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gcmVwb3J0IHRoYXQgdGhlIHByZXZpb3VzIHRlc3Qg
ZnJvemUgYWZ0ZXIgZHVtcGluZyByZXN1bHRzLCBidXQgd2UgaGF2ZSBubyB3YXkgdG8gZG8gdGhh
dC4KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnRlcm1pbmF0ZVdlYkNvbnRlbnRQ
cm9jZXNzKCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS50ZXJtaW5hdGVX
ZWJDb250ZW50UHJvY2VzcygpOwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEg
cHJvY2VzcywgYXMgaW52b2tlKCkgd2lsbCBuZWVkIG9uZSB0byBzZW5kIGJ1bmRsZSBtZXNzYWdl
cyBmb3IgdGhlIG5leHQgdGVzdC4KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJl
YXR0YWNoUGFnZVRvV2ViUHJvY2VzcygpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkucmVhdHRhY2hQYWdlVG9XZWJQcm9jZXNzKCk7CiAgICAgfQogfQogCkBAIC0yMDMsNyAr
MjAzLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFdlYlByb2Nlc3NVbnJlc3BvbnNpdmVu
ZXNzKGNvbnN0IGNoYXIqIGVycm9yTWVzc2FnZSkKIHsKICAgICBjaGFyIGVycm9yTWVzc2FnZVRv
U3RkZXJyWzEwMjRdOwogI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIHBpZF90IHBpZCA9IFdLUGFn
ZUdldFByb2Nlc3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmll
dygpLT5wYWdlKCkpOworICAgIHBpZF90IHBpZCA9IFdLUGFnZUdldFByb2Nlc3NJZGVudGlmaWVy
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCkpOwogICAg
IHNwcmludGYoZXJyb3JNZXNzYWdlVG9TdGRlcnIsICIjUFJPQ0VTUyBVTlJFU1BPTlNJVkUgLSAl
cyAocGlkICVsZClcbiIsIFRlc3RDb250cm9sbGVyOjp3ZWJQcm9jZXNzTmFtZSgpLCBzdGF0aWNf
Y2FzdDxsb25nPihwaWQpKTsKICNlbHNlCiAgICAgc3ByaW50ZihlcnJvck1lc3NhZ2VUb1N0ZGVy
ciwgIiNQUk9DRVNTIFVOUkVTUE9OU0lWRSAtICVzIiwgVGVzdENvbnRyb2xsZXI6OndlYlByb2Nl
c3NOYW1lKCkpOwpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmZvcmNl
UmVwYWludERvbmVDYWxsYmFjayhXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQogewogICAgIFRl
c3RJbnZvY2F0aW9uKiB0ZXN0SW52b2NhdGlvbiA9IHN0YXRpY19jYXN0PFRlc3RJbnZvY2F0aW9u
Kj4oY29udGV4dCk7CiAgICAgdGVzdEludm9jYXRpb24tPm1fZ290UmVwYWludCA9IHRydWU7Ci0g
ICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubm90aWZ5RG9uZSgpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9u
OjpkdW1wUmVzdWx0cygpCkBAIC0yNDUsOCArMjQ1LDggQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZHVtcFJlc3VsdHMoKQogICAgIGlmIChtX2R1bXBQaXhlbHMgJiYgbV9waXhlbFJlc3VsdCkgewog
ICAgICAgICBpZiAoUGxhdGZvcm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEVuYWJsZWQoKSkgewog
ICAgICAgICAgICAgbV9nb3RSZXBhaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBXS1BhZ2VGb3Jj
ZVJlcGFpbnQoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
dGhpcywgVGVzdEludm9jYXRpb246OmZvcmNlUmVwYWludERvbmVDYWxsYmFjayk7Ci0gICAgICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkucnVuVW50aWwobV9nb3RSZXBhaW50LCBUZXN0
Q29udHJvbGxlcjo6c2hvcnRUaW1lb3V0KTsKKyAgICAgICAgICAgIFdLUGFnZUZvcmNlUmVwYWlu
dChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0aGlz
LCBUZXN0SW52b2NhdGlvbjo6Zm9yY2VSZXBhaW50RG9uZUNhbGxiYWNrKTsKKyAgICAgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW5VbnRpbChtX2dvdFJlcGFpbnQsIFRlc3RD
b250cm9sbGVyOjpzaG9ydFRpbWVvdXQpOwogICAgICAgICAgICAgaWYgKCFtX2dvdFJlcGFpbnQp
IHsKICAgICAgICAgICAgICAgICBtX2Vycm9yTWVzc2FnZSA9ICJUaW1lZCBvdXQgd2FpdGluZyBm
b3IgcHJlLXBpeGVsIGR1bXAgcmVwYWludFxuIjsKICAgICAgICAgICAgICAgICBtX3dlYlByb2Nl
c3NJc1VucmVzcG9uc2l2ZSA9IHRydWU7CkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwogICAgICAgICBt
X2Vycm9yID0gdHJ1ZTsKICAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiRkFJTFxuIjsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAg
IFdLU3RyaW5nUmVmIG1lc3NhZ2VCb2R5U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+
KG1lc3NhZ2VCb2R5KTsKICAgICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZUJvZHlTdHJpbmcsICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0
aWFsUmVzcG9uc2UgPSB0cnVlOwotICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgp
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5u
b3RpZnlEb25lKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzMxLDcg
KzMzMSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIG1fYXVkaW9SZXN1bHQg
PSBzdGF0aWNfY2FzdDxXS0RhdGFSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2Fn
ZUJvZHlEaWN0aW9uYXJ5LCBhdWRpb1Jlc3VsdEtleS5nZXQoKSkpOwogCiAgICAgICAgIG1fZ290
RmluYWxNZXNzYWdlID0gdHJ1ZTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURv
bmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzQ1LDU5ICszNDUsNTkgQEAgdm9p
ZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tT
dHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkJlZm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAg
ICAgICAgIFdLQm9vbGVhblJlZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0
PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hh
cmVkKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoV0tCb29sZWFuR2V0VmFsdWUoYmVmb3Jl
VW5sb2FkUmV0dXJuVmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnNldEJlZm9yZVVubG9hZFJldHVyblZhbHVlKFdLQm9vbGVhbkdldFZhbHVlKGJlZm9yZVVubG9h
ZFJldHVyblZhbHVlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZp
ZWxkIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCkt
PmFkZENocm9tZUlucHV0RmllbGQoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPmFkZENocm9tZUlucHV0RmllbGQoKTsKICAgICAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZygiQ2FsbEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAg
ICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgV0tDb250
ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFy
ZWQoKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgICAgIFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1
dEZpZWxkKCk7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9
IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJ
bnB1dEZpZWxkQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJGb2N1c1dlYlZpZXciKSkgewotICAgICAg
ICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+bWFrZVdlYlZpZXdGaXJz
dFJlc3BvbmRlcigpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpOwogICAgICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJDYWxsRm9jdXNXZWJWaWV3Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLQ29udGV4
dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29u
dGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLQ29udGV4dFBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJhY2tpbmdT
Y2FsZUZhY3RvciIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tEb3VibGVHZXRUeXBlSUQoKSk7CiAgICAgICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0
b3IgPSBXS0RvdWJsZUdldFZhbHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9k
eSkpOwotICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgYmFja2luZ1NjYWxlRmFjdG9y
KTsKKyAgICAgICAgV0tQYWdlU2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tpbmdTY2FsZUZhY3Rv
cik7CiAKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNldEJhY2tpbmdTY2FsZUZh
Y3RvckNhbGxiYWNrIikpOwotICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpIHsK
ICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5
cGVJRCgpKTsKICAgICAgICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS1VJbnQ2NEdldFZh
bHVlKHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkuc2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmlj
YXRpb25JRCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zaW11bGF0ZVdl
Yk5vdGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAi
U2V0QWRkc1Zpc2l0ZWRMaW5rcyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYg
ZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAg
ICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0
cmluZyhtZXNzYWdlTmFtZSwgIlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKSB7CiAgICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkp
OwogICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFu
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRH
ZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24o
V0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTQ0OSwyMSArNDQ5LDIxIEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdL
RG91YmxlUmVmIHNwZWVkV0sgPSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsK
ICAgICAgICAgZG91YmxlIHNwZWVkID0gV0tEb3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKIAotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24o
bGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRl
LCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVh
ZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOworICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxv
bmdpdHVkZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0Fs
dGl0dWRlQWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGlu
ZywgcHJvdmlkZXNTcGVlZCwgc3BlZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2Vv
bG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IiKSkgewogICAgICAgICBBU1NFUlQoV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAgICAgICBX
S1N0cmluZ1JlZiBlcnJvck1lc3NhZ2UgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0
aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CisgICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxh
YmxlRXJyb3IoZXJyb3JNZXNzYWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlh
UGVybWlzc2lvbiIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdL
ID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZh
bHVlKGVuYWJsZWRXSykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0
VXNlck1lZGlhUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgICAgIFdLQm9vbGVhblJlZiBwZXJtaXNzaXZlV0sgPSBzdGF0aWNfY2FzdDxX
S0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9u
YXJ5LCBwZXJtaXNzaXZlS2V5V0suZ2V0KCkpKTsKICAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0g
V0tCb29sZWFuR2V0VmFsdWUocGVybWlzc2l2ZVdLKTsKIAotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7
CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxl
Z2F0ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
NDkxLDE0ICs0OTEsMTQgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgV0tCb29s
ZWFuUmVmIGhpZGRlbldLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFyeSwgaXNJbml0aWFsS2V5V0suZ2V0KCkp
KTsKICAgICAgICAgYm9vbCBoaWRkZW4gPSBXS0Jvb2xlYW5HZXRWYWx1ZShoaWRkZW5XSyk7CiAK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldEhpZGRlbihoaWRkZW4pOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGhpZGRlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlByb2Nlc3NXb3JrUXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkp
IHsKKyAgICAgICAgaWYgKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5h
Z2VyKCkucHJvY2Vzc1dvcmtRdWV1ZSgpKSB7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJXb3JrUXVldWVQcm9jZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdLQ29udGV4
dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29u
dGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBXS0NvbnRleHRQb3N0
TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRl
eHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC01MDYsMTQgKzUwNiwxNCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVCYWNr
TmF2aWdhdGlvbiIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkg
PT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7CiAgICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdL
VUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0g
ICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVC
YWNrTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKSB7CiAgICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7
CiAgICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nh
c3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGVwQ291
bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdl
cigpLnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oc3RlcENvdW50KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtNTI3LDcgKzUyNyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAg
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0YXJnZXRLZXkoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoInRhcmdldCIpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgdGFy
Z2V0V0sgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktl
eShsb2FkRGF0YURpY3Rpb25hcnksIHRhcmdldEtleS5nZXQoKSkpOwogCi0gICAgICAgIFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3Ry
aW5nKHVybFdLKSwgdG9XVEZTdHJpbmcodGFyZ2V0V0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodG9XVEZTdHJpbmco
dXJsV0spLCB0b1dURlN0cmluZyh0YXJnZXRXSykpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC01NDQsNTQgKzU0NCw1NCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxLZXkoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwogICAgICAgICBXS1N0
cmluZ1JlZiB1bnJlYWNoYWJsZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB1bnJlYWNoYWJsZVVSTEtl
eS5nZXQoKSkpOwogCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVN
YW5hZ2VyKCkucXVldWVMb2FkSFRNTFN0cmluZyh0b1dURlN0cmluZyhjb250ZW50V0spLCBiYXNl
VVJMV0sgPyB0b1dURlN0cmluZyhiYXNlVVJMV0spIDogU3RyaW5nKCksIHVucmVhY2hhYmxlVVJM
V0sgPyB0b1dURlN0cmluZyh1bnJlYWNoYWJsZVVSTFdLKSA6IFN0cmluZygpKTsKKyAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRI
VE1MU3RyaW5nKHRvV1RGU3RyaW5nKGNvbnRlbnRXSyksIGJhc2VVUkxXSyA/IHRvV1RGU3RyaW5n
KGJhc2VVUkxXSykgOiBTdHJpbmcoKSwgdW5yZWFjaGFibGVVUkxXSyA/IHRvV1RGU3RyaW5nKHVu
cmVhY2hhYmxlVVJMV0spIDogU3RyaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZVJl
bG9hZCIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVSZWxvYWQoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZVJlbG9hZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJR
dWV1ZUxvYWRpbmdTY3JpcHQiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiBzY3Jp
cHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZGluZ1Njcmlw
dCh0b1dURlN0cmluZyhzY3JpcHQpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2Ny
aXB0KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKSB7CiAg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3Jr
UXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigp
LnF1ZXVlTm9uTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiU2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
CiAgICAgICAgIFdLQm9vbGVhblJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4o
bWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0SGFuZGxl
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJp
bmdSZWYgdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0QXV0aGVudGljYXRpb25Vc2VybmFt
ZSh0b1dURlN0cmluZyh1c2VybmFtZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSh0b1dURlN0cmluZyh1c2VybmFtZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpIHsKICAgICAg
ICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgp
KTsKICAgICAgICAgV0tTdHJpbmdSZWYgcGFzc3dvcmQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0QXV0
aGVudGljYXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGljYXRpb25QYXNzd29yZCh0b1dURlN0
cmluZyhwYXNzd29yZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRCbG9ja0FsbFBsdWdpbnMi
KSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVh
bkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIHNob3VsZEJsb2NrID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaGFyZWQoKS5zZXRCbG9ja0FsbFBsdWdpbnMoV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxv
Y2spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1
Z2lucyhXS0Jvb2xlYW5HZXRWYWx1ZShzaG91bGRCbG9jaykpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC02MDMsMTIgKzYwMywxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJ
bnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2luZG93
SXNLZXkiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIGlzS2V5VmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdl
dFZhbHVlKGlzS2V5VmFsdWUpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lm1haW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFs
dWUpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpIHsKLSAgICAg
ICAgYm9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7CisgICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgp
OwogICAgICAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IHJlc3VsdChBZG9wdFdLLCBXS0Jvb2xl
YW5DcmVhdGUoaXNFbXB0eSkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCmluZGV4IDI1NWQ5MzkxN2Fh
ZjYzZjJlMDZmMDdiNzU2N2YwYjllZDk2Y2FjYjkuLjAzMjNjMjNlYTMxMzNkMDdhM2NhNDY1OTkx
YWRmNmUwMTQ5ZDc1ZDQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1
ZXVlTWFuYWdlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5h
Z2VyLmNwcApAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIGlubGlu
ZSBXS1BhZ2VSZWYgbWFpblBhZ2UoKQogewotICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2hh
cmVkKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpOworICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJv
b2wgZ29Ub0l0ZW1BdEluZGV4KGludCBpbmRleCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5jcHAgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCmluZGV4IDE5NDAyY2QzMDUyYzk1
YmQ5N2JhMTY4MDhjMzA5MjRiZjM3Yjk5NTIuLjllMDU0Njg4ODFhOTQzNjYwYTNlNDRjNTEyMDc5
ODA2NjMzNGI4YzggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVz
dEludm9jYXRpb25DYWlyby5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9U
ZXN0SW52b2NhdGlvbkNhaXJvLmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgVGVzdEludm9j
YXRpb246OmR1bXBQaXhlbHNBbmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgd2tJbWFn
ZSwgV0tBcnJhCiB7CiAjaWYgUExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCiAgICAgVU5V
U0VEX1BBUkFNKHdrSW1hZ2UpOwotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IFdLSW1h
Z2VDcmVhdGVDYWlyb1N1cmZhY2UoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3
KCktPndpbmRvd1NuYXBzaG90SW1hZ2UoKS5nZXQoKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlID0gV0tJbWFnZUNyZWF0ZUNhaXJvU3VyZmFjZShUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKS0+d2luZG93U25hcHNob3RJbWFnZSgpLmdldCgpKTsKICNlbHNl
CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gV0tJbWFnZUNyZWF0ZUNhaXJvU3VyZmFj
ZSh3a0ltYWdlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9j
Zy9UZXN0SW52b2NhdGlvbkNHLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdElu
dm9jYXRpb25DRy5jcHAKaW5kZXggNzExMWE4ZTFlNTFkNWRlZDQzZWQ3NDE0ZTA1ZTcyNWFhZjVk
MmI5OS4uZWM4MzkyYWY3NTU4NjkwODEzNTdhNGI0YzM3MTcyYmE2ZGFlN2VjMyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCkBAIC0xNTYsNyAr
MTU2LDcgQEAgc3RhdGljIHZvaWQgcGFpbnRSZXBhaW50UmVjdE92ZXJsYXkoQ0dDb250ZXh0UmVm
IGNvbnRleHQsIFdLSW1hZ2VSZWYgaW1hZ2UsIFdLQXIKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZiBpbWFnZSwgV0tBcnJh
eVJlZiByZXBhaW50UmVjdHMpCiB7Ci0gICAgUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3ID0gVGVz
dENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCk7CisgICAgUGxhdGZvcm1XZWJWaWV3
KiB3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCk7CiAg
ICAgV0tSZXRhaW5QdHI8V0tJbWFnZVJlZj4gd2luZG93U25hcHNob3QgPSB3ZWJWaWV3LT53aW5k
b3dTbmFwc2hvdEltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5l
ckRyYWdnaW5nSW5mby5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RS
dW5uZXJEcmFnZ2luZ0luZm8ubW0KaW5kZXggYWYzMWQzM2M3NTQ4OGRlMzUyMzY0NmQ0YjQ0YjBm
NGE4N2ZiNGJmOS4uZDM1NmQ4M2M1ZTU2MTU1NzEyOTM5YzAxMzk0MmZkYTUzNzBjNWYyNyAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckRyYWdn
aW5nSW5mby5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVu
bmVyRHJhZ2dpbmdJbmZvLm1tCkBAIC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVFI7
CiAKIC0gKE5TV2luZG93ICopZHJhZ2dpbmdEZXN0aW5hdGlvbldpbmRvdyAKIHsKLSAgICByZXR1
cm4gW1Rlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXco
KSB3aW5kb3ddOworICAgIHJldHVybiBbVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIHdpbmRvd107CiB9CiAKIC0gKE5TRHJhZ09wZXJhdGlv
bilkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2sgCkBAIC02OSwxMyArNjksMTMgQEAgdXNpbmcg
bmFtZXNwYWNlIFdUUjsKIAogLSAoTlNQb2ludClkcmFnZ2luZ0xvY2F0aW9uCiB7Ci0gICAgV0tQ
b2ludCBsb2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ldmVudFNlbmRlclByb3h5
KCktPnBvc2l0aW9uKCk7CisgICAgV0tQb2ludCBsb2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5ldmVudFNlbmRlclByb3h5KCktPnBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIE5T
TWFrZVBvaW50KGxvY2F0aW9uLngsIGxvY2F0aW9uLnkpOwogfQogCiAtIChOU1BvaW50KWRyYWdn
ZWRJbWFnZUxvY2F0aW9uIAogewotICAgIFdLUG9pbnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkuZXZlbnRTZW5kZXJQcm94eSgpLT5wb3NpdGlvbigpOworICAgIFdLUG9pbnQg
bG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZXZlbnRTZW5kZXJQcm94eSgp
LT5wb3NpdGlvbigpOwogICAgIHJldHVybiBOU01ha2VQb2ludChsb2NhdGlvbi54ICsgX29mZnNl
dC53aWR0aCwgbG9jYXRpb24ueSArIF9vZmZzZXQuaGVpZ2h0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tCmluZGV4IDI0
MjEyYzdhZDA4ZDRmOTk0ZDk5ZDViYmVmNDM2NjU1ZWI4NWM4NDguLjlkZWEyZGY4MTg4OTZmYmE4
NzExMGVlZDVhOGQ5NDI1N2NlZDI5MzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJFdmVudC5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9XZWJLaXRUZXN0UnVubmVyRXZlbnQubW0KQEAgLTM2LDggKzM2LDggQEAgdXNpbmcg
bmFtZXNwYWNlIFdUUjsKIAogKyAoTlNQb2ludCltb3VzZUxvY2F0aW9uCiB7Ci0gICAgV0tQb2lu
dCBsb2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ldmVudFNlbmRlclByb3h5KCkt
PnBvc2l0aW9uKCk7Ci0gICAgcmV0dXJuIFtUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldl
YlZpZXcoKS0+cGxhdGZvcm1XaW5kb3coKSBjb252ZXJ0QmFzZVRvU2NyZWVuOk5TTWFrZVBvaW50
KGxvY2F0aW9uLngsIGxvY2F0aW9uLnkpXTsKKyAgICBXS1BvaW50IGxvY2F0aW9uID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9zaXRpb24oKTsKKyAg
ICByZXR1cm4gW1Rlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0
Zm9ybVdpbmRvdygpIGNvbnZlcnRCYXNlVG9TY3JlZW46TlNNYWtlUG9pbnQobG9jYXRpb24ueCwg
bG9jYXRpb24ueSldOwogfQogCiBAZW5kCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245727</attachid>
            <date>2015-01-30 11:04:36 -0800</date>
            <delta_ts>2015-01-30 12:47:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141088-20150130110443.patch</filename>
            <type>text/plain</type>
            <size>554316</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzZmZmFlYTYxNThkYmE4ZTFiMGZmMDBiYzgxYTUyMDk2ZmFjZjUyLi5lMjk0ZGI2MzNhMWRlNDY3
NTgxZDEzMDJlNWYxOWEwNTQ0MTVkNTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5n
bGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5j
dGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2VzIGFzIHBl
ciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
cmVtb3RlL1JlbW90ZUluc3BlY3Rvci5oOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVt
b3RlSW5zcGVjdG9yLm1tOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNp
bmdsZXRvbik6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c3RhcnQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcDoK
KyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6flJlbW90ZUlu
c3BlY3RvckRlYnVnZ2FibGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JE
ZWJ1Z2dhYmxlOjppbml0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6dXBkYXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZTo6c2V0UmVtb3RlRGVidWdnaW5nQWxsb3dlZCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnBhdXNlV2FpdGluZ0ZvckF1dG9tYXRpY0luc3Bl
Y3Rpb24pOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjp1
bnBhdXNlRm9ySW5pdGlhbGl6ZWRJbnNwZWN0b3IpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1v
dGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW06CisgICAgICAgIChJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZXR1cCk6CisgICAg
ICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5k
TWVzc2FnZVRvRnJvbnRlbmQpOgorCiAyMDE1LTAxLTI5ICBDb21taXQgUXVldWUgIDxjb21taXQt
cXVldWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTc5
MzU3IGFuZCByMTc5MzU4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDE2NmE2NWEzYThkNzJkOTZlZTkyMTIwNjRm
MzRlMGQ3MWJmOTdlNzUuLmY4NjNkMjQzNjMzMDZhYzRjOWYzMzY2YTdiNDgyYTc2YWE0NTU5OWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNSBAQAogMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVy
IGZ1bmN0aW9ucyB0byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkg
c3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAg
ICAgICBjbGFzc2VzIGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKKzIw
MTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKwogICAgICAgICBPcHRp
bWl6ZSBNZW1vcnlDYWNoZTo6Z2V0U2Vzc2lvbk1hcCgpIGEgYml0CiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwNjkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMWUy
NjI2ZmY1N2QwODA5NTNmYjQwZWNjMjcwN2Q4NWRjMzdlN2ZlLi4zMjFkMTA5OTAzNTZmNjA2MmNm
YTNhOWVmZDRjYWNmNzZhOGE4OGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTAx
LTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNo
YXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0
b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24o
KSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSByZWNlbnQgY29kaW5n
IHN0eWxlIGNoYW5nZS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5j
cHA6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlUHJvdmlkZXIuaDoKKwogMjAxNS0wMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBCdWlsZCBmaXggYWZ0ZXIgcjE3OTM2
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCAxYWU1NDM0MDE4OTMyMGE4OGFhODlmNWJhMThjNDVmMjIw
NmIxMTA3Li44NmM5M2I1OTY2NzJhMmQxNmQ1MDM3ODlkMmNiMDg2MDQwOWMwODc5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0
YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAg
ICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1
LTAxLTI5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUg
bW9yZSBNb3VudGFpbiBMaW9uIGNvZGUgZnJvbSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvd2luL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZwppbmRleCBi
NDZjOTI4M2Q0OWNjZDU0MWFhODE0ODUyNTZkNjgzNDBmYTE3OTk0Li43YzczOTg1OTgyMWMyMDAw
Y2Q2NDRiYzc2YTlmNjRmOGMwYWI4NWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAg
ICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkg
Zm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRv
IHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAgICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJl
Y2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1LTAxLTI5ICBCcmVudCBGdWxnaGFtICA8
YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIEJ1aWxkIGZpeCBhZnRlciByMTc5
MzY4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDhiYzg0YzI0ODM0ZmM0MzUwODE5ZTBiYTlmZDQyNGFlMzUwZTAz
MWEuLjUxNTA3ODgyMjY3NzEyZDIyNGM5YjA0NWJmZTNkM2M5MmViYjgwN2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0
byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJl
ciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2Vz
IGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKIDIwMTUtMDEtMjkgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFJlc2l6ZSB0aGUgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIGFnYWluIGFmdGVyIGxlYXZpbmcgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAwZGZmYzI4NmYw
M2ZiZDJiNzE5NzNiMzEwMzAwNTI3ZjI0ZmQzNTRlLi4yY2Q4NTE5N2IzZjQyODgyMTg0YjRmOGJh
ZmEwYTg4ZGUyOTc0NmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1
Y3QgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm87CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBSZW1vdGVJbnNwZWN0b3IgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdGFydERpc2FibGVkKCk7
Ci0gICAgc3RhdGljIFJlbW90ZUluc3BlY3RvciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFJlbW90
ZUluc3BlY3RvciYgc2luZ2xldG9uKCk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFJlbW90ZUluc3BlY3Rvcj47CiAKICAgICB2b2lkIHJlZ2lzdGVyRGVidWdnYWJsZShSZW1vdGVJ
bnNwZWN0b3JEZWJ1Z2dhYmxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0KaW5kZXggYzhhMzllNjQxZjFh
NDUwNGNhMjU0YTQ0NDgzOWM2YzQ3NGUxZTcwMy4uNDZkNTA0NGM1ZTAyMjRmOTJlNTYyMjQ4Nzg3
NDBmYWY0N2EwZjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5tbQpAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c3RhcnREaXNhYmxlZCgpCiAgICAgUmVtb3RlSW5zcGVjdG9yOjpz
dGFydEVuYWJsZWQgPSBmYWxzZTsKIH0KIAotUmVtb3RlSW5zcGVjdG9yJiBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpCitSZW1vdGVJbnNwZWN0b3ImIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yPiBzaGFyZWQ7
CiAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogICAg
IH0pOwogCiAgICAgbm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKFdJUlNlcnZpY2VBdmFpbGFibGVO
b3RpZmljYXRpb24sICZtX25vdGlmeVRva2VuLCBtX3hwY1F1ZXVlLCBeKGludCkgewotICAgICAg
ICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCk7
CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0dXBYUENDb25uZWN0aW9u
SWZOZWVkZWQoKTsKICAgICB9KTsKIAogICAgIG5vdGlmeV9wb3N0KFdJUlNlcnZpY2VBdmFpbGFi
aWxpdHlDaGVja05vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCmluZGV4IGRmZWUwZWJiYzkyOWNiYTQ2ZmMzNTZlZWVkN2VjZjFhNzNiMzg5OTguLmFj
ODNhMThlOTU5OTViMWMzNTg2ZmE3ODYxMDcxZmNjNGU1ZWI4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZTo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSgpCiAKIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGU6On5SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKCkKIHsKLSAgICBSZW1v
dGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVucmVnaXN0ZXJEZWJ1Z2dhYmxlKHRoaXMpOworICAgIFJl
bW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5pdCgpCiB7Ci0gICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaGFyZWQoKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9CiAKIHZv
aWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6dXBkYXRlKCkKIHsKLSAgICBSZW1vdGVJbnNw
ZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS51cGRhdGVEZWJ1Z2dhYmxlKHRoaXMpOwogfQogCiB2b2lkIFJlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNldFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxv
d2VkKQpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNl
dFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogICAgIG1fYWxsb3dlZCA9IGFs
bG93ZWQ7CiAKICAgICBpZiAobV9hbGxvd2VkICYmIGF1dG9tYXRpY0luc3BlY3Rpb25BbGxvd2Vk
KCkpCi0gICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkudXBkYXRlRGVidWdnYWJsZUF1
dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6
c2luZ2xldG9uKCkudXBkYXRlRGVidWdnYWJsZUF1dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhp
cyk7CiAgICAgZWxzZQotICAgICAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURl
YnVnZ2FibGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudXBk
YXRlRGVidWdnYWJsZSh0aGlzKTsKIH0KIAogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm8g
UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5mbygpIGNvbnN0CkBAIC04NywxMyArODcsMTMg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjpwYXVzZVdhaXRpbmdGb3JBdXRvbWF0
aWNJbnNwZWN0aW9uKCkKICAgICBBU1NFUlQoYXV0b21hdGljSW5zcGVjdGlvbkFsbG93ZWQoKSk7
CiAKICAgICBFdmVudExvb3AgbG9vcDsKLSAgICB3aGlsZSAoUmVtb3RlSW5zcGVjdG9yOjpzaGFy
ZWQoKS53YWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbihpZGVudGlmaWVyKCkpICYmICFsb29w
LmVuZGVkKCkpCisgICAgd2hpbGUgKFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkud2FpdGlu
Z0ZvckF1dG9tYXRpY0luc3BlY3Rpb24oaWRlbnRpZmllcigpKSAmJiAhbG9vcC5lbmRlZCgpKQog
ICAgICAgICBsb29wLmN5Y2xlKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZTo6dW5wYXVzZUZvckluaXRpYWxpemVkSW5zcGVjdG9yKCkKIHsKLSAgICBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpLnNldHVwQ29tcGxldGVkKGlkZW50aWZpZXIoKSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZXR1cENvbXBsZXRlZChpZGVudGlmaWVyKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1t
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KaW5kZXggYTk3ZGNiYmJhZDkwODMyNzk1Y2Q0OWJkNTU0
ZDRhNjUwMzg0MTVjZS4uOGU3OWE1NmIyOWQyZDNhM2I4Y2YzMDczMjY3YzYxODI2MDQ5MDFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3Rl
SW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24u
bW0KQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uOjpzZXR1cChib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbikKICAgICAgICAgewogICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9kZWJ1Z2dhYmxlTXV0
ZXgpOwogICAgICAgICAgICAgaWYgKCFtX2RlYnVnZ2FibGUgfHwgIW1fZGVidWdnYWJsZS0+cmVt
b3RlRGVidWdnaW5nQWxsb3dlZCgpIHx8IG1fZGVidWdnYWJsZS0+aGFzTG9jYWxEZWJ1Z2dlcigp
KSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zZXR1cEZhaWxl
ZChpZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xl
dG9uKCkuc2V0dXBGYWlsZWQoaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICBtX2RlYnVn
Z2FibGUgPSBudWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBt
X2RlYnVnZ2FibGUtPmNvbm5lY3QodGhpcywgaXNBdXRvbWF0aWNJbnNwZWN0aW9uKTsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZChOU1N0cmluZyAqbWVzc2FnZQogCiBib29sIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc2VuZE1lc3Nh
Z2VUb1JlbW90ZUZyb250ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoaWRlbnRpZmll
cigpLCBtZXNzYWdlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKaW5kZXggYzNlMDg2ZjUzNWMy
MjllYTllNTJjZTlhNTg4YmQxNmEzZjI0YzIxMi4uNjhjN2QwNDg4Nzc2NTE1NTJjZmVlNzVkNzcy
MDI1MzZlNmQyZDFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZE1hbmFnZXIuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBOYXZpZ2F0b3JHYW1l
cGFkKiBuYXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKICAg
ICByZXR1cm4gTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOwogfQogCi1HYW1lcGFk
TWFuYWdlciYgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCitHYW1lcGFkTWFuYWdlciYgR2FtZXBh
ZE1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVw
YWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwogICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwpAQCAt
NjEsNyArNjEsNyBAQCBHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIoKQogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkKQogewogICAgIC8vIE5vdGlmeSBibGluZCBOYXZpZ2F0b3JzIGFuZCBXaW5k
b3dzIGFib3V0IGFsbCBnYW1lcGFkcyBleGNlcHQgZm9yIHRoaXMgb25lLgotICAgIGZvciAoYXV0
byogZ2FtZXBhZCA6IEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkucGxhdGZvcm1HYW1lcGFkcygp
KSB7CisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKICAgICAgICAgaWYgKCFnYW1lcGFkIHx8IGdhbWVwYWQg
PT0gJnBsYXRmb3JtR2FtZXBhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTksNyAr
MTE5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpCiAgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5pc0VtcHR5KCkgJiYgbV9nYW1l
cGFkQmxpbmRET01XaW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVw
YWRzKCkpCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKS5wbGF0Zm9ybUdhbWVwYWRzKCkpCiAgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2Ft
ZXBhZCwgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3Mp
OwogCiAgICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CkBAIC0yMTgsNyArMjE4
LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWF5YmVTdGFydE1vbml0b3JpbmdHYW1lcGFkcygp
CiAgICAgaWYgKCFtX25hdmlnYXRvcnMuaXNFbXB0eSgpIHx8ICFtX2RvbVdpbmRvd3MuaXNFbXB0
eSgpKSB7CiAgICAgICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZE1hbmFnZXIgaGFzICVpIE5hdmln
YXRvckdhbWVwYWRzIGFuZCAlaSBET01XaW5kb3dzIHJlZ2lzdGVyZWQsIGlzIHN0YXJ0aW5nIGdh
bWVwYWQgbW9uaXRvcmluZyIsIG1fbmF2aWdhdG9ycy5zaXplKCksIG1fZG9tV2luZG93cy5zaXpl
KCkpOwogICAgICAgICBtX2lzTW9uaXRvcmluZ0dhbWVwYWRzID0gdHJ1ZTsKLSAgICAgICAgR2Ft
ZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5zdGFydE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKKyAg
ICAgICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zdGFydE1vbml0b3JpbmdHYW1lcGFk
cyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdhbWVwYWRNYW5h
Z2VyOjptYXliZVN0b3BNb25pdG9yaW5nR2FtZXBhZHMoKQogICAgIGlmIChtX25hdmlnYXRvcnMu
aXNFbXB0eSgpICYmIG1fZG9tV2luZG93cy5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HKEdhbWVw
YWQsICJHYW1lcGFkTWFuYWdlciBoYXMgbm8gTmF2aWdhdG9yR2FtZXBhZHMgb3IgRE9NV2luZG93
cyByZWdpc3RlcmVkLCBpcyBzdG9wcGluZyBnYW1lcGFkIG1vbml0b3JpbmciKTsKICAgICAgICAg
bV9pc01vbml0b3JpbmdHYW1lcGFkcyA9IGZhbHNlOwotICAgICAgICBHYW1lcGFkUHJvdmlkZXI6
OnNoYXJlZCgpLnN0b3BNb25pdG9yaW5nR2FtZXBhZHModGhpcyk7CisgICAgICAgIEdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkuc3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmgKaW5kZXggMTA0NjBiODVmYzViZjcxZGQ3MGQwODA2ZThlZDczMzBjMDI0YzcxZC4uMTExNDhl
MTI0ODM2MzkxYjA1NTc2Mjk3ZWY0M2ZkNzhiOTNmYmM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgR2FtZXBhZE1hbmFnZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHYW1lcGFkTWFuYWdlcik7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPEdhbWVwYWRNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgR2FtZXBh
ZE1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBHYW1lcGFkTWFuYWdlciYgc2luZ2xldG9u
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3Jt
R2FtZXBhZCYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVw
YWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKaW5k
ZXggNWQ3YjUzOTYyMmFhOTQwODhiMWYxMTYwNzdkMmI3N2VkZTkxMTdlOC4uMThmMWI0ZTYzNWY2
OGIxN2Y3YjAyNzljNDJlNThjMmUxYzRiYjljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5hdmlnYXRvckdhbWVwYWQ6Ok5hdmlnYXRvckdhbWVwYWQo
KQogICAgIDogbV9uYXZpZ2F0aW9uU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKQogewotICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3Rlck5hdmln
YXRvcih0aGlzKTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJOYXZp
Z2F0b3IodGhpcyk7CiB9CiAKIE5hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0b3JHYW1lcGFkKCkK
IHsKLSAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0aGlz
KTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0
aGlzKTsKIH0KIAogY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUo
KQpAQCAtOTEsNyArOTEsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdh
dG9yR2FtZXBhZDo6Z2FtZXBhZHMoKQogICAgIGlmIChtX2dhbWVwYWRzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fZ2FtZXBhZHM7CiAKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1l
cGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRm
b3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBh
ZHMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbGF0Zm9ybUdhbWVwYWRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghcGxhdGZvcm1HYW1lcGFkc1tpXSkgewpAQCAtMTA4
LDcgKzEwOCw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1l
cGFkOjpnYW1lcGFkcygpCiAKIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCkKIHsKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKTsK
KyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBhZHMoKTsKICAgICBtX2dh
bWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgewpAQCAtMTI4LDcg
KzEyOCw3IEBAIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3RlZChQbGF0Zm9y
bUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICB9CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IHBsYXRmb3JtR2FtZXBhZC5pbmRleCgpOwotICAgIEFTU0VSVChHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKVtpbmRleF0gPT0gJnBsYXRmb3JtR2FtZXBhZCk7Cisg
ICAgQVNTRVJUKEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucGxhdGZvcm1HYW1lcGFkcygp
W2luZGV4XSA9PSAmcGxhdGZvcm1HYW1lcGFkKTsKIAogICAgIC8vIFRoZSBuZXcgaW5kZXggc2hv
dWxkIGFscmVhZHkgZml0IGluIHRoZSBleGlzdGluZyBhcnJheSwgb3Igc2hvdWxkIGJlIGV4YWN0
bHkgb25lIHBhc3QtdGhlLWVuZCBvZiB0aGUgZXhpc3RpbmcgYXJyYXkuCiAgICAgQVNTRVJUKGlu
ZGV4IDw9IG1fZ2FtZXBhZHMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IGI5YzY1NGMyZDNi
ZGMxYTJhN2U4NWNjYjU4MjYzNWYzZmM2MTFiZTQuLjMxZmMxOThiMTcxNmMxM2NhODkyNmRmOWVm
NDI1MDIxNThjM2M0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB2b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OmdldFNvdXJjZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrPiBjYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdD4gcmVxdWVzdCA9IE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBpZiAoIU1lZGlhU3RyZWFtQ2VudGVyOjpzaGFy
ZWQoKS5nZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVhc2UoKSkpCisgICAg
aWYgKCFNZWRpYVN0cmVhbUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFSZXF1ZXN0LmNwcAppbmRleCBjYmQ2ZmJhNzk5ZjcwZjc2NWM1MmY1NzdhZjVmZTc2
ZjNhYzZjZTQyLi5jNTMyZDc4ZmQ0YjcxM2NhM2E5NjQxYWI3M2U4Mzg2ZTg4ZGU3MGQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
UmVxdWVzdC5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnN0
YXJ0KCkKIHsKICAgICAvLyAxIC0gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBz
dXBwb3J0aW5nIHRoZSBhdWRpbyBhbmQgdmlkZW8gY29uc3RyYWludHMuIFdlIGRvbid0IHdhbnQg
dG8gYXNrIGZvcgogICAgIC8vIHVzZXIgcGVybWlzc2lvbiBpZiB0aGUgY29uc3RyYWludHMgY2Fu
IG5vdCBiZSBzdXBvcnRlZC4KLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6c2hhcmVkKCkudmFsaWRh
dGVSZXF1ZXN0Q29uc3RyYWludHModGhpcywgbV9hdWRpb0NvbnN0cmFpbnRzLCBtX3ZpZGVvQ29u
c3RyYWludHMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24oKS52YWxpZGF0ZVJl
cXVlc3RDb25zdHJhaW50cyh0aGlzLCBtX2F1ZGlvQ29uc3RyYWludHMsIG1fdmlkZW9Db25zdHJh
aW50cyk7CiB9CiAKICAgICAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQoKQogICAgIFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXNdIHsKICAgICAgICAgLy8gMyAtIHRoZSB1c2VyIGdyYW50ZWQgYWNjZXNzLCBhc2sgcGxhdGZv
cm0gdG8gY3JlYXRlIHRoZSBtZWRpYSBzdHJlYW0gZGVzY3JpcHRvcnMuCi0gICAgICAgIE1lZGlh
U3RyZWFtQ2VudGVyOjpzaGFyZWQoKS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdl
dCgpLCBwcm90ZWN0ZWRUaGlzLT5tX2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1f
dmlkZW9Db25zdHJhaW50cyk7CisgICAgICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24o
KS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdldCgpLCBwcm90ZWN0ZWRUaGlzLT5t
X2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1fdmlkZW9Db25zdHJhaW50cyk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggOTZlNTdmMzkwNzMzZDM0NTFmZmEy
ODRhMGRjM2Q4NjkyMGQ1M2E0MS4uZTZmZmMxZWQ0OGVkMzZiYTQyMGI3YWNhY2U3ZDk3NzU5MjVi
YzJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTEwNzMsNiArMTA3Myw3IEBAIF9fWk43V2Vi
Q29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTBtYXJrZXJzRm9yRVBOU180Tm9kZUVOU18x
NERvY3VtZW50TWFya2VyCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29udHJvbGxlcjEz
cmVtb3ZlTWFya2Vyc0VOU18xNERvY3VtZW50TWFya2VyMTFNYXJrZXJUeXBlc0UKIF9fWk43V2Vi
Q29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMThhZGRUZXh0TWF0Y2hNYXJrZXJFUEtOU181
UmFuZ2VFYgogX19aTjdXZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIyM3JlbmRlcmVk
UmVjdHNGb3JNYXJrZXJzRU5TXzE0RG9jdW1lbnRNYXJrZXIxME1hcmtlclR5cGVFCitfX1pON1dl
YkNvcmUyNEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDlzaW5nbGV0b25FdgogX19aTjdXZWJDb3Jl
MjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIxMm9ic2VydmVGcmFtZUVQTlNfNUZyYW1lRQogX19a
TjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIxNGZyYW1lRGVzdHJveWVkRXYKIF9f
Wk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyMTR3aWxsRGV0YWNoUGFnZUV2CkBA
IC0xMTYzLDcgKzExNjQsNyBAQCBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNEZWNvZGluZ1dp
dGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNF
bmNvZGluZ1dpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMG92ZXJy
aWRlVXNlclByZWZlcnJlZExhbmd1YWdlc0VSS04zV1RGNlZlY3RvcklOUzBfNlN0cmluZ0VMbTBF
TlMwXzE1Q3Jhc2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUzMUNyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGU1ZW1wdHlFdgotX19aTjdXZWJDb3JlMzFDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlNnNoYXJlZEV2CitfX1pON1dlYkNvcmUzMUNyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGU5c2luZ2xldG9uRXYKIF9fWk43V2ViQ29yZTMxZXF1YWxJZ25vcmluZ0ZyYWdt
ZW50SWRlbnRpZmllckVSS05TXzNVUkxFUzJfCiBfX1pON1dlYkNvcmUzM3N0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTM2bGFyZ2Vz
dFJlY3RXaXRoQXNwZWN0UmF0aW9JbnNpZGVSZWN0RWZSS05TXzlGbG9hdFJlY3RFCkBAIC0xNjEz
LDcgKzE2MTQsNyBAQCBfX1pON1dlYkNvcmU5UGFnZUNhY2hlMTBzZXRNYXhTaXplRWoKIF9fWk43
V2ViQ29yZTlQYWdlQ2FjaGUxNHBydW5lVG9TaXplTm93RWpOU18xM1BydW5pbmdSZWFzb25FCiBf
X1pON1dlYkNvcmU5UGFnZUNhY2hlMzRtYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxj
RXYKIF9fWk43V2ViQ29yZTlQYWdlQ2FjaGU2cmVtb3ZlRVJOU18xMUhpc3RvcnlJdGVtRQotX19a
TjdXZWJDb3JlOVBhZ2VDYWNoZTZzaGFyZWRFdgorX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTlzaW5n
bGV0b25FdgogX19aTjdXZWJDb3JlOVBhZ2VHcm91cDlwYWdlR3JvdXBFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmU5U2Nyb2xsYmFyMTFtb3VzZUV4aXRlZEV2CiBfX1pON1dlYkNvcmU5U2Ny
b2xsYmFyMTJtb3VzZUVudGVyZWRFdgpAQCAtMjc2MCw3ICsyNzYxLDYgQEAgX19aTjdXZWJDb3Jl
MjNhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eUVSS05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzE1VGV4
dEdyYW51bGFyaXQKIF9fWk43V2ViQ29yZTI0RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyMTRtYXJr
ZXJzSW5SYW5nZUVQTlNfNVJhbmdlRU5TXzE0RG9jdW1lbnRNYXJrZXIxMU1hcmtlclR5cGVzRQog
X19aTjdXZWJDb3JlMjRGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQyMWVuYWJsZURlbm9ybWFsU3Vw
cG9ydEV2CiBfX1pON1dlYkNvcmUyNEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDI1c2F2ZU1haW5U
aHJlYWRFbnZpcm9ubWVudEV2Ci1fX1pON1dlYkNvcmUyNEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dDZzaGFyZWRFdgogX19aTjdXZWJDb3JlMjRhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3JFTjNXVEYx
MFN0cmluZ1ZpZXdFUktOUzBfMTJBdG9taWNTdHJpbmdFUEt0ak5TXzIxTGluZUJyZWFrSXRlcmF0
b3JNb2RlRWIKIF9fWk43V2ViQ29yZTI0Y2hhcmFjdGVyc0Fyb3VuZFBvc2l0aW9uRVJLTlNfMTVW
aXNpYmxlUG9zaXRpb25FUmlTM19TM18KIF9fWk43V2ViQ29yZTI0Y3JlYXRlVGVtcG9yYXJ5RGly
ZWN0b3J5RVA4TlNTdHJpbmcKQEAgLTMxMzcsOCArMzEzNyw4IEBAIF9fWk5LN1dlYkNvcmU3RWxl
bWVudDI1Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudEV2CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkK
IF9fWk43V2ViQ29yZTE1R2FtZXBhZFByb3ZpZGVyMTdzZXRTaGFyZWRQcm92aWRlckVSUzBfCi1f
X1pON1dlYkNvcmUxNUdhbWVwYWRQcm92aWRlcjZzaGFyZWRFdgotX19aTjdXZWJDb3JlMThISURH
YW1lcGFkUHJvdmlkZXI2c2hhcmVkRXYKK19fWk43V2ViQ29yZTE1R2FtZXBhZFByb3ZpZGVyOXNp
bmdsZXRvbkV2CitfX1pON1dlYkNvcmUxOEhJREdhbWVwYWRQcm92aWRlcjlzaW5nbGV0b25Fdgog
I2VuZGlmCiAKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdvcml0aG1EaWN0aW9uYXJ5LmNwcAppbmRl
eCA3NjlkNzJkZTA4OGExNzRlY2MwM2M4ZjczZDEyNjRkZjNkNGExNDJhLi42NGQ1NmQ5NzBhNzRl
NWRjMWFlYWEzODU5NWI1NmJkMWU2MzQ2ZmUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3JpdGhtRGljdGlvbmFyeS5jcHAKQEAgLTc5
LDcgKzc5LDcgQEAgYm9vbCBKU0NyeXB0b0FsZ29yaXRobURpY3Rpb25hcnk6OmdldEFsZ29yaXRo
bUlkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGlmICghQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmdl
dElkZW50aWZpZXJGb3JOYW1lKGFsZ29yaXRobU5hbWUsIGFsZ29yaXRobUlkZW50aWZpZXIpKSB7
CisgICAgaWYgKCFDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuZ2V0SWRlbnRp
ZmllckZvck5hbWUoYWxnb3JpdGhtTmFtZSwgYWxnb3JpdGhtSWRlbnRpZmllcikpIHsKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0suY3BwCmluZGV4IDAyZmExYzA1Y2NjZWJl
NzY2ZmNjZDk2NDdjOTcxNGJjYWU4YWI0NzMuLjY1OWIzOTdkMTEzYWEzNDkxYWE1NWExMzYyMjAy
OTgzM2ZmNjEwODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5
cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNwcApAQCAtMTczLDQ2ICsxNzMsNDYgQEAg
Ym9vbCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6OnJlY29uY2lsZUFsZ29yaXRobShzdGQ6
OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3IKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3Jp
dGhtPiBhbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobVBhcmFt
ZXRlcnM+IHBhcmFtZXRlcnM7CiAgICAgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiSFMyNTYi
KSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQo
KS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CisgICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVI
TUFDUGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2KTsKICAgICB9
IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiSFMzODQiKSB7Ci0gICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmll
cjo6SE1BQyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVITUFDUGFyYW1ldGVycyhDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxn
b3JpdGhtTmFtZSA9PSAiSFM1MTIiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
SE1BQyk7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5n
bGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CiAgICAgICAg
IHBhcmFtZXRlcnMgPSBjcmVhdGVITUFDUGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlMy
NTYiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFy
ZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUp
OworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9u
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsK
ICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMjU2KTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxn
b3JpdGhtTmFtZSA9PSAiUlMzODQiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6
UlNBU1NBX1BLQ1MxX3YxXzUpOworICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1S
ZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJT
QVNTQV9QS0NTMV92MV81KTsKICAgICAgICAgcGFyYW1ldGVycyA9IGNyZWF0ZVJTQUtleVBhcmFt
ZXRlcnNXaXRoSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpTSEFfMzg0KTsKICAgICB9
IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlM1MTIiKSB7Ci0gICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOworICAgICAgICBhbGdvcml0aG0g
PSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKENyeXB0b0FsZ29y
aXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKICAgICAgICAgcGFyYW1ldGVycyA9
IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlNBMV81
IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVk
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzUpOwor
ICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2luZ2xldG9uKCku
Y3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzUpOwogICAg
ICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0
ZXJzPigpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJSU0EtT0FFUCIp
IHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgp
LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfT0FFUCk7CisgICAgICAgIGFs
Z29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVApOwogICAgICAgICBwYXJhbWV0ZXJzID0g
Y3JlYXRlUlNBS2V5UGFyYW1ldGVyc1dpdGhIYXNoKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OlNIQV8xKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTEyOENCQyIp
IHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgp
LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKKyAgICAgICAgYWxn
b3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2Ug
aWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTE5MkNCQyIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVy
OjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRv
QWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFt
ZSA9PSAiQTI1NkNCQyIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVn
aXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JD
KTsKKyAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAg
cGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4o
KTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTEyOEtXIikgewotICAg
ICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRl
KENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7CisgICAgICAgIGFsZ29yaXRobSA9
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3Jp
dGhtSWRlbnRpZmllcjo6QUVTX0tXKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91
bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2UgaWYgKG1fandr
QWxnb3JpdGhtTmFtZSA9PSAiQTE5MktXIikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZp
ZXI6OkFFU19LVyk7CisgICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXKTsK
ICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFy
YW1ldGVycz4oKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTI1NktX
IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVk
KCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7CisgICAgICAgIGFs
Z29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jcmVhdGUoQ3J5
cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICB0aHJvd1R5cGVFcnJvcihtX2V4ZWMsICJVbnN1cHBvcnRlZCBKV0sgYWxnb3Jp
dGhtICIgKyBtX2p3a0FsZ29yaXRobU5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCmluZGV4IGIyYTY0ODg4ZGZhNjVjZDFk
OTM0NTNiMWYyYzZkYjAxNjlhNDIyOTcuLjZiYWVmY2Q2ZWJkMTk0NTE2OWJhNGFkMmEzYWZiYTIx
Y2RmYTY0MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3VidGxl
Q3J5cHRvQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRs
ZUNyeXB0b0N1c3RvbS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDcnlwdG9BbGdvcml0aG0+IGNyZWF0ZUFsZ29yaXRobUZyb21KU1ZhbHVlKEV4ZWNTdGF0ZSog
ZXgKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKGFsZ29yaXRobUlkZW50aWZp
ZXIpOworICAgIGF1dG8gcmVzdWx0ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRv
bigpLmNyZWF0ZShhbGdvcml0aG1JZGVudGlmaWVyKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQT1JURURfRVJSKTsKICAgICByZXR1cm4g
cmVzdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdp
c3RyeS5jcHAKaW5kZXggN2Y0ZWVlMzRhNGM4OWNkYmY4NjE5OTJhZDk5NWMxYTNmMTVkNGFhNS4u
NDBkZDJjOTM1ZDM1Mzg1MDU2NTZjNWY1YzM1NGQ1YjM0MDQwMjY2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwCkBAIC0zNCw3ICsz
NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkm
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKQorQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkmIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxDcnlwdG9BbGdvcml0aG1SZWdpc3RyeT4gcmVnaXN0cnk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIGIv
U291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgKaW5kZXggZjA5
NDgxNDFmODM1ZjlmYjlhNDk2MDMwNjUxMWFhZjgwZWE2YjUzYS4uYmQ2NGIxNDE3OThmMTlkM2Fm
OTdhMTdhYmE3NDY5NWQ5OTA2OGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRv
L0NyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0Ny
eXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmgKQEAgLTQ1LDcgKzQ1LDcgQEAgY2xhc3MgQ3J5cHRvQWxn
b3JpdGhtUmVnaXN0cnkgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeT47CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgQ3J5cHRvQWxnb3JpdGht
UmVnaXN0cnkmIHNoYXJlZCgpOworICAgIHN0YXRpYyBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSYg
c2luZ2xldG9uKCk7CiAKICAgICBib29sIGdldElkZW50aWZpZXJGb3JOYW1lKGNvbnN0IFN0cmlu
ZyYsIENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXImKTsKICAgICBTdHJpbmcgbmFtZUZvcklkZW50
aWZpZXIoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9L
ZXkuY3BwCmluZGV4IGJhMmYwMmE5YWQ1YmRlZTlmNzZkOWQ2NzQxMDIxOWI0NzgyNTlhNjIuLjUz
ZDFjMWViNTQ1ZjYxNDFlZTA1MTcyNjVhYjEzYzY5ODI1ZDk2M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0
by9DcnlwdG9LZXkuY3BwCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBDcnlwdG9LZXk6OnR5cGUo
KSBjb25zdAogCiB2b2lkIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlw
dG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImIGJ1aWxkZXIpIGNvbnN0CiB7Ci0gICAgYnVp
bGRlci5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkubmFtZUZv
cklkZW50aWZpZXIobV9hbGdvcml0aG0pKTsKKyAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29y
aXRobSkpOwogICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBhZGQgb3RoZXIga2V5cy4KIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL2tleXMvQ3J5cHRvS2V5SE1BQy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9LZXlITUFDLmNwcAppbmRleCA1ZmExMzg0
MWJkOWU3MDM2OThhNTBlZDlkZmZlZmRlNGM1YjM2NGQ0Li5iNTUxZjdhOWVjNjA4NjQ1Y2IzMDgz
NTM4NGFjN2RlMTdhYTNkOTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5
cy9DcnlwdG9LZXlITUFDLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9Dcnlw
dG9LZXlITUFDLmNwcApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIENyeXB0b0tleUhNQUM6OmJ1aWxk
QWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRvQWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJgog
ICAgIENyeXB0b0tleTo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihidWlsZGVyKTsKIAogICAg
IGF1dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxkZXIuY3JlYXRlRW1wdHlDbG9uZSgp
OwotICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5OjpzaGFyZWQoKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpKTsKKyAgICBoYXNo
RGVzY3JpcHRpb25CdWlsZGVyLT5hZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
c2luZ2xldG9uKCkubmFtZUZvcklkZW50aWZpZXIobV9oYXNoKSk7CiAgICAgYnVpbGRlci5hZGQo
Imhhc2giLCAqaGFzaERlc2NyaXB0aW9uQnVpbGRlcik7CiAKICAgICBidWlsZGVyLmFkZCgibGVu
Z3RoIiwgbV9rZXkuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9t
YWMvQ3J5cHRvS2V5UlNBTWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRv
S2V5UlNBTWFjLmNwcAppbmRleCBiNTZhYzIyOTRiMDZiN2I2ODc5NjdkNDE1M2ZlNzM2YWJkN2Zm
YjA0Li5iMzNhNjRlNTdhY2FiNDlhNjVhNTZiODcyOTgyNGRmNmI1MDFhYzc3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCkBAIC0xODEsNyArMTgx
LDcgQEAgdm9pZCBDcnlwdG9LZXlSU0E6OmJ1aWxkQWxnb3JpdGhtRGVzY3JpcHRpb24oQ3J5cHRv
QWxnb3JpdGhtRGVzY3JpcHRpb25CdWlsZGVyJgogCiAgICAgaWYgKG1fcmVzdHJpY3RlZFRvU3Bl
Y2lmaWNIYXNoKSB7CiAgICAgICAgIGF1dG8gaGFzaERlc2NyaXB0aW9uQnVpbGRlciA9IGJ1aWxk
ZXIuY3JlYXRlRW1wdHlDbG9uZSgpOwotICAgICAgICBoYXNoRGVzY3JpcHRpb25CdWlsZGVyLT5h
ZGQoIm5hbWUiLCBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkubmFtZUZvcklkZW50
aWZpZXIobV9oYXNoKSk7CisgICAgICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFt
ZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmll
cihtX2hhc2gpKTsKICAgICAgICAgYnVpbGRlci5hZGQoImhhc2giLCAqaGFzaERlc2NyaXB0aW9u
QnVpbGRlcik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuY3BwCmluZGV4IGIzYWQ2MTk3ZTJiNzFlMWFkODM4MWYzYzczYzZkZWRjNGUwMDU4YjguLmVh
ZTYyYmM3MWY4NjM4MGM3MjUxNmI3ZTcwZDcxY2U3YWUzYjUwNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBCYWNr
Rm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRlbSkKICAg
ICAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllcy5sYXN0KCk7CiAg
ICAgICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgbV9lbnRyeUhh
c2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUo
Kml0ZW0pOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0p
OwogICAgICAgICB9CiAgICAgfQogCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgQmFja0ZvcndhcmRM
aXN0OjphZGRJdGVtKFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IHBycEl0ZW0pCiAgICAgICAgIFJl
ZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1fZW50cmllc1swXTsKICAgICAgICAgbV9lbnRyaWVz
LnJlbW92ZSgwKTsKICAgICAgICAgbV9lbnRyeUhhc2gucmVtb3ZlKGl0ZW0pOwotICAgICAgICBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkucmVtb3ZlKCppdGVtKTsKICAgICAgICAgbV9jdXJyZW50LS07CiAgICAgfQogCkBA
IC0xNzUsNyArMTc1LDcgQEAgdm9pZCBCYWNrRm9yd2FyZExpc3Q6OnNldENhcGFjaXR5KGludCBz
aXplKQogICAgICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBtX2VudHJpZXMubGFzdCgp
OwogICAgICAgICBtX2VudHJpZXMucmVtb3ZlTGFzdCgpOwogICAgICAgICBtX2VudHJ5SGFzaC5y
ZW1vdmUoaXRlbSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsK
KyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOwogICAgIH0KIAog
ICAgIGlmICghc2l6ZSkKQEAgLTI0NSw3ICsyNDUsNyBAQCBib29sIEJhY2tGb3J3YXJkTGlzdDo6
Y2xlYXJBbGxQYWdlQ2FjaGVzKCkKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2VudHJpZXMpIHsK
ICAgICAgICAgaWYgKGl0ZW0tPmlzSW5QYWdlQ2FjaGUoKSkgewogICAgICAgICAgICAgZGlkUmVt
b3ZlQXRMZWFzdE9uZUl0ZW0gPSB0cnVlOwotICAgICAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5yZW1vdmUoKml0ZW0pOworICAgICAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1v
dmUoKml0ZW0pOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBkaWRSZW1vdmVBdExlYXN0
T25lSXRlbTsKQEAgLTI1NSw3ICsyNTUsNyBAQCBib29sIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJB
bGxQYWdlQ2FjaGVzKCkKIHZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbG9zZSgpCiB7CiAgICAgZm9y
IChhdXRvJiBpdGVtIDogbV9lbnRyaWVzKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJl
bW92ZSgqaXRlbSk7CisgICAgICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVt
KTsKICAgICBtX2VudHJpZXMuY2xlYXIoKTsKICAgICBtX2VudHJ5SGFzaC5jbGVhcigpOwogICAg
IG1fcGFnZSA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Nh
Y2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmlu
ZGV4IGVjZjRlYTg2ZTdhMjViOWRjNGIzMjFiYmE2OWRiN2YwNTY0NGYxMTYuLmU2NWNlNmU2NmZj
MWY1OTg5ZWE2YzMzNTBhMjY5NjBjNzI1MDkxNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkRnJhbWUuY3BwCkBAIC0xNzMsNyArMTczLDcgQEAgQ2FjaGVkRnJhbWU6OkNhY2hlZEZyYW1l
KEZyYW1lJiBmcmFtZSkKIAogICAgIGZyYW1lLmxvYWRlcigpLmNsaWVudCgpLnNhdmVQbGF0Zm9y
bURhdGFUb0NhY2hlZEZyYW1lKHRoaXMpOwogCi0gICAgaWYgKG1faXNDb21wb3NpdGVkICYmIFBh
Z2VDYWNoZTo6c2hhcmVkKCkuc2hvdWxkQ2xlYXJCYWNraW5nU3RvcmVzKCkpCisgICAgaWYgKG1f
aXNDb21wb3NpdGVkICYmIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuc2hvdWxkQ2xlYXJCYWNraW5n
U3RvcmVzKCkpCiAgICAgICAgIGZyYW1lLnZpZXcoKS0+Y2xlYXJCYWNraW5nU3RvcmVzKCk7CiAK
ICAgICAvLyBkb2N1bWVudFdpbGxTdXNwZW5kRm9yUGFnZUNhY2hlKCkgY2FuIHNldCB1cCBhIGxh
eW91dCB0aW1lciBvbiB0aGUgRnJhbWVWaWV3LCBzbyBjbGVhciB0aW1lcnMgYWZ0ZXIgdGhhdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKaW5kZXggMWI1MjVkZjI4YzQ0NzZm
ZjIwZjMyNjUxMWEzYTE0YWM1NTJiZDYxYy4uYzNjMzY3ZjQzYzQzNTVlNDY5MjRkMzI4NTNlMGQ3
YTYzN2RkNWI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRl
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAKQEAgLTI4
Niw3ICsyODYsNyBAQCB2b2lkIEhpc3RvcnlJdGVtOjpzZXRVUkxTdHJpbmcoY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCiAKIHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTChjb25zdCBVUkwmIHVybCkK
IHsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqdGhpcyk7CisgICAgUGFnZUNhY2hl
OjpzaW5nbGV0b24oKS5yZW1vdmUoKnRoaXMpOwogICAgIHNldFVSTFN0cmluZyh1cmwuc3RyaW5n
KCkpOwogICAgIGNsZWFyRG9jdW1lbnRTdGF0ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdl
Q2FjaGUuY3BwCmluZGV4IDIyZDY4MDI1OGYzY2Q0YWFkYTgyN2QzOGE3ODdiN2IwYjY0NzQzNjIu
Ljk2MjA5OTAzODVhM2MzNTAxNDA5MmIwYzllYmVmOGUwYzhhY2RhZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgdm9pZCBsb2dD
YW5DYWNoZVBhZ2VEZWNpc2lvbihQYWdlJiBwYWdlKQogICAgIGRpYWdub3N0aWNMb2dnaW5nQ2xp
ZW50LmxvZ0RpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdChEaWFnbm9zdGljTG9nZ2luZ0tleXM6
OnBhZ2VDYWNoZUtleSgpLCBlbXB0eVN0cmluZygpLCByZWplY3RSZWFzb25zID8gRGlhZ25vc3Rp
Y0xvZ2dpbmdSZXN1bHRGYWlsIDogRGlhZ25vc3RpY0xvZ2dpbmdSZXN1bHRQYXNzKTsKIH0KIAot
UGFnZUNhY2hlJiBQYWdlQ2FjaGU6OnNoYXJlZCgpCitQYWdlQ2FjaGUmIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGFnZUNhY2hlPiBnbG9iYWxQ
YWdlQ2FjaGU7CiAgICAgcmV0dXJuIGdsb2JhbFBhZ2VDYWNoZTsKQEAgLTQ4NCw3ICs0ODQsNyBA
QCBDYWNoZWRQYWdlKiBQYWdlQ2FjaGU6OmdldChIaXN0b3J5SXRlbSYgaXRlbSwgUGFnZSogcGFn
ZSkgY29uc3QKICAgICBpZiAoY2FjaGVkUGFnZS0+aGFzRXhwaXJlZCgpKSB7CiAgICAgICAgIExP
RyhQYWdlQ2FjaGUsICJOb3QgcmVzdG9yaW5nIHBhZ2UgZm9yICVzIGZyb20gYmFjay9mb3J3YXJk
IGNhY2hlIGJlY2F1c2UgY2FjaGUgZW50cnkgaGFzIGV4cGlyZWQiLCBpdGVtLnVybCgpLnN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgbG9nUGFnZUNhY2hlRmFpbHVyZURpYWdub3N0
aWNNZXNzYWdlKHBhZ2UsIERpYWdub3N0aWNMb2dnaW5nS2V5czo6ZXhwaXJlZEtleSgpKTsKLSAg
ICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoaXRlbSk7CisgICAgICAgIFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkucmVtb3ZlKGl0ZW0pOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9CiAgICAgcmV0dXJuIGNhY2hlZFBhZ2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
aXN0b3J5L1BhZ2VDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuaApp
bmRleCA5NTM2YTlmODZkZjIxNGRhMzFhYzRhZmU5ZTM3NDI3YTQ4NjUzOTFmLi4wZjJmYjQ5NjM4
MmI3NWVjYzc5Njc1YjBjOWYwOTI2MmFhMTA3MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNh
Y2hlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgUGFnZUNhY2hlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQYWdlQ2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICAvLyBGdW5jdGlvbiB0byBvYnRhaW4gdGhlIGdsb2JhbCBwYWdlIGNhY2hlLgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBQYWdlQ2FjaGUmIHNoYXJlZCgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBQYWdlQ2FjaGUmIHNpbmdsZXRvbigpOwogCiAgICAgYm9vbCBjYW5DYWNoZShQ
YWdlKikgY29uc3Q7CiAKQEAgLTczLDcgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2hv
dWxkQ2xlYXJCYWNraW5nU3RvcmVzKGJvb2wgZmxhZykgeyBtX3Nob3VsZENsZWFyQmFja2luZ1N0
b3JlcyA9IGZsYWc7IH0KIAogcHJpdmF0ZToKLSAgICBQYWdlQ2FjaGUoKSA9IGRlZmF1bHQ7IC8v
IFVzZSBzaGFyZWQoKSBpbnN0ZWFkLgorICAgIFBhZ2VDYWNoZSgpID0gZGVmYXVsdDsgLy8gVXNl
IHNpbmdsZXRvbigpIGluc3RlYWQuCiAgICAgflBhZ2VDYWNoZSgpID0gZGVsZXRlOyAvLyBNYWtl
IHN1cmUgbm9ib2R5IGFjY2lkZW50YWxseSBjYWxscyBkZWxldGUgLS0gV2ViQ29yZSBkb2VzIG5v
dCBkZWxldGUgc2luZ2xldG9ucy4KIAogICAgIHN0YXRpYyBib29sIGNhbkNhY2hlUGFnZUNvbnRh
aW5pbmdUaGlzRnJhbWUoRnJhbWUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAppbmRleCA4ZDFlYzQyZjNh
MTBmMDJmZTBhODlhNDJhMTY0YWQ2ZmJmYzU2NTI5Li5hMGYyOGRjODA1ODRkNmY3ZmZmZDA4NDM1
NTI2OTY5MTJmYTBjYzFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAg
Ym9vbCBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbTo6YWxsb3dzUmVxdWVzdChT
dG9yZWRDcmVkZW50aWFscyBpbmNsdWQKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotQ3Jvc3NPcmln
aW5QcmVmbGlnaHRSZXN1bHRDYWNoZSYgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6
c2hhcmVkKCkKK0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUmIENyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJl
ZmxpZ2h0UmVzdWx0Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09yaWdpblBy
ZWZsaWdodFJlc3VsdENhY2hlLmgKaW5kZXggZTdkMjgxYjc5MTdmMDA2YzcyNzYzMzlkMzhjODFh
Y2QzZGUwNzhhNi4uZjQ3ODVmZmYyODg4YWJlOGIxMTVhN2ZkODgxYzE1ZDlkOTk1NTIyZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0
Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZS5oCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENyb3NzT3JpZ2luUHJlZmxp
Z2h0UmVzdWx0Q2FjaGUpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlJiBz
aGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIGFwcGVuZEVudHJ5KGNvbnN0IFN0
cmluZyYgb3JpZ2luLCBjb25zdCBVUkwmLCBzdGQ6OnVuaXF1ZV9wdHI8Q3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZUl0ZW0+KTsKICAgICBib29sIGNhblNraXBQcmVmbGlnaHQoY29uc3Qg
U3RyaW5nJiBvcmlnaW4sIGNvbnN0IFVSTCYsIFN0b3JlZENyZWRlbnRpYWxzLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgY29uc3QgSFRUUEhlYWRlck1hcCYgcmVxdWVzdEhlYWRlcnMpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50VGhyZWFkYWJsZUxvYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAppbmRl
eCA5NTI5ODExODJkMGQzZDRiZWRmZmEwNGIxZDNiM2UxYTdkOTMyYTdmLi5lMWFiMTM4OTE4ZDFk
OTdjNzIwODMxZmY1ODcyOGRjZGRiMzllN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyLmNwcApAQCAtMTA0LDcgKzEwNCw3IEBAIHZv
aWQgRG9jdW1lbnRUaHJlYWRhYmxlTG9hZGVyOjptYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzCiAgICAgICAgIG1fc2ltcGxlUmVxdWVzdCA9IGZhbHNlOwog
ICAgICAgICBtX2FjdHVhbFJlcXVlc3QgPSBXVEY6Om1vdmUoY3Jvc3NPcmlnaW5SZXF1ZXN0KTsK
IAotICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCku
Y2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJl
cXVlc3QtPnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygpLCBtX2FjdHVhbFJlcXVl
c3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKQor
ICAgICAgICBpZiAoQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCku
Y2FuU2tpcFByZWZsaWdodChzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJl
cXVlc3QtPnVybCgpLCBtX29wdGlvbnMuYWxsb3dDcmVkZW50aWFscygpLCBtX2FjdHVhbFJlcXVl
c3QtPmh0dHBNZXRob2QoKSwgbV9hY3R1YWxSZXF1ZXN0LT5odHRwSGVhZGVyRmllbGRzKCkpKQog
ICAgICAgICAgICAgcHJlZmxpZ2h0U3VjY2VzcygpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBtYWtlQ3Jvc3NPcmlnaW5BY2Nlc3NSZXF1ZXN0V2l0aFByZWZsaWdodCgqbV9hY3R1YWxSZXF1
ZXN0KTsKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIERvY3VtZW50VGhyZWFkYWJsZUxvYWRlcjo6
ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29ucwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRS
ZXN1bHRDYWNoZTo6c2hhcmVkKCkuYXBwZW5kRW50cnkoc2VjdXJpdHlPcmlnaW4oKS0+dG9TdHJp
bmcoKSwgbV9hY3R1YWxSZXF1ZXN0LT51cmwoKSwgV1RGOjptb3ZlKHByZWZsaWdodFJlc3VsdCkp
OworICAgICAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5h
cHBlbmRFbnRyeShzZWN1cml0eU9yaWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3Qt
PnVybCgpLCBXVEY6Om1vdmUocHJlZmxpZ2h0UmVzdWx0KSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKCFtX3NhbWVPcmlnaW5SZXF1ZXN0ICYmIG1fb3B0aW9ucy5jcm9zc09yaWdpblJlcXVl
c3RQb2xpY3kgPT0gVXNlQWNjZXNzQ29udHJvbCkgewogICAgICAgICAgICAgaWYgKCFwYXNzZXNB
Y2Nlc3NDb250cm9sQ2hlY2socmVzcG9uc2UsIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKCks
IHNlY3VyaXR5T3JpZ2luKCksIGFjY2Vzc0NvbnRyb2xFcnJvckRlc2NyaXB0aW9uKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNzMxOTA4ODc1ZjFhMGRiYTMzNzAy
Yjc4MTU4YTAyNzQ1MWFlNjNmYi4uZjg4NGY4OWE5OTI3NzEzYzliOWQ2NDhkNDE1ZWI3ZDY1ZmFi
M2Y0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xNzQxLDcgKzE3
NDEsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogCiAgICAg
c3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2U7CiAgICAgaWYgKG1fbG9hZGlu
Z0Zyb21DYWNoZWRQYWdlICYmIGhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSkKLSAgICAgICAg
Y2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkudGFrZSgqaGlzdG9yeSgpLnByb3Zpc2lv
bmFsSXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CisgICAgICAgIGNhY2hlZFBhZ2UgPSBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLnRha2UoKmhpc3RvcnkoKS5wcm92aXNpb25hbEl0ZW0oKSwgbV9mcmFt
ZS5wYWdlKCkpOwogCiAgICAgTE9HKFBhZ2VDYWNoZSwgIldlYkNvcmVMb2FkaW5nICVzOiBBYm91
dCB0byBjb21taXQgcHJvdmlzaW9uYWwgbG9hZCBmcm9tIHByZXZpb3VzIFVSTCAnJXMnIHRvIG5l
dyBVUkwgJyVzJyIsIG1fZnJhbWUudHJlZSgpLnVuaXF1ZU5hbWUoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpLAogICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCkgPyBtX2ZyYW1lLmRvY3VtZW50KCkt
PnVybCgpLnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLnV0ZjgoKS5kYXRhKCkgOiAi
IiwKQEAgLTE3NTgsMTEgKzE3NTgsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6Y29tbWl0UHJvdmlz
aW9uYWxMb2FkKCkKICAgICAgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlBydW5pbmcgcGFn
ZSBjYWNoZSBiZWNhdXNlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZSBhdDogJXMiLCBfX1BSRVRUWV9G
VU5DVElPTl9fKTsKICAgICAgICAgICAgIExPRyhQYWdlQ2FjaGUsICJQcnVuaW5nIHBhZ2UgY2Fj
aGUgdG8gMCBkdWUgdG8gbWVtb3J5IHByZXNzdXJlIik7CiAgICAgICAgICAgICAvLyBEb24ndCBj
YWNoZSBhbnkgcGFnZSBpZiB3ZSBhcmUgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgotICAgICAgICAg
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpN
ZW1vcnlQcmVzc3VyZSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5l
VG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKICAgICAgICAgfSBl
bHNlIGlmIChzeXN0ZW1NZW1vcnlMZXZlbCgpIDw9IG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVu
ZVBhZ2VDYWNoZSkgewogICAgICAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiUHJ1bmluZyBw
YWdlIGNhY2hlIGJlY2F1c2Ugc3lzdGVtIG1lbW9yeSBsZXZlbCBpcyAlZCBhdDogJXMiLCBzeXN0
ZW1NZW1vcnlMZXZlbCgpLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKLSAgICAgICAgICAgIExPRyhQ
YWdlQ2FjaGUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgdG8gJWQgZHVlIHRvIGxvdyBtZW1vcnkgKGxl
dmVsICVkIGxlc3Mgb3IgZXF1YWwgdG8gJWQgdGhyZXNob2xkKSIsIFBhZ2VDYWNoZTo6c2hhcmVk
KCkubWF4U2l6ZSgpIC8gMiwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgbWVtb3J5TGV2ZWxUaHJlc2hv
bGRUb1BydW5lUGFnZUNhY2hlKTsKLSAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucHJ1
bmVUb1NpemVOb3coUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkgLyAyLCBQcnVuaW5nUmVh
c29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAgICAgICAgICBMT0coUGFnZUNhY2hlLCAiUHJ1bmlu
ZyBwYWdlIGNhY2hlIHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAlZCBsZXNzIG9yIGVx
dWFsIHRvICVkIHRocmVzaG9sZCkiLCBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1heFNpemUoKSAv
IDIsIHN5c3RlbU1lbW9yeUxldmVsKCksIG1lbW9yeUxldmVsVGhyZXNob2xkVG9QcnVuZVBhZ2VD
YWNoZSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93
KFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWF4U2l6ZSgpIC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVt
b3J5UHJlc3N1cmUpOwogICAgICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0xNzcyLDggKzE3NzIs
OCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgIC8vIENo
ZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNhY2hlIHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0aW5n
IGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2ZvcndhcmQgY2FjaGUuCiAgICAgLy8gV2UgYXJlIGRv
aW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtub3cgZm9yIHN1cmUgdGhhdCBhIG5ldyBwYWdlIGlz
IGFib3V0IHRvIGJlIGxvYWRlZC4KICAgICBIaXN0b3J5SXRlbSYgaXRlbSA9ICpoaXN0b3J5KCku
Y3VycmVudEl0ZW0oKTsKLSAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIFBhZ2VD
YWNoZTo6c2hhcmVkKCkuY2FuQ2FjaGUobV9mcmFtZS5wYWdlKCkpICYmICFpdGVtLmlzSW5QYWdl
Q2FjaGUoKSkKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5hZGQoaXRlbSwgKm1fZnJhbWUu
cGFnZSgpKTsKKyAgICBpZiAoIW1fZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6
c2luZ2xldG9uKCkuY2FuQ2FjaGUobV9mcmFtZS5wYWdlKCkpICYmICFpdGVtLmlzSW5QYWdlQ2Fj
aGUoKSkKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5hZGQoaXRlbSwgKm1fZnJhbWUu
cGFnZSgpKTsKIAogICAgIGlmIChtX2xvYWRUeXBlICE9IEZyYW1lTG9hZFR5cGU6OlJlcGxhY2Up
CiAgICAgICAgIGNsb3NlT2xkRGF0YVNvdXJjZXMoKTsKQEAgLTMxNTksNyArMzE1OSw3IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0
ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiAgICAgLy8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNh
biB0cmF2ZXJzZSBhbnkgY2hpbGQgaXRlbXMgYXMgY2hpbGQgZnJhbWVzIGxvYWQKICAgICBoaXN0
b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKCZpdGVtKTsKIAotICAgIGlmIChDYWNoZWRQYWdlKiBj
YWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS5nZXQoaXRlbSwgbV9mcmFtZS5wYWdlKCkp
KSB7CisgICAgaWYgKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNpbmdsZXRv
bigpLmdldChpdGVtLCBtX2ZyYW1lLnBhZ2UoKSkpIHsKICAgICAgICAgYXV0byBkb2N1bWVudExv
YWRlciA9IGNhY2hlZFBhZ2UtPmRvY3VtZW50TG9hZGVyKCk7CiAgICAgICAgIGRvY3VtZW50TG9h
ZGVyLT5zZXRUcmlnZ2VyaW5nQWN0aW9uKE5hdmlnYXRpb25BY3Rpb24oZG9jdW1lbnRMb2FkZXIt
PnJlcXVlc3QoKSwgbG9hZFR5cGUsIGZhbHNlKSk7CiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5z
ZXRMYXN0Q2hlY2tlZFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKaW5kZXggODMzZTU4ODRiYWEwN2IzNWIxYjM1
ZTVmNGJhYzM3ZGIzOWM5ZGRhMi4uYWNmOTA5MDZlYWRkMjA5ZDBkMDRiNGE4ZGY4NzBlODBmNWU5
N2RlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBA
IC0yMzgsNyArMjM4LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJl
bnRJdGVtQ2FjaGVkUGFnZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdoZW4gd2UgYXJl
IHByZS1jb21taXQsIHRoZSBjdXJyZW50SXRlbSBpcyB3aGVyZSBhbnkgcGFnZSBjYWNoZSBkYXRh
IHJlc2lkZXMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQ
YWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoKmN1cnJlbnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6
c2luZ2xldG9uKCkudGFrZSgqY3VycmVudEl0ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOwogICAgIGlm
ICghY2FjaGVkUGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRlRm9yUmVsb2FkKCkKICNlbmRpZgogCiAgICAgaWYg
KG1fY3VycmVudEl0ZW0pIHsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKm1f
Y3VycmVudEl0ZW0pOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqbV9j
dXJyZW50SXRlbSk7CiAgICAgCiAgICAgICAgIGlmIChtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBl
KCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVsb2FkIHx8IG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUo
KSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luKQogICAgICAgICAgICAgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGNiMzk0ZWE2NTc3ODg3MjYzNTZjMTg1NDg1YTVm
MjhkMTFmOTM1OTEuLmVhMTYxNThlNzBjYTA2MThiMmZjMjZiYTU5NjRmNWJiNjFhZTg4ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTQ1Myw3ICs0NTMsNyBAQCBET01XaW5kb3c6
On5ET01XaW5kb3coKQogCiAjaWYgRU5BQkxFKEdBTUVQQUQpCiAgICAgaWYgKG1fZ2FtZXBhZEV2
ZW50TGlzdGVuZXJDb3VudCkKLSAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpLnVucmVn
aXN0ZXJET01XaW5kb3codGhpcyk7CisgICAgICAgIEdhbWVwYWRNYW5hZ2VyOjpzaW5nbGV0b24o
KS51bnJlZ2lzdGVyRE9NV2luZG93KHRoaXMpOwogI2VuZGlmCiB9CiAKQEAgLTUxOSw3ICs1MTks
NyBAQCB2b2lkIERPTVdpbmRvdzo6d2lsbERldGFjaERvY3VtZW50RnJvbUZyYW1lKCkKIHZvaWQg
RE9NV2luZG93OjppbmNyZW1lbnRHYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KCkKIHsKICAgICBp
ZiAoKyttX2dhbWVwYWRFdmVudExpc3RlbmVyQ291bnQgPT0gMSkKLSAgICAgICAgR2FtZXBhZE1h
bmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyRE9NV2luZG93KHRoaXMpOworICAgICAgICBHYW1lcGFk
TWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJET01XaW5kb3codGhpcyk7CiB9CiAKIHZvaWQg
RE9NV2luZG93OjpkZWNyZW1lbnRHYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KCkKQEAgLTUyNyw3
ICs1MjcsNyBAQCB2b2lkIERPTVdpbmRvdzo6ZGVjcmVtZW50R2FtZXBhZEV2ZW50TGlzdGVuZXJD
b3VudCgpCiAgICAgQVNTRVJUKG1fZ2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudCk7CiAKICAgICBp
ZiAoIS0tbV9nYW1lcGFkRXZlbnRMaXN0ZW5lckNvdW50KQotICAgICAgICBHYW1lcGFkTWFuYWdl
cjo6c2hhcmVkKCkudW5yZWdpc3RlckRPTVdpbmRvdyh0aGlzKTsKKyAgICAgICAgR2FtZXBhZE1h
bmFnZXI6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJET01XaW5kb3codGhpcyk7CiB9CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAppbmRleCBiNGFiNmNh
MDlhMDUzNzUwNzMxODI5NGY4ZDkyYjljMzFlMGE4MmI0Li5jZTExNDhiYjBlMDkyNDBmMzYwMWNk
ZmVmN2I1ZTgzMmQ0MzM3Nzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVn
UGFnZU92ZXJsYXlzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJs
YXlzLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgUmVnaW9uT3ZlcmxheTo6cmVjb21wdXRl
UmVnaW9uKCkKICAgICAgICAgbV9vdmVybGF5LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotRGVi
dWdQYWdlT3ZlcmxheXMmIERlYnVnUGFnZU92ZXJsYXlzOjpzaGFyZWQoKQorRGVidWdQYWdlT3Zl
cmxheXMmIERlYnVnUGFnZU92ZXJsYXlzOjpzaW5nbGV0b24oKQogewogICAgIGlmICghc2hhcmVk
RGVidWdPdmVybGF5cykKICAgICAgICAgc2hhcmVkRGVidWdPdmVybGF5cyA9IG5ldyBEZWJ1Z1Bh
Z2VPdmVybGF5czsKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIERlYnVnUGFnZU92ZXJsYXlzOjpz
ZXR0aW5nc0NoYW5nZWQoTWFpbkZyYW1lJiBmcmFtZSkKICAgICBpZiAoIWFjdGl2ZU92ZXJsYXlS
ZWdpb25zICYmICFoYXNPdmVybGF5cyhmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERl
YnVnUGFnZU92ZXJsYXlzOjpzaGFyZWQoKS51cGRhdGVPdmVybGF5UmVnaW9uVmlzaWJpbGl0eShm
cmFtZSwgYWN0aXZlT3ZlcmxheVJlZ2lvbnMpOworICAgIERlYnVnUGFnZU92ZXJsYXlzOjpzaW5n
bGV0b24oKS51cGRhdGVPdmVybGF5UmVnaW9uVmlzaWJpbGl0eShmcmFtZSwgYWN0aXZlT3Zlcmxh
eVJlZ2lvbnMpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVn
UGFnZU92ZXJsYXlzLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmgK
aW5kZXggMWY2NDFmZDI4YTQyMzJjYjQ3OTUzZDYyMGY1YmY0ZGY1NDgwNmJlYy4uNTQ2MTBhMjQ0
YmI2OTQ3YjBkOThhYjZmMzRlNGY1MWViMWNjMzliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVi
dWdQYWdlT3ZlcmxheXMuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBSZWdpb25PdmVybGF5Owog
CiBjbGFzcyBEZWJ1Z1BhZ2VPdmVybGF5cyB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIERlYnVnUGFn
ZU92ZXJsYXlzJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgRGVidWdQYWdlT3ZlcmxheXMmIHNpbmds
ZXRvbigpOwogCiAgICAgZW51bSBjbGFzcyBSZWdpb25UeXBlIHsKICAgICAgICAgV2hlZWxFdmVu
dEhhbmRsZXJzLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCA3OGNiMTkzNTMzODliNzY4OGU0N2I1
YjVmNmIyZjUwMDBkMDQ3ZTk3Li45ODhhZDA2ZGNjOTRjYjgxZmQ4MDRiMWUxNGI4Zjc4N2JlMmFl
ZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtOTg5LDcgKzk4OSw3IEBAIHZvaWQgRnJhbWU6
OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMoZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRl
eHRab29tRmFjdG9yCiAgICAgfQogCiAgICAgaWYgKGlzTWFpbkZyYW1lKCkpCi0gICAgICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMo
KnBhZ2UpOwogfQogCiBmbG9hdCBGcmFtZTo6ZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlLmNwcAppbmRleCA3ZDk3YWVmMGUyYmEyMjJlNTU5ZTVjYmY4ZGViMjg2ZGEyZGU3MDdj
Li4yN2MwNGI1OTU4ZGNiYWYyZGI1NWY2ZmJlMjNhNTE3YmY2ZDIxNTUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKQEAgLTgzOSw5ICs4MzksOSBAQCB2b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9y
KGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIHNldE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygp
OwogCiAgICAgbWFpbkZyYW1lKCkuZGV2aWNlT3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0g
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoKnRo
aXMpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVD
aGFuZ2VkKCp0aGlzKTsKIAotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVs
bFN0eWxlUmVjYWxjKCp0aGlzKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdl
c0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7CiAgICAgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVE
b2N1bWVudE1hcmtlclJlc291cmNlcygpOwogCiAgICAgbWFpbkZyYW1lKCkucGFnZU92ZXJsYXlD
b250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNlU2NhbGVGYWN0b3IoKTsKQEAgLTkyMSw3ICs5MjEs
NyBAQCB2b2lkIFBhZ2U6OnNldFBhZ2luYXRpb24oY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlv
bikKICAgICBtX3BhZ2luYXRpb24gPSBwYWdpbmF0aW9uOwogCiAgICAgc2V0TmVlZHNSZWNhbGNT
dHlsZUluQWxsRnJhbWVzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JG
dWxsU3R5bGVSZWNhbGMoKnRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1Bh
Z2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKIH0KIAogdW5zaWduZWQgUGFnZTo6cGFnZUNv
dW50KCkgY29uc3QKQEAgLTE2NjEsNyArMTY2MSw3IEBAIHZvaWQgUGFnZTo6c2V0VmlzaXRlZExp
bmtTdG9yZShSZWY8VmlzaXRlZExpbmtTdG9yZT4mJiB2aXNpdGVkTGlua1N0b3JlKQogICAgIG1f
dmlzaXRlZExpbmtTdG9yZS0+YWRkUGFnZSgqdGhpcyk7CiAKICAgICBpbnZhbGlkYXRlU3R5bGVz
Rm9yQWxsTGlua3MoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxT
dHlsZVJlY2FsYygqdGhpcyk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNG
b3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwogfQogCiBTZXNzaW9uSUQgUGFnZTo6c2Vzc2lvbklE
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAppbmRleCBkYWMyNmYyNzhkN2ExNzUy
MWYyOWQ3ZmEyY2QxMWM1NDYyZTI5NGI3Li5hMDhhOTI5YmVmYmQzYjkzZDA2NTc0MjEwMTM0NzYx
YWNlNTBjMjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCkBAIC0xMTEsNyArMTExLDcg
QEAgdm9pZCBQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlc0NoYW5nZWQoKQogewogICAgIGZv
ciAoYXV0byBpdCA9IG1fcGFnZXMuYmVnaW4oKSwgZW5kID0gbV9wYWdlcy5lbmQoKTsgaXQgIT0g
ZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwot
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hh
bmdlZCgpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yQ2FwdGlvblBy
ZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogCiBDYXB0aW9uVXNlclByZWZlcmVuY2VzKiBQYWdlR3Jv
dXA6OmNhcHRpb25QcmVmZXJlbmNlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGY3
YmRjNGM2MDAwNDVkOTcyZTJkZDZkZjYxMDI2OTQ3NWQ3YmNmYzQuLjUzZDJmOTU1NWYzMDE2ZjIy
YWVlN2Y2YjQ2Y2MyZDJjOWI0ZjIxNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC01
MTIsNyArNTEyLDcgQEAgdm9pZCBTZXR0aW5nczo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQ
YWdlQ2FjaGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV91c2VzUGFnZUNhY2hlKQot
ICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFz
b246Ok5vbmUpOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93
KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwogfQogCiB2b2lkIFNldHRpbmdzOjpzZXRGb250UmVu
ZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5jcHAKaW5kZXggOWM4ZTJkMTk5M2YyNDJk
N2VjYzk1OWZhMmVlM2E1ZjcyMzQxNTU3NS4uZjI2M2QwYWQ5NDQ5ZmYzNzkzYjRkNjI2N2M0YzM5
OGY5YzQxYmJjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUaHJlYWQuY3BwCkBAIC00MCwyMiArNDAsMjIgQEAgU2Nyb2xsaW5nVGhyZWFkOjpTY3Jv
bGxpbmdUaHJlYWQoKQogCiBib29sIFNjcm9sbGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkK
IHsKLSAgICBpZiAoIXNoYXJlZCgpLm1fdGhyZWFkSWRlbnRpZmllcikKKyAgICBpZiAoIXNpbmds
ZXRvbigpLm1fdGhyZWFkSWRlbnRpZmllcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBzaGFyZWQoKS5tX3RocmVhZElkZW50aWZpZXI7Cisg
ICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBzaW5nbGV0b24oKS5tX3RocmVhZElkZW50aWZp
ZXI7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGZ1bmN0aW9uKQogewotICAgIHNoYXJlZCgpLmNyZWF0ZVRocmVhZElmTmVlZGVkKCk7
CisgICAgc2luZ2xldG9uKCkuY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKIAogICAgIHsKLSAgICAg
ICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soc2hhcmVkKCkubV9mdW5jdGlvbnNN
dXRleCk7Ci0gICAgICAgIHNoYXJlZCgpLm1fZnVuY3Rpb25zLmFwcGVuZChmdW5jdGlvbik7Cisg
ICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrKHNpbmdsZXRvbigpLm1fZnVu
Y3Rpb25zTXV0ZXgpOworICAgICAgICBzaW5nbGV0b24oKS5tX2Z1bmN0aW9ucy5hcHBlbmQoZnVu
Y3Rpb24pOwogICAgIH0KIAotICAgIHNoYXJlZCgpLndha2VVcFJ1bkxvb3AoKTsKKyAgICBzaW5n
bGV0b24oKS53YWtlVXBSdW5Mb29wKCk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNw
YXRjaEJhcnJpZXIoc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKQEAgLTY1LDcgKzY1
LDcgQEAgdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihzdGQ6OmZ1bmN0aW9u
PHZvaWQgKCk+IGZ1bmN0aW9uKQogICAgIH0pOwogfQogCi1TY3JvbGxpbmdUaHJlYWQmIFNjcm9s
bGluZ1RocmVhZDo6c2hhcmVkKCkKK1Njcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpz
aW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTY3JvbGxpbmdUaHJlYWQ+
IHNjcm9sbGluZ1RocmVhZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdUaHJlYWQuaAppbmRleCA3ZjEzNjhlNjNiNGIzMzU0OGQ5YmUyOTlmZDgxMzhmNDIy
ZWNmYTk3Li4yNjJjZGYxOGE5NjQ4MjQ3ZDk5N2I1YzJkOGIzMTU1ZDQ0N2FmYWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaApAQCAtNTcs
NyArNTcsNyBAQCBwcml2YXRlOgogCiAgICAgU2Nyb2xsaW5nVGhyZWFkKCk7CiAKLSAgICBzdGF0
aWMgU2Nyb2xsaW5nVGhyZWFkJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgU2Nyb2xsaW5nVGhyZWFk
JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgY3JlYXRlVGhyZWFkSWZOZWVkZWQoKTsKICAgICBz
dGF0aWMgdm9pZCB0aHJlYWRDYWxsYmFjayh2b2lkKiBzY3JvbGxpbmdUaHJlYWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5jcHAKaW5kZXggMDUwNGE2OGI4ZTU3
OWUyYzhlMzFmNjc0YjU1M2E2NzA2YmY5MGYzZi4uYjBmNDkyN2YxMjNiMTA5OWY0YzA4YjY1ZTU1
ZmMxYTEwZTQzODBiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBh
ZFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlk
ZXIuY3BwCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIEdh
bWVwYWRQcm92aWRlciogc2hhcmVkUHJvdmlkZXIgPSBudWxscHRyOwogCi1HYW1lcGFkUHJvdmlk
ZXImIEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkKK0dhbWVwYWRQcm92aWRlciYgR2FtZXBhZFBy
b3ZpZGVyOjpzaW5nbGV0b24oKQogewogICAgIGlmICghc2hhcmVkUHJvdmlkZXIpIHsKICAgICAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVwYWRQcm92aWRlcj4gZGVmYXVsdFByb3ZpZGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFByb3ZpZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaAppbmRleCAyNGE5Yzdl
NDI0NDliOTA4MGZmMmQxMDNlZTc5YzA1YzBkNDRlMjAyLi44ZDFjNTMxNGFkNGFiNDYwNmU4OWE0
MmUwYmU3ODAyZTVhZDE4ZjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
YW1lcGFkUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJv
dmlkZXIuaApAQCAtMzksNyArMzksNyBAQCBjbGFzcyBHYW1lcGFkUHJvdmlkZXIgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkdhbWVwYWRQcm92aWRlcigpIHsgfQogCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIEdhbWVwYWRQcm92aWRlciYgc2hhcmVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIEdhbWVwYWRQcm92aWRlciYgc2luZ2xldG9uKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIHZvaWQgc2V0U2hhcmVkUHJvdmlkZXIoR2FtZXBhZFByb3ZpZGVyJik7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc3RhcnRNb25pdG9yaW5nR2FtZXBhZHMoR2FtZXBhZFByb3ZpZGVyQ2xpZW50
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhh
bmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1cmVIYW5kbGVy
LmNwcAppbmRleCBiNTAyZGViMzBlZTNlYzRmNTllNjQ0ZDg5OGJjNjA3NWMxZDNlN2Q3Li5lNTI0
Njk2MWYzZmExNDU3OWQxNjdmODFjYWRjNTI4NWYzZTc0ODFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAKQEAgLTEwMiw3ICsxMDIs
NyBAQCB2b2lkIE1lbW9yeVByZXNzdXJlSGFuZGxlcjo6cmVsZWFzZUNyaXRpY2FsTWVtb3J5KCkK
ICAgICAgICAgUmVsaWVmTG9nZ2VyIGxvZygiRW1wdHkgdGhlIFBhZ2VDYWNoZSIpOwogICAgICAg
ICAvLyBSaWdodCBub3csIHRoZSBvbmx5IHJlYXNvbiB3ZSBjYWxsIHJlbGVhc2UgY3JpdGljYWwg
bWVtb3J5IHdoaWxlIG5vdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUgaXMgaWYgdGhlIHByb2Nlc3Mg
aXMgYWJvdXQgdG8gYmUgc3VzcGVuZGVkLgogICAgICAgICBQcnVuaW5nUmVhc29uIHBydW5pbmdS
ZWFzb24gPSBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSA/
IFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlIDogUHJ1bmluZ1JlYXNvbjo6UHJvY2Vzc1N1
c3BlbmRlZDsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBw
cnVuaW5nUmVhc29uKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5wcnVuZVRvU2l6
ZU5vdygwLCBwcnVuaW5nUmVhc29uKTsKICAgICB9CiAKICAgICB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDRmYmQ5OTlkNmY3OTQ5
MDQ5NjYwZjlhZDdlOGY3OTQ2OGNiYWM4MjAuLjNhZTU3MjE2NDg5YWJmOWM3M2M5OTQ0ZWQwNDM0
NDYzMDQ2YjQ1YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCkBAIC0xMjcsNyArMTI3LDcgQEAgcHVibGljOgogICAgICAgICBtX3B1cmdl
VGltZXIuc3RhcnRPbmVTaG90KHNjcmF0Y2hCdWZmZXJQdXJnZUludGVydmFsKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIFNjcmF0Y2hCdWZmZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBTY3Jh
dGNoQnVmZmVyJiBzaW5nbGV0b24oKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIHRpbWVyRmlyZWQo
KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLVNjcmF0Y2hCdWZm
ZXImIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpCitTY3JhdGNoQnVmZmVyJiBTY3JhdGNoQnVmZmVy
OjpzaW5nbGV0b24oKQogewogICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChTY3Jh
dGNoQnVmZmVyLCBzY3JhdGNoQnVmZmVyLCAoKSk7CiAgICAgcmV0dXJuIHNjcmF0Y2hCdWZmZXI7
CkBAIC01NjcsNyArNTY3LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coR3Jh
cGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmUKIAogdm9pZCBTaGFk
b3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3Qg
SW50UmVjdCYgbGF5ZXJSZWN0KQogewotICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6
OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CisgICAgbV9sYXll
ckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXll
clJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIW1fbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhv
dXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGMKICAgICBidWZmZXJS
ZWxhdGl2ZVNoYWRvd2VkUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAg
ICAgLy8gT25seSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0cyBjYWNoZWQgY29u
dGVudHMgZG9uJ3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3Jh
dGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBD
b2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IsIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRS
ZWN0LCBzaGFkb3dlZFJlY3QucmFkaWkoKSwgbV9sYXllclNpemUpOworICAgIGJvb2wgcmVkcmF3
TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2V0Q2FjaGVkU2hhZG93VmFsdWVz
KG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJS
ZWxhdGl2ZVNoYWRvd2VkUmVjdCwgc2hhZG93ZWRSZWN0LnJhZGlpKCksIG1fbGF5ZXJTaXplKTsK
ICAgICBpZiAocmVkcmF3TmVlZGVkKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwpAQCAtNTk3LDEyICs1OTcs
MTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGMKICAgICAKICAgICBkcmF3U2hhZG93QnVmZmVy
KGdyYXBoaWNzQ29udGV4dCk7CiAgICAgbV9sYXllckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVm
ZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hC
dWZmZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KQogewotICAgIG1f
bGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5
ZXJSZWN0LnNpemUoKSk7CisgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xl
dG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKICAgICBpZiAoIW1fbGF5
ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MTMsNyArNjEzLDcgQEAgdm9pZCBTaGFk
b3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LAogICAgIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QubW92ZShtX2xheWVyQ29u
dGV4dFRyYW5zbGF0aW9uKTsKIAogICAgIC8vIE9ubHkgcmVkcmF3IGluIHRoZSBzY3JhdGNoIGJ1
ZmZlciBpZiBpdHMgY2FjaGVkIGNvbnRlbnRzIGRvbid0IG1hdGNoIG91ciBuZWVkcwotICAgIGJv
b2wgcmVkcmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0Q2FjaGVkSW5zZXRT
aGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VS
R0IsIGJ1ZmZlclJlbGF0aXZlUmVjdCwgYnVmZmVyUmVsYXRpdmVIb2xlUmVjdCwgaG9sZVJlY3Qu
cmFkaWkoKSk7CisgICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0
b24oKS5zZXRDYWNoZWRJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFj
aywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVSZWN0LCBidWZmZXJSZWxhdGl2
ZUhvbGVSZWN0LCBob2xlUmVjdC5yYWRpaSgpKTsKICAgICBpZiAocmVkcmF3TmVlZGVkKSB7CiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29u
dGV4dCgpOwogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNo
YWRvd0NvbnRleHQpOwpAQCAtNjM4LDcgKzYzOCw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0lu
c2V0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwK
ICAgICAKICAgICBkcmF3U2hhZG93QnVmZmVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAgbV9sYXll
ckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hC
dWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlU2Ny
YXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIC8qCkBAIC02NzUsNyArNjc1LDcgQEAgdm9pZCBTaGFk
b3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxp
bmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IEludFNpemUmIHRlbXBs
YXRlU2l6ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7Ci0gICAgbV9sYXllckltYWdlID0g
U2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwor
ICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICAgICBpZiAoIW1fbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC02ODQsNyArNjg0LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFk
b3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb24KICAgICBG
bG9hdFJlY3QgdGVtcGxhdGVIb2xlID0gRmxvYXRSZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VT
aXplLmhlaWdodCgpLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgp
LCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkgLSAyICogZWRnZVNpemUuaGVpZ2h0KCkpOwogCiAgICAg
Ly8gT25seSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0cyBjYWNoZWQgY29udGVu
dHMgZG9uJ3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNo
QnVmZmVyOjpzaGFyZWQoKS5zZXRDYWNoZWRJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMs
IG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgaG9s
ZVJlY3QucmFkaWkoKSk7CisgICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVmZmVyOjpz
aW5nbGV0b24oKS5zZXRDYWNoZWRJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIG1fY29s
b3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVCb3VuZHMsIHRlbXBsYXRlSG9sZSwgaG9sZVJlY3Qu
cmFkaWkoKSk7CiAgICAgaWYgKHJlZHJhd05lZWRlZCkgewogICAgICAgICAvLyBEcmF3IHNoYWRv
dyBpbnRvIGEgbmV3IEltYWdlQnVmZmVyLgogICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKQEAgLTczNSwxOSArNzM1LDE5IEBA
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uCiAgICAgZHJhd0xheWVyUGllY2VzKGdyYXBoaWNzQ29u
dGV4dCwgZGVzdEhvbGVCb3VuZHMsIGhvbGVSZWN0LnJhZGlpKCksIGVkZ2VTaXplLCB0ZW1wbGF0
ZVNpemUsIElubmVyU2hhZG93KTsKIAogICAgIG1fbGF5ZXJJbWFnZSA9IDA7Ci0gICAgU2NyYXRj
aEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKKyAgICBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwogfQog
CiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRl
eHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0
LCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUsIGNvbnN0IEludFNpemUmIGVkZ2VTaXplKQog
ewotICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKKyAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpz
aW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAgICAgaWYgKCFtX2xh
eWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIEZsb2F0UmVjdCB0ZW1wbGF0ZVNoYWRv
dyA9IEZsb2F0UmVjdChlZGdlU2l6ZS53aWR0aCgpLCBlZGdlU2l6ZS5oZWlnaHQoKSwgdGVtcGxh
dGVTaXplLndpZHRoKCkgLSAyICogZWRnZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdo
dCgpIC0gMiAqIGVkZ2VTaXplLmhlaWdodCgpKTsKIAogICAgIC8vIE9ubHkgcmVkcmF3IGluIHRo
ZSBzY3JhdGNoIGJ1ZmZlciBpZiBpdHMgY2FjaGVkIGNvbnRlbnRzIGRvbid0IG1hdGNoIG91ciBu
ZWVkcwotICAgIGJvb2wgcmVkcmF3TmVlZGVkID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0
Q2FjaGVkU2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0
ZW1wbGF0ZVNoYWRvdywgc2hhZG93ZWRSZWN0LnJhZGlpKCksIG1fbGF5ZXJTaXplKTsKKyAgICBi
b29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZFNo
YWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIG1fY29sb3IsIG1fY29sb3JTcGFjZSwgdGVtcGxhdGVT
aGFkb3csIHNoYWRvd2VkUmVjdC5yYWRpaSgpLCBtX2xheWVyU2l6ZSk7CiAgICAgaWYgKHJlZHJh
d05lZWRlZCkgewogICAgICAgICAvLyBEcmF3IHNoYWRvdyBpbnRvIHRoZSBJbWFnZUJ1ZmZlci4K
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5j
b250ZXh0KCk7CkBAIC03ODAsNyArNzgwLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNo
YWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnMKICAg
ICBkcmF3TGF5ZXJQaWVjZXMoZ3JhcGhpY3NDb250ZXh0LCBzaGFkb3dCb3VuZHMsIHNoYWRvd2Vk
UmVjdC5yYWRpaSgpLCBlZGdlU2l6ZSwgdGVtcGxhdGVTaXplLCBPdXRlclNoYWRvdyk7CiAKICAg
ICBtX2xheWVySW1hZ2UgPSAwOwotICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxl
U2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2No
ZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3TGF5
ZXJQaWVjZXMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgc2hhZG93Qm91bmRzLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSYgcmFkaWksIGNv
bnN0IEludFNpemUmIGJ1ZmZlclBhZGRpbmcsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSwg
U2hhZG93RGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTg5NSw4ICs4OTUsOCBAQCBHcmFwaGljc0Nv
bnRleHQqIFNoYWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250
ZXh0LCBjb25zdCBGbAogCiAgICAgLy8gV2UgcmVzZXQgdGhlIHNjcmF0Y2ggYnVmZmVyIHZhbHVl
cyBoZXJlLCBiZWNhdXNlIHRoZSBidWZmZXIgd2lsbCBubyBsb25nZXIgY29udGFpbgogICAgIC8v
IGRhdGEgZnJvbSBhbnkgcHJldmlvdXMgcmVjdGFuZ2xlIG9yIGluc2V0IHNoYWRvd3MgZHJhd24g
dmlhIHRoZSB0aWxpbmcgcGF0aC4KLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zZXRDYWNo
ZWRTaGFkb3dWYWx1ZXMoRmxvYXRTaXplKCksIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQiwgSW50UmVjdCgpLCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgpLCBtX2xheWVyU2l6ZSk7
Ci0gICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1
ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5z
ZXRDYWNoZWRTaGFkb3dWYWx1ZXMoRmxvYXRTaXplKCksIENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQiwgSW50UmVjdCgpLCBGbG9hdFJvdW5kZWRSZWN0OjpSYWRpaSgpLCBtX2xheWVy
U2l6ZSk7CisgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0
U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRl
eHQtPnNhdmUoKTsKQEAgLTkxOSw3ICs5MTksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmVuZFNoYWRv
d0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKICAgICBjb250ZXh0LT5kcmF3SW1hZ2VC
dWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBGbG9hdFJlY3Qocm91bmRl
ZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBtX2xheWVyU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIG1fbGF5ZXJTaXplKSwgY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOwogCiAg
ICAgbV9sYXllckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVs
ZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNj
aGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCmluZGV4IGI3NTU5YjAwYmY5YmU1ZTMyODczOWM3NTgz
YzMyY2IzMjViMjVjNGQuLmM3ZTgzMWQ4Y2M2ZDFmMGE5Yzc5OWUyN2E0MzUyNDg1NWM2NjNjYTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcApAQCAtMjIwLDE0ICsyMjAsMTQgQEAgdm9pZCBD
QUNGTGF5ZXJUcmVlSG9zdDo6bGF5ZXJUcmVlRGlkQ2hhbmdlKCkKICAgICAvLyBUaGUgbGF5ZXIg
dHJlZSBpcyBjaGFuZ2luZyBhcyBhIHJlc3VsdCBvZiBzb21lb25lIG1vZGlmeWluZyBhIFBsYXRm
b3JtQ0FMYXllciB0aGF0IGRvZXNuJ3QKICAgICAvLyBoYXZlIGEgY29ycmVzcG9uZGluZyBHcmFw
aGljc0xheWVyLiBTY2hlZHVsZSBhIGZsdXNoIHNpbmNlIHdlIHdvbid0IHNjaGVkdWxlIG9uZSB0
aHJvdWdoIHRoZQogICAgIC8vIG5vcm1hbCBHcmFwaGljc0xheWVyIG1lY2hhbmlzbXMuCi0gICAg
TGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hhcmVkKCkuZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29v
bih0aGlzKTsKKyAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpzaW5nbGV0b24oKS5mbHVzaFBlbmRp
bmdMYXllckNoYW5nZXNTb29uKHRoaXMpOwogfQogCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpk
ZXN0cm95UmVuZGVyZXIoKQogewogICAgIG1fcm9vdExheWVyID0gMDsKICAgICBtX3Jvb3RDaGls
ZExheWVyID0gMDsKLSAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpzaGFyZWQoKS5jYW5jZWxQZW5k
aW5nRmx1c2godGhpcyk7CisgICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2luZ2xldG9uKCkuY2Fu
Y2VsUGVuZGluZ0ZsdXNoKHRoaXMpOwogfQogCiBzdGF0aWMgdm9pZCBnZXREaXJ0eVJlY3RzKEhX
TkQgd2luZG93LCBWZWN0b3I8Q0dSZWN0PiYgb3V0UmVjdHMpCkBAIC0yNzAsNyArMjcwLDcgQEAg
dm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6cGFpbnQoKQogdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6
Zmx1c2hQZW5kaW5nR3JhcGhpY3NMYXllckNoYW5nZXNTb29uKCkKIHsKICAgICBtX3Nob3VsZEZs
dXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2VzID0gdHJ1ZTsKLSAgICBMYXllckNoYW5nZXNG
bHVzaGVyOjpzaGFyZWQoKS5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNTb29uKHRoaXMpOworICAg
IExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNpbmdsZXRvbigpLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdl
c1Nvb24odGhpcyk7CiB9CiAKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OnNldFNob3VsZEludmVy
dENvbG9ycyhib29sKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL0xheWVyQ2hhbmdlc0ZsdXNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdlc0ZsdXNoZXIuY3BwCmluZGV4IDRiMDM2Y2E0
MGNmOGJkYTA2NTY4ZGUwZmE1MWI0ZjAzMWM4NWIyNjcuLjM5MTg3NTVlZTdhZjU4ZDZjOWVkMjJj
MGNkZmU4YzkyYjI5NmQ3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1MYXllckNoYW5nZXNGbHVzaGVy
JiBMYXllckNoYW5nZXNGbHVzaGVyOjpzaGFyZWQoKQorTGF5ZXJDaGFuZ2VzRmx1c2hlciYgTGF5
ZXJDaGFuZ2VzRmx1c2hlcjo6c2luZ2xldG9uKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9T
VEFUSUNfTE9DQUwoTGF5ZXJDaGFuZ2VzRmx1c2hlciwgZmx1c2hlciwgKCkpOwogICAgIHJldHVy
biBmbHVzaGVyOwpAQCAtNzQsNyArNzQsNyBAQCBMUkVTVUxUIExheWVyQ2hhbmdlc0ZsdXNoZXI6
Omhvb2tDYWxsYmFjayhpbnQgY29kZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbQogICAg
IC8vIGNyYXNoIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgaWYgYW4gZXhjZXB0aW9uIGlzIGhpdC4g
CiAgICAgRXhjZXB0aW9uUmVnaXN0cmF0aW9uIHJlZ2lzdHJhdGlvblN0cnVjdDsgLy8gTm90ZTog
bXVzdCBiZSBzdGFjayBhbGxvY2F0ZWQuCiAgICAgU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJT
dXBwcmVzc29yIHN1cHJlc3NvcihyZWdpc3RyYXRpb25TdHJ1Y3QpOwotICAgIHJldHVybiBzaGFy
ZWQoKS5ob29rRmlyZWQoY29kZSwgd1BhcmFtLCBsUGFyYW0pOworICAgIHJldHVybiBzaW5nbGV0
b24oKS5ob29rRmlyZWQoY29kZSwgd1BhcmFtLCBsUGFyYW0pOwogfQogCiBMUkVTVUxUIExheWVy
Q2hhbmdlc0ZsdXNoZXI6Omhvb2tGaXJlZChpbnQgY29kZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFN
IGxQYXJhbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5oCmluZGV4IGZjYjMxZTdiOWRlMjI0Zjcy
NzU4ZDU2NmRkODJjMTI2MjIxMDI5YzcuLjI4ZTY2Yjk4NTM5ZjAzZDcxMTRlNmE4MjA3MjAxNGZl
MTZiZjBkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9MYXllckNoYW5nZXNGbHVzaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdlc0ZsdXNoZXIuaApAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0OwogY2xhc3MgTGF5ZXJDaGFuZ2VzRmx1c2hl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF5ZXJDaGFuZ2VzRmx1c2hlcik7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIExheWVyQ2hhbmdlc0ZsdXNoZXImIHNoYXJlZCgpOworICAgIHN0YXRp
YyBMYXllckNoYW5nZXNGbHVzaGVyJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgZmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzU29vbihBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0Kik7CiAgICAgdm9p
ZCBjYW5jZWxQZW5kaW5nRmx1c2goQWJzdHJhY3RDQUNGTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJv
bm1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50
RW52aXJvbm1lbnQuY3BwCmluZGV4IGU3MDM2YzE3YjRmOTJkYWVlMWUyNTBiMDlhNjAwY2RmZGQ4
OTdkY2IuLmQxNmI5NTM4NGViNzA1YTE0YWZhNWQ5MjJhMmYxNGUzYWMwZjA1MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25t
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9p
bnRFbnZpcm9ubWVudC5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQmIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6
c2hhcmVkKCkKK0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgRmxvYXRpbmdQb2ludEVudmlyb25t
ZW50OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGbG9hdGluZ1Bv
aW50RW52aXJvbm1lbnQ+IGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDsKICAgICByZXR1cm4gZmxv
YXRpbmdQb2ludEVudmlyb25tZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmgKaW5kZXggMDNmNGQzZjBm
YmNkMjQ1NmY1YThkYmU3M2RhNjhmYTkzMDE5NjhhOS4uNjUxMWJmMGUwNzU5YjE1MjdjYWFhNGUz
M2VhN2FlM2ExYWQ3ZDI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5oCkBAIC00MCw3ICs0MCw3IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmVNYWluVGhyZWFkRW52aXJvbm1l
bnQoKTsKICAgICB2b2lkIHByb3BhZ2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgc2hhcmVkKCk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgc2lu
Z2xldG9uKCk7CiAKIHByaXZhdGU6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV2ViQ29yZVRocmVhZC5tbQppbmRleCA0YjA5ZDFmMDZkYTgyMzhmNzM2MDQzNWMxN2Yz
YTE5YTk1YzNiM2M5Li5kOWQxMzk2NTI5ZmQ4ZTM3ZGFhMDc3MDEyYjcxOGU2MDI3ZDY0NjM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1t
CkBAIC02NDIsNyArNjQyLDcgQEAgTk9fUkVUVVJOCiAjZW5kaWYKIHZvaWQgKlJ1bldlYlRocmVh
ZCh2b2lkICphcmcpCiB7Ci0gICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFyZWQoKS5w
cm9wYWdhdGVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKKyAgICBGbG9hdGluZ1BvaW50RW52aXJv
bm1lbnQ6OnNpbmdsZXRvbigpLnByb3BhZ2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogCiAg
ICAgVU5VU0VEX1BBUkFNKGFyZyk7CiAgICAgLy8gV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgp
IG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZvcmUgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc2lu
Y2UgdGhlCkBAIC03NTcsNyArNzU3LDcgQEAgc3RhdGljIHZvaWQgU3RhcnRXZWJUaHJlYWQoKQog
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UocmVzdWx0ID09IDAsICJzdGFydHVwIGxvY2sgZmFpbGVk
IHdpdGggY29kZTolZCIsIHJlc3VsdCk7CiAKICAgICAvLyBQcm9wYWdhdGUgdGhlIG1haW5UaHJl
YWQncyBmZW52IHRvIHdvcmtlcnMgJiB0aGUgd2ViIHRocmVhZC4KLSAgICBGbG9hdGluZ1BvaW50
RW52aXJvbm1lbnQ6OnNoYXJlZCgpLnNhdmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKKyAgICBG
bG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigpLnNhdmVNYWluVGhyZWFkRW52aXJv
bm1lbnQoKTsKIAogICAgIHB0aHJlYWRfY3JlYXRlKCZ3ZWJUaHJlYWQsICZ0YXR0ciwgUnVuV2Vi
VGhyZWFkLCBOVUxMKTsKICAgICBwdGhyZWFkX2F0dHJfZGVzdHJveSgmdGF0dHIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcAppbmRl
eCAyNGYxYjA4NDc1Yzc1YzQ5MTM0NjM5NDFmYTBlNWZhMmIwMWM1ZGJiLi42OTdhNDljNjE4MGFh
YjE4ZmMyMzdiMGI4ZTZkOWY0NTdjNjQ0ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCBzdGF0
aWMgdm9pZCBkZXZpY2VWYWx1ZXNDaGFuZ2VkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1
cm4gcmVzdWx0LCB2b2lkKiwgSQogICAgIGxpc3RlbmVyLT52YWx1ZXNDaGFuZ2VkKHZhbHVlKTsK
IH0KIAotSElER2FtZXBhZFByb3ZpZGVyJiBISURHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpCitI
SURHYW1lcGFkUHJvdmlkZXImIEhJREdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKIHsKICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SElER2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRMaXN0ZW5l
cjsKICAgICByZXR1cm4gc2hhcmVkTGlzdGVuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmgKaW5kZXggODBlMzBlZWNiMDUzMTY1OTU2MDIx
MGYzYmVjYzdkODZlYzI1MjljZC4uNWEwNjhkZjZiYjE5ZDU0NTgwYmQ1NzE3ZWYxYWQ2YzM3ZTg5
MDkzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQ
cm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJv
dmlkZXIuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBISURHYW1lcGFkUHJvdmlkZXIgOiBwdWJs
aWMgR2FtZXBhZFByb3ZpZGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShISURHYW1lcGFk
UHJvdmlkZXIpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxISURHYW1lcGFkUHJv
dmlkZXI+OwogcHVibGljOgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBISURHYW1lcGFkUHJv
dmlkZXImIHNoYXJlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBISURHYW1lcGFkUHJv
dmlkZXImIHNpbmdsZXRvbigpOwogCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dh
bWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTW9u
aXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3Bw
CmluZGV4IDM4OTEzOGM5YjQwZWY1MTc5ZThjNGZiYjU5OWU0N2Q5YjA4Yzg2NGIuLmNjNWE1Y2Jl
MWYyYTg5MjgxMTljODI4MmViMDdkYTA1MzNkMzUxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKQEAg
LTQ1LDcgKzQ1LDcgQEAgc3RhdGljIE1lZGlhU3RyZWFtQ2VudGVyKiYgbWVkaWFTdHJlYW1DZW50
ZXJPdmVycmlkZSgpCiAgICAgcmV0dXJuIG92ZXJyaWRlOwogfQogCi1NZWRpYVN0cmVhbUNlbnRl
ciYgTWVkaWFTdHJlYW1DZW50ZXI6OnNoYXJlZCgpCitNZWRpYVN0cmVhbUNlbnRlciYgTWVkaWFT
dHJlYW1DZW50ZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgTWVkaWFTdHJlYW1DZW50ZXIqIG92ZXJy
aWRlID0gbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpOwogICAgIGlmIChvdmVycmlkZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
Q2VudGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVh
bUNlbnRlci5oCmluZGV4IDdkNTQwYjk0ZGU5NTg2MDRjN2E0NDA0YjczYjA1ZDBkZTQzMzEzMzIu
LmU2OTdmMDJlMGQ1NGI2NzY1NGMzOGExN2NmM2E0MDI4NmEzZGMyYTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIu
aApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBNZWRpYVN0cmVhbUNlbnRlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+TWVkaWFTdHJlYW1DZW50ZXIoKTsKIAotICAgIHN0YXRpYyBNZWRpYVN0cmVh
bUNlbnRlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIE1lZGlhU3RyZWFtQ2VudGVyJiBzaW5nbGV0
b24oKTsKICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRTdHJlYW1DZW50ZXIoTWVkaWFTdHJlYW1D
ZW50ZXIqKTsKIAogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQ
YXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29u
c3RyYWludHM+IGF1ZGlvQ29uc3RyYWludHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4g
dmlkZW9Db25zdHJhaW50cykgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKaW5k
ZXggOGVmZTQxNTk5NGE3ZTA2NjMyNDY2ZWE1NWQ2MGEyMjZmYWM1M2M1Yy4uYTM4OTNjMGU0MzE1
NTliYzhjOGQ2MjA3NDkyODY0NjhiYTU2M2EwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFu
YWdlci5oCkBAIC00NSw3ICs0NSw3IEBAIGNsYXNzIENhcHR1cmVEZXZpY2U7CiAKIGNsYXNzIEFW
Q2FwdHVyZURldmljZU1hbmFnZXIgewogcHVibGljOgotICAgIHN0YXRpYyBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYg
c2luZ2xldG9uKCk7CiAgICAgc3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKIAogICAgIFZlY3Rv
cjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gZ2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZD
YXB0dXJlRGV2aWNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCmluZGV4IDlhZmQ5ZWRhYWZhYzIxZGNj
MDFlMmQzZjhkOGFjNzMxOWRhZTRjZjUuLmIwYjI2ZjZjMzU1NjBkYjQ1NjI4ZDA4YTdlYjEyYmU1
OWUzZWVhYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLm1tCkBAIC0xMTcsNyAr
MTE3LDcgQEAgc3RhdGljIFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3Qo
KQogICAgIGlmIChmaXJzdFRpbWUgJiYgIWNhcHR1cmVEZXZpY2VMaXN0LnNpemUoKSkgewogICAg
ICAgICBmaXJzdFRpbWUgPSBmYWxzZTsKICAgICAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0
KCk7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyRm9y
RGV2aWNlTm90aWZpY2F0aW9ucygpOworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpz
aW5nbGV0b24oKS5yZWdpc3RlckZvckRldmljZU5vdGlmaWNhdGlvbnMoKTsKICAgICB9CiAKICAg
ICByZXR1cm4gY2FwdHVyZURldmljZUxpc3Q7CkBAIC0xNzQsNyArMTc0LDcgQEAgYm9vbCBBVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyOjppc0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEFWRm91bmRhdGlv
bkxpYnJhcnkoKTsKIH0KIAotQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgQVZDYXB0dXJlRGV2aWNl
TWFuYWdlcjo6c2hhcmVkKCkKK0FWQ2FwdHVyZURldmljZU1hbmFnZXImIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xP
Q0FMKEFWQ2FwdHVyZURldmljZU1hbmFnZXIsIG1hbmFnZXIsICgpKTsKICAgICByZXR1cm4gbWFu
YWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21h
Yy9NZWRpYVN0cmVhbUNlbnRlck1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1DZW50ZXJNYWMuY3BwCmluZGV4IDhkOGQ5MGRmMTRjMmNm
Y2FiMmQwYjU3ZThhOWY1YTg3NmU0YzU0ZmYuLjUzNGU0N2UxMjU3NTNhOWY1NmIzYzFkN2Y3N2Yy
MTFmZmM2N2JjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL01lZGlhU3RyZWFtQ2VudGVyTWFjLmNwcApAQCAtNjUsNyAr
NjUsNyBAQCB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJh
aW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYQogCiAgICAgaWYgKGF1ZGlvQ29uc3RyYWlu
dHMpIHsKICAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1
cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShN
ZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8sIGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRD
b25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCku
dmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBh
dWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICgh
aW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmNvbnN0
cmFpbnRzSW52YWxpZChpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC03NCw3ICs3NCw3IEBAIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVz
dENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhCiAKICAgICBpZiAodmlkZW9D
b25zdHJhaW50cykgewogICAgICAgICBTdHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAg
IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVk
aWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwg
aW52YWxpZENvbnN0cmFpbnQpOworICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5n
bGV0b24oKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6
VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAg
ICAgaWYgKCFpbnZhbGlkQ29uc3RyYWludC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVu
dC0+Y29uc3RyYWludHNJbnZhbGlkKGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTk1LDEzICs5NSwxMyBAQCB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpjcmVh
dGVNZWRpYVN0cmVhbShQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbgogICAgIAog
ICAgIGlmIChhdWRpb0NvbnN0cmFpbnRzKSB7CiAgICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3Ry
YWludDsKLSAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkudmVyaWZ5Q29u
c3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0
cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CisgICAgICAgIEFWQ2FwdHVyZURldmlj
ZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlh
U3RyZWFtU291cmNlOjpBdWRpbywgYXVkaW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0
cmFpbnQpOwogICAgICAgICBpZiAoIWludmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgY2xpZW50LT5mYWlsZWRUb0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50c0Vycm9y
KGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9IEFW
Q2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3Ry
YWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpKTsK
KyAgICAgICAgUmVmUHRyPE1lZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9IEFWQ2FwdHVy
ZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWlu
dHMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpKTsKICAg
ICAgICAgQVNTRVJUKGF1ZGlvU291cmNlKTsKICAgICAgICAgCiAgICAgICAgIGF1ZGlvU291cmNl
cy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVsZWFzZSgpKTsKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZv
aWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVk
aWFTdHJlYW1DcmVhdGlvbkNsaWVuCiAgICAgCiAgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsK
ICAgICAgICAgU3RyaW5nIGludmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1cmVEZXZp
Y2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0
cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJh
aW50KTsKKyAgICAgICAgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5
Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0Nv
bnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxp
ZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmZhaWxlZFRvQ3Jl
YXRlU3RyZWFtV2l0aENvbnN0cmFpbnRzRXJyb3IoaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8TWVkaWFT
dHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVk
KCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6Vmlk
ZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1T
b3VyY2U+IHZpZGVvU291cmNlID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCku
YmVzdFNvdXJjZUZvclR5cGVBbmRDb25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8s
IHZpZGVvQ29uc3RyYWludHMuZ2V0KCkpOwogICAgICAgICBBU1NFUlQodmlkZW9Tb3VyY2UpOwog
ICAgICAgICAKICAgICAgICAgdmlkZW9Tb3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNl
KCkpOwpAQCAtMTI4LDcgKzEyOCw3IEBAIGJvb2wgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmdldE1l
ZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjCiB7CiAgICAg
UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdENsaWVudD4gcmVxdWVzdENsaWVu
dCA9IHBycENsaWVudDsKIAotICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291
cmNlcyA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNoYXJlZCgpLmdldFNvdXJjZXNJbmZvKHJl
cXVlc3RDbGllbnQtPnJlcXVlc3RPcmlnaW4oKSk7CisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1Nv
dXJjZUluZm8+PiBzb3VyY2VzID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCku
Z2V0U291cmNlc0luZm8ocmVxdWVzdENsaWVudC0+cmVxdWVzdE9yaWdpbigpKTsKIAogICAgIHJl
cXVlc3RDbGllbnQtPmRpZENvbXBsZXRlUmVxdWVzdChzb3VyY2VzKTsKICAgICByZXR1cm4gdHJ1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2
ZVF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1
ZXVlLmNwcAppbmRleCA4NWVhNjY3MWMwMjA3OTc0MTlhNWQ0YWMzNDZlNWM4NTMzYjg1YmMyLi4z
NzA2YjVjMzgwYjQxM2NmYzFiOGUxNjQ1MmNhOTFiODhlMjIxMThiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuY3BwCkBAIC01MCw3
ICs1MCw3IEBAIHN0YXRpYyBjb25zdCBpbnQgZ01heFJlcXVlc3RzVG9RdWV1ZSA9IDY0OwogLy8g
SWYgdGhlcmUgd2VyZSBxdWV1ZWQgbmFtZXMgdGhhdCBjb3VsZG4ndCBiZSBzZW50IHNpbXVsdGFu
ZW91c2x5LCBjaGVjayB0aGUgc3RhdGUgb2YgcmVzb2x2ZXJzIGFmdGVyIHRoaXMgZGVsYXkuCiBz
dGF0aWMgY29uc3QgZG91YmxlIGdSZXRyeVJlc29sdmluZ0luU2Vjb25kcyA9IDAuMTsKIAotRE5T
UmVzb2x2ZVF1ZXVlJiBETlNSZXNvbHZlUXVldWU6OnNoYXJlZCgpCitETlNSZXNvbHZlUXVldWUm
IEROU1Jlc29sdmVRdWV1ZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RE5TUmVzb2x2ZVF1ZXVlPiBxdWV1ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmgKaW5kZXggY2Q5YmEwZmMwZTJhNTZlZjRkYWE0
ZmI5NjZkN2M5ZTQzMjk0MGNiZi4uMjdmMDBkOGJkMDE5Mzc2MDYwMjllNzdhOGUzNzUzNzk4ZTc5
NWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNv
bHZlUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29s
dmVRdWV1ZS5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIEROU1Jlc29sdmVRdWV1ZSB7CiAgICAg
ZnJpZW5kIE5ldmVyRGVzdHJveWVkPEROU1Jlc29sdmVRdWV1ZT47CiAKIHB1YmxpYzoKLSAgICBz
dGF0aWMgRE5TUmVzb2x2ZVF1ZXVlJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgRE5TUmVzb2x2ZVF1
ZXVlJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUp
OwogICAgIHZvaWQgZGVjcmVtZW50UmVxdWVzdENvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvRE5TQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKaW5kZXggYmQ0MDU3MmQ5ZjFiMGI4NGY1
MGIzYTBjYTllNDBkYzIzMWE2MDUwMy4uZTZmZWE2ZDBkZDY3M2Q2ZDc1NGUxZTljZDhmMTRiZDFh
MTcxYjUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9E
TlNDRk5ldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlND
Rk5ldC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgYm9vbCBETlNSZXNvbHZlUXVldWU6OnBsYXRmb3Jt
UHJveHlJc0VuYWJsZWRJblN5c3RlbVByZWZlcmVuY2VzKCkKIAogc3RhdGljIHZvaWQgY2xpZW50
Q2FsbGJhY2soQ0ZIb3N0UmVmIHRoZUhvc3QsIENGSG9zdEluZm9UeXBlLCBjb25zdCBDRlN0cmVh
bUVycm9yKiwgdm9pZCopCiB7Ci0gICAgRE5TUmVzb2x2ZVF1ZXVlOjpzaGFyZWQoKS5kZWNyZW1l
bnRSZXF1ZXN0Q291bnQoKTsgLy8gSXQncyBvayB0byBjYWxsIHNoYXJlZCgpIGZyb20gYSBzZWNv
bmRhcnkgdGhyZWFkLCB0aGUgc3RhdGljIHZhcmlhYmxlIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlh
bGl6ZWQgYnkgbm93LgorICAgIEROU1Jlc29sdmVRdWV1ZTo6c2luZ2xldG9uKCkuZGVjcmVtZW50
UmVxdWVzdENvdW50KCk7IC8vIEl0J3Mgb2sgdG8gY2FsbCBzaW5nbGV0b24oKSBmcm9tIGEgc2Vj
b25kYXJ5IHRocmVhZCwgdGhlIHN0YXRpYyB2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRp
YWxpemVkIGJ5IG5vdy4KICAgICBDRlJlbGVhc2UodGhlSG9zdCk7CiB9CiAKQEAgLTEwOSw3ICsx
MDksNyBAQCB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAoaG9zdG5hbWUuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgRE5TUmVzb2x2ZVF1ZXVlOjpzaGFyZWQoKS5hZGQoaG9zdG5hbWUpOwor
ICAgIEROU1Jlc29sdmVRdWV1ZTo6c2luZ2xldG9uKCkuYWRkKGhvc3RuYW1lKTsKIH0KIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwCmlu
ZGV4IGNhNDE0ODQ3ZjVmOWRlMTBhNzdiYWI2MTBiOWM1ZjRjODllZGU3NTkuLmE0ZmIyNGJkNjY3
Yjg1MDIwMDc0MDAxYmY5ZTA0ODk5OWZjYWE0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9ETlNTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5TU291cC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBE
TlNSZXNvbHZlUXVldWU6OnBsYXRmb3JtUHJveHlJc0VuYWJsZWRJblN5c3RlbVByZWZlcmVuY2Vz
KCkKIAogc3RhdGljIHZvaWQgcmVzb2x2ZWRDYWxsYmFjayhTb3VwQWRkcmVzcyosIGd1aW50LCB2
b2lkKikKIHsKLSAgICBETlNSZXNvbHZlUXVldWU6OnNoYXJlZCgpLmRlY3JlbWVudFJlcXVlc3RD
b3VudCgpOworICAgIEROU1Jlc29sdmVRdWV1ZTo6c2luZ2xldG9uKCkuZGVjcmVtZW50UmVxdWVz
dENvdW50KCk7CiB9CiAKIHZvaWQgRE5TUmVzb2x2ZVF1ZXVlOjpwbGF0Zm9ybVJlc29sdmUoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBwcmVmZXRjaEROUyhj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQogICAgIGlmIChob3N0bmFtZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEROU1Jlc29sdmVRdWV1ZTo6c2hhcmVkKCkuYWRkKGhvc3RuYW1l
KTsKKyAgICBETlNSZXNvbHZlUXVldWU6OnNpbmdsZXRvbigpLmFkZChob3N0bmFtZSk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBiM2QxYWE4NDlmMDJlYWRj
YTdkYWU4MjBmYjYwMWY2YjY1YTAyODY2Li44N2RlNzU2OTY3MjU0MWQ3MjA0YTMxMjllYmRhNDc5
YjAxMmM5ZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zMDQsNyAr
MzA0LDcgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSogcGFn
ZSkKICAgICBBWE9iamVjdENhY2hlOjpkaXNhYmxlQWNjZXNzaWJpbGl0eSgpOwogI2VuZGlmCiAK
LSAgICBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNoYXJlZCgpLnVuaW5zdGFsbEFsbE92ZXJsYXlz
KCk7CisgICAgTW9ja1BhZ2VPdmVybGF5Q2xpZW50OjpzaW5nbGV0b24oKS51bmluc3RhbGxBbGxP
dmVybGF5cygpOwogfQogCiBJbnRlcm5hbHM6OkludGVybmFscyhEb2N1bWVudCogZG9jdW1lbnQp
CkBAIC0yNDMxLDcgKzI0MzEsNyBAQCB2b2lkIEludGVybmFsczo6aW5zdGFsbE1vY2tQYWdlT3Zl
cmxheShjb25zdCBTdHJpbmcmIG92ZXJsYXlUeXBlLCBFeGNlcHRpb25Db2RlJgogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgTW9ja1BhZ2VPdmVybGF5Q2xpZW50OjpzaGFyZWQoKS5pbnN0
YWxsT3ZlcmxheShkb2N1bWVudC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCksIG92ZXJsYXlUeXBlID09
ICJ2aWV3IiA/IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6VmlldyA6IFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6RG9jdW1lbnQpOworICAgIE1vY2tQYWdlT3ZlcmxheUNsaWVudDo6c2luZ2xl
dG9uKCkuaW5zdGFsbE92ZXJsYXkoZG9jdW1lbnQtPmZyYW1lKCktPm1haW5GcmFtZSgpLCBvdmVy
bGF5VHlwZSA9PSAidmlldyIgPyBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcgOiBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRvY3VtZW50KTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6
cGFnZU92ZXJsYXlMYXllclRyZWVBc1RleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkBAIC0y
NDQ0LDcgKzI0NDQsNyBAQCBTdHJpbmcgSW50ZXJuYWxzOjpwYWdlT3ZlcmxheUxheWVyVHJlZUFz
VGV4dChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlv
dXQoKTsKIAotICAgIHJldHVybiBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNoYXJlZCgpLmxheWVy
VHJlZUFzVGV4dChkb2N1bWVudC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBN
b2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNpbmdsZXRvbigpLmxheWVyVHJlZUFzVGV4dChkb2N1bWVu
dC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCkpOwogfQogCiB2b2lkIEludGVybmFsczo6c2V0UGFnZU11
dGVkKGJvb2wgbXV0ZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQ
YWdlT3ZlcmxheUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3Zl
cmxheUNsaWVudC5jcHAKaW5kZXggYmUwOWMzZDYwNmMxZDFhY2U3ZDI5MWI2NjlkMTAwNWZmNjAx
ZTNjNS4uNjFmMTliZjE2NTAxYTlkZmYxNmQ3YjllODk4MjA0ODRlMjExMTVkOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcApAQCAtMzQs
NyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1vY2tQYWdlT3ZlcmxheUNsaWVu
dCYgTW9ja1BhZ2VPdmVybGF5Q2xpZW50OjpzaGFyZWQoKQorTW9ja1BhZ2VPdmVybGF5Q2xpZW50
JiBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPE1vY2tQYWdlT3ZlcmxheUNsaWVudD4gc2hhcmVkQ2xpZW50OwogICAgIHJldHVy
biBzaGFyZWRDbGllbnQuZ2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L01vY2tQYWdlT3ZlcmxheUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFn
ZU92ZXJsYXlDbGllbnQuaAppbmRleCA3ZDQ2M2YyMzY4MjgyODNiZDdhYTRhYmE4NmJhZWEwZjM4
Y2FlODk0Li4xZGQyOTdiMzlhMGQ3MzhiN2MxNDIyZGFiNDdiOTEyNGFhZGIxZmJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvTW9ja1BhZ2VPdmVybGF5Q2xpZW50LmgKQEAgLTM2LDcg
KzM2LDcgQEAgY2xhc3MgTWFpbkZyYW1lOwogY2xhc3MgTW9ja1BhZ2VPdmVybGF5Q2xpZW50IGZp
bmFsIDogcHVibGljIFBhZ2VPdmVybGF5OjpDbGllbnQgewogICAgIGZyaWVuZCBjbGFzcyBOZXZl
ckRlc3Ryb3llZDxNb2NrUGFnZU92ZXJsYXlDbGllbnQ+OwogcHVibGljOgotICAgIHN0YXRpYyBN
b2NrUGFnZU92ZXJsYXlDbGllbnQmIHNoYXJlZCgpOworICAgIHN0YXRpYyBNb2NrUGFnZU92ZXJs
YXlDbGllbnQmIHNpbmdsZXRvbigpOwogCiAgICAgZXhwbGljaXQgTW9ja1BhZ2VPdmVybGF5Q2xp
ZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFk
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCAwZmJl
YjFkNzE0Yzg0MTVjMjYwMzZlZDBlMzJjMDllZTBmNWE2YjNhLi4zYzJkY2E1NTFjYTQ2ZjJkYzYw
ZDFlZjI2MDRiZmE3OGIzMWVkMWM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJz
L1dvcmtlclRocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJl
YWQuY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVh
ZCgpCiB7CiAgICAgLy8gUHJvcGFnYXRlIHRoZSBtYWluVGhyZWFkJ3MgZmVudiB0byB3b3JrZXJz
LgogI2lmIFBMQVRGT1JNKElPUykKLSAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJl
ZCgpLnByb3BhZ2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOworICAgIEZsb2F0aW5nUG9pbnRF
bnZpcm9ubWVudDo6c2luZ2xldG9uKCkucHJvcGFnYXRlTWFpblRocmVhZEVudmlyb25tZW50KCk7
CiAjZW5kaWYKIAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJE
YXRhYmFzZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVBy
b3ZpZGVyLmNwcAppbmRleCA2YmU4MjlhYjQ0MzNiNzk1OGJiOWMyODZiMjhmZDYzODRlNGVkMDVi
Li5kMTUwZWNhNDRjOTEwNTYxZjAxMWIwMWNmNDJmNzI4NTNkYjYxYWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgogCi1XZWJEYXRhYmFzZVByb3ZpZGVyJiBXZWJEYXRh
YmFzZVByb3ZpZGVyOjpzaGFyZWQoKQorV2ViRGF0YWJhc2VQcm92aWRlciYgV2ViRGF0YWJhc2VQ
cm92aWRlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV2ViRGF0YWJhc2VQcm92aWRlciYg
ZGF0YWJhc2VQcm92aWRlciA9IGFkb3B0UmVmKCpuZXcgV2ViRGF0YWJhc2VQcm92aWRlcikubGVh
a1JlZigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQ
cm92aWRlci5oIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaApp
bmRleCAzMmRjMjdhMTI2ZDk5ZDNhODI0MzFiYmNlMTAzMGM2YTg5MTU2NDNkLi5jYTIxMTgwZDc0
NzM4M2U5MjgzNzFiZmY0MThhZGIwZDY2NjRhMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFn
ZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKQEAgLTMyLDcgKzMyLDcgQEAKIGNsYXNzIFdlYkRhdGFi
YXNlUHJvdmlkZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6RGF0YWJhc2VQcm92aWRlciB7CiAg
ICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFdlYkRhdGFiYXNlUHJvdmlkZXI+OwogcHVi
bGljOgotICAgIHN0YXRpYyBXZWJEYXRhYmFzZVByb3ZpZGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0
aWMgV2ViRGF0YWJhc2VQcm92aWRlciYgc2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViRGF0
YWJhc2VQcm92aWRlcigpOwogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9t
YWMvSGlzdG9yeS9XZWJCYWNrRm9yd2FyZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0
b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQppbmRleCA2YjQ1MDAyMWM0Mjc4NjI2MzYzMjkxMzYz
MTAyNzcyYzI1YzEyZTFmLi5lYmZiZDRkMDA0MTAyM2MyNWMyYzY5ZTg0NzkwODJjOGM0MjYzNTdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlz
dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5t
bQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0YXRpYyBib29sIGJ1bXBlckNhckJhY2tGb3J3YXJkSGFj
a05lZWRlZCgpCiAKIC0gKE5TVUludGVnZXIpcGFnZUNhY2hlU2l6ZQogewotICAgIHJldHVybiBb
a2l0KGNvcmUoc2VsZiktPnBhZ2UoKSkgdXNlc1BhZ2VDYWNoZV0gPyBQYWdlQ2FjaGU6OnNoYXJl
ZCgpLm1heFNpemUoKSA6IDA7CisgICAgcmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1
c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWF4U2l6ZSgpIDogMDsKIH0K
IAogLSAoaW50KWJhY2tMaXN0Q291bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01p
c2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4
IGJhZWUzZDA3NTcwYmIzZDNkYzFlZGI3OGUzMjJjODA4ZTgwMjU3MTEuLjQ0MzFhOTAwMWE5OTRh
OWNjNzNiNWJlZTY4NDM5YjU5ZDc5YmIwM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5t
bQpAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuZW1wdHko
KTsKIAogICAgIC8vIEVtcHR5IHRoZSBDcm9zcy1PcmlnaW4gUHJlZmxpZ2h0IGNhY2hlCi0gICAg
V2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuZW1wdHko
KTsKKyAgICBXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0
b24oKS5lbXB0eSgpOwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ29yZVN0YXRpc3RpY3MubW0KaW5kZXggNTYzZWM4ZTk5MDZkOGFkODE1Njc5MTY2
MWJmNDA5N2U1ZGI5MWNiNi4uZThkY2IyNDQyMmRlZGJiODRhY2I5ZTgxNGVjM2FhNmVkN2E0ZGRm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC0y
MjQsMTIgKzIyNCwxMiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogKyAoaW50KWNhY2hl
ZFBhZ2VDb3VudAogewotICAgIHJldHVybiBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBhZ2VDb3VudCgp
OworICAgIHJldHVybiBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnBhZ2VDb3VudCgpOwogfQogCiAr
IChpbnQpY2FjaGVkRnJhbWVDb3VudAogewotICAgIHJldHVybiBQYWdlQ2FjaGU6OnNoYXJlZCgp
LmZyYW1lQ291bnQoKTsKKyAgICByZXR1cm4gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5mcmFtZUNv
dW50KCk7CiB9CiAKIC8vIERlcHJlY2F0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaAppbmRleCAx
NDg2ZDkyZDc0NmUxODRjNGEyNzI4ZWVkMmI1Yzk2Njk0ZWY0ZGFlLi5mY2IyMjBhYWM2OTA3OTU2
ZWRmM2YxNzEzNDRlMDQ2ZTY5NWU2MmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oCkBAIC00
Miw3ICs0Miw3IEBAIGNsYXNzIE5ldHNjYXBlUGx1Z2luSG9zdFByb3h5OwogCiBjbGFzcyBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTmV0c2NhcGVQbHVn
aW5Ib3N0TWFuYWdlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIE5ldHNjYXBlUGx1Z2luSG9zdE1h
bmFnZXImIHNpbmdsZXRvbigpOwogICAgIAogICAgIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnaW5J
bnN0YW5jZVByb3h5PiBpbnN0YW50aWF0ZVBsdWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgs
IGNwdV90eXBlX3QgcGx1Z2luQXJjaGl0ZWN0dXJlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50
aWZpZXIsIFdlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldyAqLCBOU1N0cmluZyAqbWltZVR5cGUs
IE5TQXJyYXkgKmF0dHJpYnV0ZUtleXMsIE5TQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcywgTlNTdHJp
bmcgKnVzZXJBZ2VudCwgTlNVUkwgKnNvdXJjZVVSTCwgYm9vbCBmdWxsRnJhbWUsIGJvb2wgaXNQ
cml2YXRlQnJvd3NpbmdFbmFibGVkLCBib29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQsIGJvb2wgaG9zdExheWVyc0luV2luZG93U2VydmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBi
L1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFn
ZXIubW0KaW5kZXggMWY5ZmFjYmJkZjIwNTQ4OTdhZTYxNzFhYzUxODBiZTk3ZjBlZTc4ZC4uNDBl
Y2IyMDYyMzVhZGZmNmU3NWZjMzQ4YzE5ZjAwNDVjMDFlNGVmMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RN
YW5hZ2VyLm1tCkBAIC00OSw3ICs0OSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgTmV0c2NhcGVQ
bHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkKK05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgREVQUkVDQVRFRF9E
RUZJTkVfU1RBVElDX0xPQ0FMKE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIsIHBsdWdpbkhvc3RN
YW5hZ2VyLCAoKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCmluZGV4IDU3MDVjZmIzYjE3
ZWU4YTI1Yzg0NzQ1NzJkMzJlYjMyNmY0NGI5MWYuLjljZDY1NWM5ZjcxMDUzNWE5ZGYyYWY0NTdk
NzA0NDZhNmQ5YjZlNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9z
dGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1Bs
dWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDYsNyArMTQ2LDcg
QEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhvc3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAgIGZv
ciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgp
OwogICAgIAotICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhv
c3REaWVkKHRoaXMpOworICAgIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigp
LnBsdWdpbkhvc3REaWVkKHRoaXMpOwogICAgIAogICAgIC8vIFRoZSBwbHVnLWluIGNyYXNoZWQg
d2hpbGUgaXRzIG1lbnUgYmFyIHdhcyBoaWRkZW4uIE1ha2Ugc3VyZSB0byBzaG93IGl0LgogICAg
IGlmICghbV9tZW51QmFySXNWaXNpYmxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIvU291cmNlL1dl
YktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmlu
ZGV4IGU0Mjk3ZmFlYjJmYWI3OWUxNTNjNmNiN2M1MDY3NTdhMTFiMjExZDkuLjc2MDA1ODM2OTBk
Nzk2MGM1ZDhhNTlhNzNlNzJkMDI1ZGIyY2ZmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhvc3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZp
ZXcubW0KQEAgLTEzMCw3ICsxMzAsNyBAQCBleHRlcm4gIkMiIHsKICAgICBhY2NlbGVyYXRlZENv
bXBvc2l0aW5nRW5hYmxlZCA9IFtbW3NlbGYgd2ViVmlld10gcHJlZmVyZW5jZXNdIGFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkXTsKICAgICBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciA9
IFtzZWxmIHdpbmRvd0hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXJdOwogCi0gICAgX3Byb3h5ID0g
TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkuaW5zdGFudGlhdGVQbHVnaW4oW19w
bHVnaW5QYWNrYWdlLmdldCgpIHBhdGhdLCBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luSG9z
dEFyY2hpdGVjdHVyZV0sIFtfcGx1Z2luUGFja2FnZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXSwg
c2VsZiwgX01JTUVUeXBlLmdldCgpLCBfYXR0cmlidXRlS2V5cy5nZXQoKSwgX2F0dHJpYnV0ZVZh
bHVlcy5nZXQoKSwgdXNlckFnZW50LCBfc291cmNlVVJMLmdldCgpLAorICAgIF9wcm94eSA9IE5l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpLmluc3RhbnRpYXRlUGx1Z2luKFtf
cGx1Z2luUGFja2FnZS5nZXQoKSBwYXRoXSwgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkhv
c3RBcmNoaXRlY3R1cmVdLCBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0s
IHNlbGYsIF9NSU1FVHlwZS5nZXQoKSwgX2F0dHJpYnV0ZUtleXMuZ2V0KCksIF9hdHRyaWJ1dGVW
YWx1ZXMuZ2V0KCksIHVzZXJBZ2VudCwgX3NvdXJjZVVSTC5nZXQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9k
ZSA9PSBOUF9GVUxMLCBfaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkLCBhY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZCwgX2hvc3RzTGF5ZXJzSW5XaW5kb3dTZXJ2ZXIpOwogICAgIGlmICghX3By
b3h5KSAKICAgICAgICAgcmV0dXJuIE5POwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMv
UGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbQppbmRleCA5ZTM0NTgyYTQ2YTcyMTQy
OGI5YmFmYWU4NjFkMWNjYjAxMWNlMzk5Li4xOTA2ZWYzNjdkYjU0YTZjYTJhOGJkMTQ1MzM4MjJh
OTEyZTY2YjhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNj
YXBlUGx1Z2luUGFja2FnZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5l
dHNjYXBlUGx1Z2luUGFja2FnZS5tbQpAQCAtMjIxLDcgKzIyMSw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiAtICh2b2lkKWNyZWF0ZVByb3BlcnR5TGlzdEZpbGUKIHsKLSAgICBOZXRz
Y2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaGFyZWQoKS5jcmVhdGVQcm9wZXJ0eUxpc3RGaWxlKHBh
dGgsIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmUsIFtzZWxmIGJ1bmRsZUlkZW50aWZpZXJdKTsKKyAg
ICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpzaW5nbGV0b24oKS5jcmVhdGVQcm9wZXJ0eUxp
c3RGaWxlKHBhdGgsIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmUsIFtzZWxmIGJ1bmRsZUlkZW50aWZp
ZXJdKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQubW0KaW5kZXggYzUwYmMyYTRjNzc4NmI3MWExMDc0ZGJjN2Zk
YzQxNTY2OWJjZjQ0OC4uODNkNDg2NTk0MWFmYzc2MTA1ZTczOWE4ZTlkYmE5ZTUzNGEyZGMzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5tbQpAQCAtMjk3LDcgKzI5Nyw3IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRl
V2luZG93KEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0CiAKICNp
ZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CiAgICAgaWYgKG5ld1dlYlZpZXcpCi0gICAgICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0
TWFuYWdlcjo6c2hhcmVkKCkuZGlkQ3JlYXRlV2luZG93KCk7CisgICAgICAgIFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkQ3JlYXRlV2luZG93KCk7CiAj
ZW5kaWYKICAgICAKICAgICByZXR1cm4gY29yZShuZXdXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0K
aW5kZXggODQ0NzE2NDMxNGQ1NTRmNDU2OTFlOWMyMjk4YzZlNGRjM2ZiYjA1NC4uZTFmMzdkYmIw
NWZhMzI1ZjM3MDVlNzk0NzJiZGI1ODAyM2M2ZTQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTg0
Miw3ICs4NDIsNyBAQCBGcmFtZSogV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRl
UGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJikKICAgICAKICNpZiBVU0UoUExVR0lOX0hPU1Rf
UFJPQ0VTUykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKG5ld1dlYlZp
ZXcpCi0gICAgICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCku
ZGlkQ3JlYXRlV2luZG93KCk7CisgICAgICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFu
YWdlcjo6c2luZ2xldG9uKCkuZGlkQ3JlYXRlV2luZG93KCk7CiAjZW5kaWYKICAgICAgICAgCiAg
ICAgcmV0dXJuIGNvcmUoW25ld1dlYlZpZXcgbWFpbkZyYW1lXSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tIGIvU291
cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQppbmRl
eCA0ZjJlMjIxNzAyNWVlNTdhMWZhMzQ4MTJiZTZkZmZjZGUyOWNiZDU0Li4zMzJmNmViMDAxOTE5
NjRjYjI2OWVlMTJlMGNkNGY2MWU2ZmFiZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUubW0KQEAgLTc0LDcgKzc0
LDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQog
ewogICAgIGZvciAoYXV0byYgdmlzaXRlZExpbmtTdG9yZSA6IHZpc2l0ZWRMaW5rU3RvcmVzKCkp
CiAgICAgICAgIHZpc2l0ZWRMaW5rU3RvcmUtPnJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7Ci0g
ICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxj
KCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0
eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExp
bmsoTlNTdHJpbmcgKnVybFN0cmluZykKQEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFdlYlZpc2l0
ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRMaW5rKE5TU3RyaW5nICp1cmxTdHJpbmcpCiAgICAg
bV92aXNpdGVkTGlua0hhc2hlcy5yZW1vdmUobGlua0hhc2gpOwogCiAgICAgaW52YWxpZGF0ZVN0
eWxlc0ZvckxpbmsobGlua0hhc2gpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2Vz
Rm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCku
bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiBib29sIFdlYlZpc2l0
ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0ZWQoUGFnZSYgcGFnZSwgTGlua0hhc2ggbGlua0hhc2gs
IGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCkBA
IC0xNTIsNyArMTUyLDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlu
a0hhc2goTGlua0hhc2ggbGlua0hhc2gpCiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQobGlu
a0hhc2gpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsobGlua0hhc2gpOwotICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwor
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsYygpOwogfQogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRMaW5r
SGFzaGVzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCAwYzA1ZjJjNTA4
ODgwZGE4OWRkNDRlZDQyZDgxODUyM2MzZTQxZjNlLi41YzZmZDY0NTkzNjQ5ZDAwMTRkMTdkYTli
NjY5NmFlZmEyNTIyYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC04
NDksNyArODQ5LDcgQEAgc3RhdGljIHZvaWQgV2ViS2l0SW5pdGlhbGl6ZUdhbWVwYWRQcm92aWRl
cklmTmVjZXNzYXJ5KCkKICAgICBpZiAoaW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkuc2V0U2hhcmVkUHJvdmlkZXIoSElER2FtZXBh
ZFByb3ZpZGVyOjpzaGFyZWQoKSk7CisgICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5z
ZXRTaGFyZWRQcm92aWRlcihISURHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpKTsKICAgICBp
bml0aWFsaXplZCA9IHRydWU7CiB9CiAjZW5kaWYKQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGF0aWMg
dm9pZCBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3ZpZGVySWZOZWNlc3NhcnkoKQogICAgIHBh
Z2VDb25maWd1cmF0aW9uLmFsdGVybmF0aXZlVGV4dENsaWVudCA9IG5ldyBXZWJBbHRlcm5hdGl2
ZVRleHRDbGllbnQoc2VsZik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9y
TWFpbkZyYW1lID0gbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50OwogICAgIHBhZ2VDb25maWd1cmF0
aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCA9IG5ldyBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQo
c2VsZik7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRh
YmFzZVByb3ZpZGVyOjpzaGFyZWQoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVBy
b3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnN0
b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250
ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigp
OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdy
b3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CkBAIC0xMTkwLDcgKzExOTAsNyBAQCBzdGF0aWMgdm9p
ZCBXZWJLaXRJbml0aWFsaXplR2FtZXBhZFByb3ZpZGVySWZOZWNlc3NhcnkoKQogICAgIHBhZ2VD
b25maWd1cmF0aW9uLmluc3BlY3RvckNsaWVudCA9IG5ldyBXZWJJbnNwZWN0b3JDbGllbnQoc2Vs
Zik7CiAgICAgcGFnZUNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1lID0gbmV3
IFdlYkZyYW1lTG9hZGVyQ2xpZW50OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJh
Y2tlckNsaWVudCA9IG5ldyBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQoc2VsZik7Ci0gICAgcGFn
ZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpz
aGFyZWQoKTsKKyAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRh
dGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3Jh
Z2VOYW1lc3BhY2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9
ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlu
a1N0b3JlKCk7CkBAIC0xODY4LDEyICsxODY4LDEyIEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVu
dFRlYXJkb3duRW5hYmxlZCgpCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiArICh2b2lk
KV9lbmFibGVSZW1vdGVJbnNwZWN0b3IKIHsKLSAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgp
LnN0YXJ0KCk7CisgICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5zdGFydCgpOwogfQog
CiArICh2b2lkKV9kaXNhYmxlUmVtb3RlSW5zcGVjdG9yCiB7Ci0gICAgUmVtb3RlSW5zcGVjdG9y
OjpzaGFyZWQoKS5zdG9wKCk7CisgICAgUmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5zdG9w
KCk7CiB9CiAKICsgKHZvaWQpX2Rpc2FibGVBdXRvU3RhcnRSZW1vdGVJbnNwZWN0b3IKQEAgLTE4
ODMsMTIgKzE4ODMsMTIgQEAgc3RhdGljIGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVk
KCkKIAogKyAoQk9PTClfaXNSZW1vdGVJbnNwZWN0b3JFbmFibGVkCiB7Ci0gICAgcmV0dXJuIFJl
bW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuZW5hYmxlZCgpOworICAgIHJldHVybiBSZW1vdGVJbnNw
ZWN0b3I6OnNpbmdsZXRvbigpLmVuYWJsZWQoKTsKIH0KIAogKyAoQk9PTClfaGFzUmVtb3RlSW5z
cGVjdG9yU2Vzc2lvbgogewotICAgIHJldHVybiBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLmhh
c0FjdGl2ZURlYnVnU2Vzc2lvbigpOworICAgIHJldHVybiBSZW1vdGVJbnNwZWN0b3I6OnNpbmds
ZXRvbigpLmhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOwogfQogCiAtIChCT09MKWFsbG93c1JlbW90
ZUluc3BlY3Rpb24KQEAgLTE5MjYsNyArMTkyNiw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVu
dFRlYXJkb3duRW5hYmxlZCgpCiAtICh2b2lkKV9zZXRIb3N0QXBwbGljYXRpb25Qcm9jZXNzSWRl
bnRpZmllcjoocGlkX3QpcGlkIGF1ZGl0VG9rZW46KGF1ZGl0X3Rva2VuX3QpYXVkaXRUb2tlbgog
ewogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGF1ZGl0RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlKG51bGxwdHIsIChjb25zdCBVSW50OCopJmF1ZGl0VG9rZW4sIHNpemVvZihhdWRpdFRva2Vu
KSkpOwotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9y
bWF0aW9uKHBpZCwgYXVkaXREYXRhKTsKKyAgICBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigp
LnNldFBhcmVudFByb2Nlc3NJbmZvcm1hdGlvbihwaWQsIGF1ZGl0RGF0YSk7CiB9CiAjZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQogI2VuZGlmIC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAt
NzkxNSw5ICs3OTE1LDkgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByb3VuZFVwVG9Qb3dlck9m
Mih1aW50NjRfdCBudW0pCiAKICAgICBtZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVN
aW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkp
OwogICAgIG1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChk
ZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5z
ZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogI2lmIFBMQVRGT1JNKElPUykKLSAgICBQYWdlQ2Fj
aGU6OnNoYXJlZCgpLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKKyAgICBQYWdl
Q2FjaGU6OnNpbmdsZXRvbigpLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKICAg
ICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSBzdGQ6Om1heChuc3VybENhY2hlTWVtb3J5Q2Fw
YWNpdHksIFtuc3VybENhY2hlIG1lbW9yeUNhcGFjaXR5XSk7CiAgICAgQ0ZVUkxDYWNoZVJlZiBj
ZkNhY2hlOwogICAgIGlmIChbbnN1cmxDYWNoZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF9DRlVSTENhY2hlKV0gJiYgKGNmQ2FjaGUgPSBbbnN1cmxDYWNoZSBfQ0ZVUkxDYWNoZV0pKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ2FjaGUuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViQ2FjaGUuY3BwCmluZGV4IDdjMmMwY2Y5MTUzOTE3MWE2MTUxMmE5NTU2Y2QxZjJi
NDY1ZmE5YWIuLmRhMjcyNmI3MTE5NzRiMTIxMWE2ZDNkYWFiMTdlYTE5MzY0YWVkNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDYWNoZS5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNhY2hlOjplbXB0eSggdm9pZCkKICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2Uo
KS5lbXB0eSgpOwogCiAgICAgLy8gRW1wdHkgdGhlIENyb3NzLU9yaWdpbiBQcmVmbGlnaHQgY2Fj
aGUKLSAgICBXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQo
KS5lbXB0eSgpOworICAgIFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6
OnNpbmdsZXRvbigpLmVtcHR5KCk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAppbmRleCBiNDMwNzFjMjUyOGRhNmU3OGU4YmQxMjcx
NTEwZmMxNTdiNGE3MzdiLi4xNjgwMjY1YWQ4MmY4ZmJiMjY0MjQzZjYxMmFjZTA2YWI2MjZlZjRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCkBAIC0zMjcsNyArMzI3
LDcgQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6Y2FjaGVkUGFnZUNvdW50KElOVCogY291
bnQpCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpj
b3VudCA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkucGFnZUNvdW50KCk7CisgICAgKmNvdW50ID0gUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5wYWdlQ291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMzM2LDYgKzMzNiw2IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmNhY2hlZEZyYW1l
Q291bnQoSU5UKiBjb3VudCkKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogCi0gICAgKmNvdW50ID0gUGFnZUNhY2hlOjpzaGFyZWQoKS5mcmFtZUNvdW50KCk7Cisg
ICAgKmNvdW50ID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5mcmFtZUNvdW50KCk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuY3BwCmluZGV4IDQ5YzAzNzYyZTk3YzlhMWU3YmFkYjM3
NGZhZjFjNmIzMTcyZjdiNWMuLmZmMzE4YTFjYTNmYzk4NjIzNmVjMDZjOGNjM2E1MzZkNTBjZWIx
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0
ZWRMaW5rU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2l0ZWRMaW5rU3RvcmUuY3BwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBzdGF0aWMgYm9vbCBzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzOwogCi1XZWJW
aXNpdGVkTGlua1N0b3JlJiBXZWJWaXNpdGVkTGlua1N0b3JlOjpzaGFyZWQoKQorV2ViVmlzaXRl
ZExpbmtTdG9yZSYgV2ViVmlzaXRlZExpbmtTdG9yZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0
aWMgV2ViVmlzaXRlZExpbmtTdG9yZSYgdmlzaXRlZExpbmtTdG9yZSA9ICphZG9wdFJlZihuZXcg
V2ViVmlzaXRlZExpbmtTdG9yZSkubGVha1JlZigpOwogICAgIApAQCAtNjIsOCArNjIsOCBAQCB2
b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJvb2wg
c2hvdWxkVHJhY2tWaXNpdGVkTGluawogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpCiB7Ci0gICAgc2hhcmVkKCkucmVtb3ZlVmlzaXRlZExpbmtIYXNo
ZXMoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5
bGVSZWNhbGMoKTsKKyAgICBzaW5nbGV0b24oKS5yZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpOwor
ICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJl
Y2FsYygpOwogfQogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmFkZFZpc2l0ZWRMaW5rKGNv
bnN0IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgV2ViVmlzaXRl
ZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKExpbmtIYXNoIGxpbmtIYXNoKQogICAgIG1f
dmlzaXRlZExpbmtIYXNoZXMuYWRkKGxpbmtIYXNoKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNG
b3JMaW5rKGxpbmtIYXNoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvclZp
c2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQ
YWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBXZWJWaXNpdGVkTGlu
a1N0b3JlOjpyZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmggYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLmgKaW5kZXggN2U3YTA3
NDc1MTJhMDk2OWQ2ZmFiZDA4NWI4OTA1MjdhOWIxNzU3OC4uNjRhOTgwZjFmYTQ1YzgwNGZmNjY1
N2E0ZWVmYTJiYTZkNmE2NGYxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vV2ViQ29y
ZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dl
YkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaApAQCAtMzIsNyArMzIsNyBAQAogCiBj
bGFzcyBXZWJWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVibGljIFdlYkNvcmU6OlZpc2l0ZWRM
aW5rU3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBXZWJWaXNpdGVkTGlua1N0b3JlJiBzaGFy
ZWQoKTsKKyAgICBzdGF0aWMgV2ViVmlzaXRlZExpbmtTdG9yZSYgc2luZ2xldG9uKCk7CiAgICAg
V2ViVmlzaXRlZExpbmtTdG9yZSgpOwogICAgIHZpcnR1YWwgfldlYlZpc2l0ZWRMaW5rU3RvcmUo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNGQ1ZTdmOGE3YmM3MTNiNzhkODc0N2QwNmQw
Y2NiMTljNzBkZGM3Li45OWQzNTNjMDA5N2YyODAzNThlYmRjMzVmMGUwMGUzMGUyNjRhYmJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtNjc1LDcgKzY3NSw3IEBAIHZvaWQgV2ViVmlldzo6c2V0
Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAKICAgICBtZW1vcnlDYWNoZSgp
LnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHksIGNhY2hlTWF4RGVhZENhcGFjaXR5
LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNhY2hlKCkuc2V0RGVhZERlY29kZWRE
YXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKTsKLSAg
ICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CisgICAgUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOwogCiAjaWYgVVNF
KENGTkVUV09SSykKICAgICAvLyBEb24ndCBzaHJpbmsgYSBiaWcgZGlzayBjYWNoZSwgc2luY2Ug
dGhhdCB3b3VsZCBjYXVzZSBjaHVybi4KQEAgLTI4MDUsMTAgKzI4MDUsMTAgQEAgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojppbml0V2l0aEZyYW1lKAogICAgIGNvbmZpZ3VyYXRp
b24uZHJhZ0NsaWVudCA9IG5ldyBXZWJEcmFnQ2xpZW50KHRoaXMpOwogICAgIGNvbmZpZ3VyYXRp
b24uaW5zcGVjdG9yQ2xpZW50ID0gbV9pbnNwZWN0b3JDbGllbnQ7CiAgICAgY29uZmlndXJhdGlv
bi5sb2FkZXJDbGllbnRGb3JNYWluRnJhbWUgPSBuZXcgV2ViRnJhbWVMb2FkZXJDbGllbnQ7Ci0g
ICAgY29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6
OnNoYXJlZCgpOworICAgIGNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRh
YmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBjb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1l
c3BhY2VQcm92aWRlciA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcjo6Y3JlYXRlKGxvY2Fs
U3RvcmFnZURhdGFiYXNlUGF0aChtX3ByZWZlcmVuY2VzLmdldCgpKSk7CiAgICAgY29uZmlndXJh
dGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUxvYWRlckNs
aWVudCo+KGNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1lKTsKLSAgICBjb25m
aWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmV2ViVmlzaXRlZExpbmtTdG9yZTo6c2hhcmVk
KCk7CisgICAgY29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0b3JlID0gJldlYlZpc2l0ZWRMaW5r
U3RvcmU6OnNpbmdsZXRvbigpOwogCiAgICAgbV9wYWdlID0gbmV3IFBhZ2UoY29uZmlndXJhdGlv
bik7CiAgICAgcHJvdmlkZUdlb2xvY2F0aW9uVG8obV9wYWdlLCBuZXcgV2ViR2VvbG9jYXRpb25D
bGllbnQodGhpcykpOwpAQCAtNjQ2NCw3ICs2NDY0LDcgQEAgSFJFU1VMVCBXZWJWaWV3OjpoaXN0
b3J5RGVsZWdhdGUoSVdlYkhpc3RvcnlEZWxlZ2F0ZSoqIGhpc3RvcnlEZWxlZ2F0ZSkKIAogSFJF
U1VMVCBXZWJWaWV3OjphZGRWaXNpdGVkTGlua3MoQlNUUiogdmlzaXRlZFVSTHMsIHVuc2lnbmVk
IHZpc2l0ZWRVUkxDb3VudCkKIHsKLSAgICBhdXRvJiB2aXNpdGVkTGlua1N0b3JlID0gV2ViVmlz
aXRlZExpbmtTdG9yZTo6c2hhcmVkKCk7CisgICAgYXV0byYgdmlzaXRlZExpbmtTdG9yZSA9IFdl
YlZpc2l0ZWRMaW5rU3RvcmU6OnNpbmdsZXRvbigpOwogICAgIFBhZ2VHcm91cCYgZ3JvdXAgPSBj
b3JlKHRoaXMpLT5ncm91cCgpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2
aXNpdGVkVVJMQ291bnQ7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCA4NWE5MDAwODc5ZDQyOGY0Yjc1ZTJmMDcz
MmJmZmE3MmNkYjUxNGZkLi45ZTU5ZWJlM2ExZjVmM2U5YjBmMzIwYTdiMDM5MTYwM2ZiZWUxNTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLmNwcApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLURhdGFiYXNlUHJvY2VzcyYgRGF0YWJhc2VQcm9jZXNzOjpzaGFy
ZWQoKQorRGF0YWJhc2VQcm9jZXNzJiBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpCiB7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz4gZGF0YWJhc2VQcm9jZXNz
OwogICAgIHJldHVybiBkYXRhYmFzZVByb2Nlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggYjJiMjRlZWExM2ZmYjgxZjNjZjc5
MDQ3ZGZjNzAxODQ0M2Y1YWExNi4uNmVhZWVkZmFiNWQ2N2JiYmI5MjQ1OGQwMWQxYjdiODcwM2Ni
MWYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVBy
b2Nlc3MuaApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBwdWJsaWMg
Q2hpbGRQcm9jZXNzLCBwdWJsaWMgV2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZQogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz47CiBwdWJsaWM6Ci0gICAgc3RhdGljIERhdGFi
YXNlUHJvY2VzcyYgc2hhcmVkKCk7CisgICAgc3RhdGljIERhdGFiYXNlUHJvY2VzcyYgc2luZ2xl
dG9uKCk7CiAgICAgfkRhdGFiYXNlUHJvY2VzcygpOwogCiAgICAgY29uc3QgU3RyaW5nJiBpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ZWREYXRhYmFzZURp
cmVjdG9yeTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0lu
ZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbi5j
cHAKaW5kZXggOGJkMDZiM2M5MWU4Y2NiYzAyMGJkOWEwNTliZTg4YmJlZWFmYWZiZC4uNjAzNTg4
MDY3Njk3OWVmZDgyMWZlOTFhZjg4MWI4NTZkYzJmNDk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvSW5kZXhlZERCL0Rh
dGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6ZGlzY29ubmVjdGVkRnJvbVdlYlByb2Nlc3MoKQog
CiB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246OmVzdGFibGlzaENvbm5lY3Rpb24o
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luRGF0YSYgb3Bl
bmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRhJiBtYWluRnJhbWVPcmlnaW4pCiB7
Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZSA9IERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZ2V0
T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZUlkZW50aWZpZXIoZGF0
YWJhc2VOYW1lLCBvcGVuaW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pKTsKKyAgICBtX3VuaXF1
ZUlEQkRhdGFiYXNlID0gRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5nZXRPckNyZWF0ZVVu
aXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllcihkYXRhYmFzZU5hbWUs
IG9wZW5pbmdPcmlnaW4sIG1haW5GcmFtZU9yaWdpbikpOwogICAgIG1fdW5pcXVlSURCRGF0YWJh
c2UtPnJlZ2lzdGVyQ29ubmVjdGlvbigqdGhpcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5pcXVlSURCRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFz
ZS5jcHAKaW5kZXggYjMwMTIyNWEwYTBiYmJjNTRjMmJmYmIzZTEyYTg4ZjE1MDE2NGYxNi4uMTVj
N2YxMWRjMDcyN2M3OGZhOWEzNmQ3MGIyNWZkOTdlYTY1MjdhMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9VbmlxdWVJREJE
YXRhYmFzZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVW5pcXVlSURCRGF0YWJhc2U6OlVuaXF1ZUlE
QkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmkKICAg
ICAvLyBFYWNoIHVuaXF1ZSBJbmRleGVkIERhdGFiYXNlIGV4aXN0cyBpbiBhIGRpcmVjdG9yeSBu
YW1lZCBmb3IgdGhlIGRhdGFiYXNlLCB3aGljaCBleGlzdHMgaW4gYSBkaXJlY3RvcnkgcmVwcmVz
ZW50aW5nIGl0cyBvcGVuaW5nIG9yaWdpbi4KICAgICBtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3Rv
cnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VGaWxlbmFtZUlkZW50aWZpZXIo
aWRlbnRpZmllci5vcGVuaW5nT3JpZ2luKCkpLCBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpKTsK
IAotICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZW5zdXJlSW5kZXhlZERhdGFiYXNlUmVs
YXRpdmVQYXRoRXhpc3RzKG1fZGF0YWJhc2VSZWxhdGl2ZURpcmVjdG9yeSk7CisgICAgRGF0YWJh
c2VQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVJbmRleGVkRGF0YWJhc2VSZWxhdGl2ZVBhdGhF
eGlzdHMobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsKIH0KIAogVW5pcXVlSURCRGF0YWJh
c2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCkBAIC0xMTgsNyArMTE4LDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6dW5yZWdpc3RlckNvbm5lY3Rpb24oRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVj
dGlvbiYgY29ubmUKIAogICAgIGlmIChtX2Nvbm5lY3Rpb25zLmlzRW1wdHkoKSAmJiBtX3BlbmRp
bmdUcmFuc2FjdGlvblJvbGxiYWNrcy5pc0VtcHR5KCkpIHsKICAgICAgICAgc2h1dGRvd24oVW5p
cXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRkb3duKTsKLSAgICAgICAgRGF0
YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVVbmlxdWVJREJEYXRhYmFzZSgqdGhpcyk7Cisg
ICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlVW5pcXVlSURCRGF0YWJh
c2UoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMTEyNSw3ICsxMTI1LDcgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6ZmluYWxpemVSb2xsYmFjayhjb25zdCBXZWJLaXQ6OklEQklkZW50aWZpZXIm
IHRyYW5zYWN0aW8KICAgICAgICAgcmVzZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklkLCBbdGhp
cywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgewogICAgICAgICAgICAgaWYgKG1fYWNjZXB0aW5nTmV3
UmVxdWVzdHMgJiYgbV9jb25uZWN0aW9ucy5pc0VtcHR5KCkgJiYgbV9wZW5kaW5nVHJhbnNhY3Rp
b25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgc2h1dGRvd24oVW5pcXVl
SURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRkb3duKTsKLSAgICAgICAgICAgICAg
ICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZVVu
aXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAg
fSk7CkBAIC0xMTM0LDcgKzExMzQsNyBAQCB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmaW5hbGl6
ZVJvbGxiYWNrKGNvbnN0IFdlYktpdDo6SURCSWRlbnRpZmllciYgdHJhbnNhY3RpbwogU3RyaW5n
IFVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAgIHJldHVybiBEYXRhYmFzZVByb2Nl
c3M6OnNoYXJlZCgpLmFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0
aXZlUGF0aChtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkpOworICAgIHJldHVybiBEYXRhYmFz
ZVByb2Nlc3M6OnNpbmdsZXRvbigpLmFic29sdXRlSW5kZXhlZERhdGFiYXNlUGF0aEZyb21EYXRh
YmFzZVJlbGF0aXZlUGF0aChtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkpOwogfQogCiB2b2lk
IFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0TWFpblRocmVhZFRhc2soc3RkOjp1bmlxdWVfcHRyPEFz
eW5jVGFzaz4gdGFzaywgRGF0YWJhc2VUYXNrVHlwZSB0YXNrVHlwZSkKQEAgLTExODksNyArMTE4
OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlx
dWVfcHRyPEFzeW5jVGFzaz4gdGFzaywgRGF0YWJhCiAgICAgbV9kYXRhYmFzZVRhc2tzLmFwcGVu
ZChXVEY6Om1vdmUodGFzaykpOwogCiAgICAgUmVmUHRyPFVuaXF1ZUlEQkRhdGFiYXNlPiBkYXRh
YmFzZSh0aGlzKTsKLSAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnF1ZXVlKCkuZGlzcGF0
Y2goW2RhdGFiYXNlXSB7CisgICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5xdWV1ZSgp
LmRpc3BhdGNoKFtkYXRhYmFzZV0gewogICAgICAgICBkYXRhYmFzZS0+cGVyZm9ybU5leHREYXRh
YmFzZVRhc2soKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuY3BwCmluZGV4IGM2
MDE4OGM4NGMyOWM2YmY2ODc3MjFkNzQyNDJjNGFjMjZkOGMzYzcuLmVhNTIwYTlhZjZiNGJkNTU3
OTM1YmE0NDE5ZjUyMjQzNzc1YWE2ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmNwcApAQCAt
MzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKLU5ldHdvcmtCbG9iUmVnaXN0cnkmIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgp
CitOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKQog
ewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE5ldHdvcmtCbG9iUmVnaXN0cnk+IHJlZ2lzdHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3JrQmxvYlJlZ2lzdHJ5LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaApp
bmRleCBlNWRiNjNlMzhkY2ZiZmJlYWRmNzEyNjJjOTZkYmM5ZWJlNjUyYzE3Li4wMDMwZTBjMGVl
NTgyNTM5Njc3Y2ViNGU4YmE5YWE5ZjJjODU5NWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9iUmVnaXN0cnkuaApA
QCAtNDYsNyArNDYsNyBAQCBjbGFzcyBOZXR3b3JrQmxvYlJlZ2lzdHJ5IHsKIFdURl9NQUtFX05P
TkNPUFlBQkxFKE5ldHdvcmtCbG9iUmVnaXN0cnkpOwogcHVibGljOgogICAgIE5ldHdvcmtCbG9i
UmVnaXN0cnkoKTsKLSAgICBzdGF0aWMgTmV0d29ya0Jsb2JSZWdpc3RyeSYgc2hhcmVkKCk7Cisg
ICAgc3RhdGljIE5ldHdvcmtCbG9iUmVnaXN0cnkmIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBy
ZWdpc3RlckZpbGVCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKiwgY29uc3Qg
V2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQYXNzUmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAgICB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyosIGNvbnN0IFdlYkNvcmU6OlVSTCYs
IFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFydD4sIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDQ2ZGVhYmVhZmJiMzg3ZTQ2YTVkZjMx
ZGMwYWNjODkxNjM1Y2RkNGIuLjkxMmMwNTc1N2M2YmNmZjgzYjU4ZDk3MWY4MmFjM2QyYjY5NDQz
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTEwNiw4ICsxMDYsOCBAQCB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKQogICAgICAgICBsb2FkZXItPmFib3J0KCk7CiAgICAgQVNTRVJUKG1fbmV0d29ya1Jlc291
cmNlTG9hZGVycy5pc0VtcHR5KCkpOwogCi0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVk
KCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKHRoaXMpOwotICAgIE5ldHdvcmtQcm9j
ZXNzOjpzaGFyZWQoKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyh0aGlzKTsK
KyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5jb25uZWN0aW9uVG9XZWJQcm9j
ZXNzRGlkQ2xvc2UodGhpcyk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92
ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKHRoaXMpOwogfQogCiB2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQpAQCAt
MTE4LDE0ICsxMTgsMTQgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6c2No
ZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG8KIHsKICAgICBSZWZQdHI8
TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZShsb2FkUGFyYW1ldGVycywgdGhpcyk7CiAgICAgbV9uZXR3b3JrUmVzb3VyY2VMb2FkZXJz
LmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2FkZXIpOwotICAgIE5ldHdvcmtQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkuc2NoZWR1bGVMb2Fk
ZXIobG9hZGVyLmdldCgpKTsKKyAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlTG9hZGVyKGxvYWRlci5nZXQoKSk7CiB9
CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnBlcmZvcm1TeW5jaHJvbm91
c0xvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMmIGxvYWRQYXJhbWV0ZXJz
LCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVy
Zm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiByZXBseSkKIHsKICAgICBSZWZQdHI8
TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNy
ZWF0ZShsb2FkUGFyYW1ldGVycywgdGhpcywgcmVwbHkpOwogICAgIG1fbmV0d29ya1Jlc291cmNl
TG9hZGVycy5hZGQobG9hZFBhcmFtZXRlcnMuaWRlbnRpZmllciwgbG9hZGVyKTsKLSAgICBOZXR3
b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVk
dWxlTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hlZHVsZUxvYWRlcihsb2FkZXIuZ2V0
KCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdmVMb2Fk
SWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlkZW50aWZpZXIpCkBAIC0xNzYsMTgg
KzE3NiwxOCBAQCBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzdG9yYWdlU2Vzc2lvbihT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
c3RhcnREb3dubG9hZChTZXNzaW9uSUQsIHVpbnQ2NF90IGRvd25sb2FkSUQsIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTogRG8gc29tZXRoaW5nIHdpdGgg
dGhlIHNlc3Npb24gSUQuCi0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFu
YWdlcigpLnN0YXJ0RG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCk7CisgICAgTmV0d29ya1By
b2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoZG93bmxv
YWRJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh1aW50NjRfdCBtYWluUmVzb3VyY2VM
b2FkSWRlbnRpZmllciwgdWludDY0X3QgZG93bmxvYWRJRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBpZiAo
IW1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyKSB7Ci0gICAgICAgIE5ldHdvcmtQcm9jZXNzOjpz
aGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVl
c3QpOworICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2Vy
KCkuc3RhcnREb3dubG9hZChkb3dubG9hZElELCByZXF1ZXN0KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyID0gbV9uZXR3b3JrUmVz
b3VyY2VMb2FkZXJzLmdldChtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllcik7Ci0gICAgTmV0d29y
a1Byb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25s
b2FkKGRvd25sb2FkSUQsIGxvYWRlci0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAg
ICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhh
bmRsZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVz
cG9uc2UpOwogCiAgICAgLy8gVW5ibG9jayB0aGUgVVJMIGNvbm5lY3Rpb24gb3BlcmF0aW9uIHF1
ZXVlLgogICAgIGxvYWRlci0+aGFuZGxlKCktPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7
CkBAIC0yMjksMzIgKzIyOSwzMiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdAogewogICAgIFJl
ZlB0cjxTYW5kYm94RXh0ZW5zaW9uPiBleHRlbnNpb24gPSBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGUoZXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgp
LnJlZ2lzdGVyRmlsZUJsb2JVUkwodGhpcywgdXJsLCBwYXRoLCBleHRlbnNpb24ucmVsZWFzZSgp
LCBjb250ZW50VHlwZSk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVn
aXN0ZXJGaWxlQmxvYlVSTCh0aGlzLCB1cmwsIHBhdGgsIGV4dGVuc2lvbi5yZWxlYXNlKCksIGNv
bnRlbnRUeXBlKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5Ojpz
aGFyZWQoKS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBXVEY6Om1vdmUoYmxvYlBhcnRzKSwg
Y29udGVudFR5cGUpOworICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lz
dGVyQmxvYlVSTCh0aGlzLCB1cmwsIFdURjo6bW92ZShibG9iUGFydHMpLCBjb250ZW50VHlwZSk7
CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVyQmxvYlVS
TEZyb21VUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMKQogewotICAgIE5ldHdv
cmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwsIHNyY1VS
TCk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVnaXN0ZXJCbG9iVVJM
KHRoaXMsIHVybCwgc3JjVVJMKTsKIH0KIAogdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYg
c3JjVVJMLCBpbnQ2NF90IHN0YXJ0LCBpbnQ2NF90IGVuZCkKIHsKLSAgICBOZXR3b3JrQmxvYlJl
Z2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckJsb2JVUkxGb3JTbGljZSh0aGlzLCB1cmwsIHNyY1VS
TCwgc3RhcnQsIGVuZCk7CisgICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2luZ2xldG9uKCkucmVn
aXN0ZXJCbG9iVVJMRm9yU2xpY2UodGhpcywgdXJsLCBzcmNVUkwsIHN0YXJ0LCBlbmQpOwogfQog
CiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp1bnJlZ2lzdGVyQmxvYlVSTChj
b25zdCBVUkwmIHVybCkKIHsKLSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS51bnJl
Z2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwpOworICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmds
ZXRvbigpLnVucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVybCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmJsb2JTaXplKGNvbnN0IFVSTCYgdXJsLCB1aW50NjRfdCYg
cmVzdWx0U2l6ZSkKIHsKLSAgICByZXN1bHRTaXplID0gTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hh
cmVkKCkuYmxvYlNpemUodGhpcywgdXJsKTsKKyAgICByZXN1bHRTaXplID0gTmV0d29ya0Jsb2JS
ZWdpc3RyeTo6c2luZ2xldG9uKCkuYmxvYlNpemUodGhpcywgdXJsKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5jcHAKaW5kZXggOTA5YWYwZTYwNzZjYTI1ZGVkY2E5NGJkOWFlODQ1NGI1NWNlOTQ5
Zi4uYWY1ZWY4NDMxZTE5ZWNlYzFjNGVlYTM2NTVkOTQ1ZTMyMzRiNTMzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtNjAsNyAr
NjAsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
LU5ldHdvcmtQcm9jZXNzJiBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkKK05ldHdvcmtQcm9jZXNz
JiBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8TmV0d29ya1Byb2Nlc3M+IG5ldHdvcmtQcm9jZXNzOwogICAgIHJldHVybiBuZXR3b3JrUHJv
Y2VzczsKQEAgLTE5MSw3ICsxOTEsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjppbml0aWFsaXpl
Q29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAgICAgQ2hpbGRQcm9jZXNz
Ojppbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKIAogI2lmIEVOQUJMRShTRUNfSVRF
TV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0aWFsaXplQ29ubmVjdGlvbihj
b25uZWN0aW9uKTsKKyAgICBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZUNvbm5l
Y3Rpb24oY29ubmVjdGlvbik7CiAjZW5kaWYKIAogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVu
dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cHBsZW1lbnRzLmJlZ2luKCk7CkBAIC0yODgs
MTQgKzI4OCwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRDYW5IYW5kbGVIVFRQU1NlcnZl
clRydXN0RXZhbHVhdGlvbihib29sIHZhbHVlKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpnZXRO
ZXR3b3JrUHJvY2Vzc1N0YXRpc3RpY3ModWludDY0X3QgY2FsbGJhY2tJRCkKIHsKLSAgICBOZXR3
b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyJiBzY2hlZHVsZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2hh
cmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpOworICAgIE5ldHdvcmtSZXNvdXJj
ZUxvYWRTY2hlZHVsZXImIHNjaGVkdWxlciA9IE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5u
ZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCk7CiAKICAgICBTdGF0aXN0aWNzRGF0YSBkYXRh
OwogCiAgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkxvYWRzUGVuZGluZ0NvdW50Iiwg
c2NoZWR1bGVyLmxvYWRzUGVuZGluZ0NvdW50KCkpOwogICAgIGRhdGEuc3RhdGlzdGljc051bWJl
cnMuc2V0KCJMb2Fkc0FjdGl2ZUNvdW50Iiwgc2NoZWR1bGVyLmxvYWRzQWN0aXZlQ291bnQoKSk7
Ci0gICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5zZXQoIkRvd25sb2Fkc0FjdGl2ZUNvdW50Iiwg
c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuYWN0aXZlRG93bmxvYWRDb3VudCgpKTsKLSAgICBk
YXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNldCgiT3V0c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZXNDb3VudCIsIHNoYXJlZCgpLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLm91dHN0YW5kaW5n
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1i
ZXJzLnNldCgiRG93bmxvYWRzQWN0aXZlQ291bnQiLCBzaW5nbGV0b24oKS5kb3dubG9hZE1hbmFn
ZXIoKS5hY3RpdmVEb3dubG9hZENvdW50KCkpOworICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMu
c2V0KCJPdXRzdGFuZGluZ0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NvdW50Iiwgc2luZ2xldG9u
KCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkub3V0c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZUNvdW50KCkpOwogCiAgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkRpZEdldFN0YXRpc3RpY3MoZGF0YSwgY2FsbGJhY2tJRCks
IDApOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKaW5kZXggZDU3Zjc1MWFlYjYxODRjOWYxZmExMTBiMjhmMzdmMjE2NTAzMTFmNi4uYWQxZTI5
MWQ0NjM2MGE5MmFiYmJlNmRhNzU3YzY3MDkxZWQ5MjcyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC01Myw3ICs1Myw3IEBAIGNsYXNz
IE5ldHdvcmtQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHJpdmF0ZSBEb3dubG9hZE1h
bmFnZXI6OkNsaWVudCB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPE5ldHdvcmtQ
cm9jZXNzPjsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RG93bmxvYWRNYW5hZ2Vy
PjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTmV0d29ya1Byb2Nlc3MmIHNoYXJlZCgpOworICAgIHN0
YXRpYyBOZXR3b3JrUHJvY2VzcyYgc2luZ2xldG9uKCk7CiAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KICAgICBUKiBzdXBwbGVtZW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IGRhYzc1YWY3MjE2
NTI1NzEyY2ZhNWU1MDNjYWVmMmYyMzBkNGRlYzkuLmNmN2E0NzA4NjU0NTU1NDU1YWU0ODlhOTE4
Zjk1OTIzYTE4YTY3NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIoY29uc3QgTmV0d29ya1Jl
c291cmNlTG9hZFBhcmFtZXRlcnMKICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHko
KSkgewogICAgICAgICBmb3IgKGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZWxlbWVudCA6IG9yaWdp
bmFsUmVxdWVzdCgpLmh0dHBCb2R5KCktPmVsZW1lbnRzKCkpIHsKICAgICAgICAgICAgIGlmIChl
bGVtZW50Lm1fdHlwZSA9PSBGb3JtRGF0YUVsZW1lbnQ6OlR5cGU6OkVuY29kZWRCbG9iKQotICAg
ICAgICAgICAgICAgIG1fZmlsZVJlZmVyZW5jZXMuYXBwZW5kVmVjdG9yKE5ldHdvcmtCbG9iUmVn
aXN0cnk6OnNoYXJlZCgpLmZpbGVzSW5CbG9iKGNvbm5lY3Rpb24sIGVsZW1lbnQubV91cmwpKTsK
KyAgICAgICAgICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxv
YlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5maWxlc0luQmxvYihjb25uZWN0aW9uLCBlbGVtZW50Lm1f
dXJsKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAob3JpZ2luYWxSZXF1ZXN0KCkudXJs
KCkucHJvdG9jb2xJcygiYmxvYiIpKSB7CiAgICAgICAgIEFTU0VSVCghbV9wYXJhbWV0ZXJzLnJl
c291cmNlU2FuZGJveEV4dGVuc2lvbik7Ci0gICAgICAgIG1fZmlsZVJlZmVyZW5jZXMuYXBwZW5k
VmVjdG9yKE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgpLmZpbGVzSW5CbG9iKGNvbm5lY3Rp
b24sIG9yaWdpbmFsUmVxdWVzdCgpLnVybCgpKSk7CisgICAgICAgIG1fZmlsZVJlZmVyZW5jZXMu
YXBwZW5kVmVjdG9yKE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLmZpbGVzSW5CbG9i
KGNvbm5lY3Rpb24sIG9yaWdpbmFsUmVxdWVzdCgpLnVybCgpKSk7CiAgICAgfQogCiAgICAgaWYg
KHN5bmNocm9ub3VzUmVwbHkpCkBAIC0xMzUsMTMgKzEzNSwxMyBAQCB2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6c3RhcnQoKQogICAgIG1fY3VycmVudFJlcXVlc3QgPSBvcmlnaW5hbFJlcXVl
c3QoKTsKIAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIGlmICghTmV0d29ya0NhY2hl
OjpzaGFyZWQoKS5pc0VuYWJsZWQoKSB8fCBzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKSB7Cisg
ICAgaWYgKCFOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgpIHx8IHNlc3Npb25J
RCgpLmlzRXBoZW1lcmFsKCkpIHsKICAgICAgICAgc3RhcnROZXR3b3JrTG9hZCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9h
ZGVyKHRoaXMpOwotICAgIE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkucmV0cmlldmUob3JpZ2luYWxS
ZXF1ZXN0KCksIFtsb2FkZXJdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBl
bnRyeSkgeworICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmV0cmlldmUob3JpZ2luYWxS
ZXF1ZXN0KCksIFtsb2FkZXJdKHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrQ2FjaGU6OkVudHJ5PiBl
bnRyeSkgewogICAgICAgICBpZiAobG9hZGVyLT5oYXNPbmVSZWYoKSkgewogICAgICAgICAgICAg
Ly8gVGhlIGxvYWRlciBoYXMgYmVlbiBhYm9ydGVkIGFuZCBpcyBvbmx5IGhlbGQgYWxpdmUgYnkg
dGhpcyBsYW1iZGEuCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNzUsNyArMTc1LDcgQEAgdm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0TmV0d29ya0xvYWQoKQogICAgICAgICBtX2J1
ZmZlcmVkRGF0YSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CiAKICNpZiBFTkFC
TEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAoTmV0d29ya0NhY2hlOjpzaGFyZWQoKS5pc0VuYWJs
ZWQoKSkKKyAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkKICAg
ICAgICAgbV9idWZmZXJlZERhdGFGb3JDYWNoZSA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCk7CiAjZW5kaWYKIApAQCAtMjA0LDcgKzIwNCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpjbGVhbnVwKCkKIAogICAgIGludmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOwog
Ci0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVs
ZXIoKS5yZW1vdmVMb2FkZXIodGhpcyk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5yZW1vdmVMb2FkZXIodGhpcyk7CiAKICAg
ICBtX2hhbmRsZSA9IG51bGxwdHI7CiAKQEAgLTI1Nyw3ICsyNTcsNyBAQCB2b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29ucwogICAgIGlmIChtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSB7CiAgICAgICAg
IGJvb2wgdmFsaWRhdGlvblN1Y2NlZWRlZCA9IG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9
PSAzMDQ7IC8vIDMwNCBOb3QgTW9kaWZpZWQKICAgICAgICAgaWYgKHZhbGlkYXRpb25TdWNjZWVk
ZWQpCi0gICAgICAgICAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLnVwZGF0ZShvcmlnaW5hbFJl
cXVlc3QoKSwgKm1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24sIG1fcmVzcG9uc2UpOworICAgICAg
ICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS51cGRhdGUob3JpZ2luYWxSZXF1ZXN0KCks
ICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsKICAgICAgICAgaWYgKCF2
YWxpZGF0aW9uU3VjY2VlZGVkIHx8IGlzQ29uZGl0aW9uYWxSZXF1ZXN0KG9yaWdpbmFsUmVxdWVz
dCgpKSkKICAgICAgICAgICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOwog
ICAgIH0KQEAgLTMxOCw3ICszMTgsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlk
RmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmluaQogICAgIEFT
U0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwogCiAjaWYgRU5BQkxFKE5F
VFdPUktfQ0FDSEUpCi0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuaXNFbmFibGVkKCkp
IHsKKyAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkgewogICAg
ICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAgICAgICAgLy8gMzA0
IE5vdCBNb2RpZmllZAogICAgICAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKSA9PSAzMDQpOwpAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5p
CiAKICAgICAgICAgYm9vbCBpc1ByaXZhdGUgPSBzZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpOwog
ICAgICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0ZSkKLSAgICAgICAg
ICAgIE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuc3RvcmUob3JpZ2luYWxSZXF1ZXN0KCksIG1fcmVz
cG9uc2UsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIE5l
dHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmUob3JpZ2luYWxSZXF1ZXN0KCksIG1fcmVzcG9u
c2UsIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUucmVsZWFzZSgpKTsKICAgICB9CiAjZW5kaWYKIApA
QCAtNDc0LDcgKzQ3NCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhhCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuYXV0aGVudGljYXRpb25N
YW5hZ2VyKCkuZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fcGFyYW1ldGVycy53
ZWJQYWdlSUQsIG1fcGFyYW1ldGVycy53ZWJGcmFtZUlELCBjaGFsbGVuZ2UpOworICAgIE5ldHdv
cmtQcm9jZXNzOjpzaW5nbGV0b24oKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5kaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9wYXJhbWV0ZXJzLndlYlBhZ2VJRCwgbV9wYXJhbWV0
ZXJzLndlYkZyYW1lSUQsIGNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShSZXNvdXJjZUhhbmRsZSogaGFu
ZGxlLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCkBAIC02MzEsNyArNjMxLDcgQEAg
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0
aW9uU3BhY2VBc3luYyhSZXNvdXJjZUgKIAogICAgIC8vIEhhbmRsZSBzZXJ2ZXIgdHJ1c3QgZXZh
bHVhdGlvbiBhdCBwbGF0Zm9ybS1sZXZlbCBpZiByZXF1ZXN0ZWQsIGZvciBwZXJmb3JtYW5jZSBy
ZWFzb25zLgogICAgIGlmIChwcm90ZWN0aW9uU3BhY2UuYXV0aGVudGljYXRpb25TY2hlbWUoKSA9
PSBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZVNlcnZlclRydXN0RXZhbHVhdGlv
blJlcXVlc3RlZAotICAgICAgICAmJiAhTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmNhbkhhbmRs
ZUhUVFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKCkpIHsKKyAgICAgICAgJiYgIU5ldHdvcmtQcm9j
ZXNzOjpzaW5nbGV0b24oKS5jYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbigpKSB7
CiAgICAgICAgIGNvbnRpbnVlQ2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZShm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcAppbmRleCAyNzIwMjBjY2M5ZWQ1
OGNmZmZkY2M3MTBjMmE4MmI2ZjhiMWViZDYzLi5jMWRhY2MxMmYzMTRiNTc3MDYxM2IyN2QxNDg0
YzhlYzljNjRlYTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9j
YWNoZS9OZXR3b3JrQ2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLU5ldHdvcmtDYWNoZSYgTmV0d29ya0NhY2hlOjpzaGFyZWQoKQorTmV0d29ya0Nh
Y2hlJiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPE5ldHdvcmtDYWNoZT4gaW5zdGFuY2U7CiAgICAgcmV0dXJuIGluc3RhbmNlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRl
eCA1N2RhNTUyOTlmMzcxZTQ1NGE0MzRiZWY1MTMxOGE5ZDgyYTk3NWYwLi41ODNjYTAxOTg2YmNk
ZjUxNjE3ZjhkNTI5M2VkYWI1YjcyZWJhYmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtNDQsNyArNDQsNyBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIE5ldHdvcmtDYWNoZSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTmV0d29ya0NhY2hlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgTmV0d29ya0NhY2hlJiBzaW5nbGV0b24oKTsKIAogICAgIE5l
dHdvcmtDYWNoZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQppbmRleCAyM2YxZDc4N2YyMzEyMWFi
YTBmMmQ2ZjhjZjhlMmM2ZWRmM2YwZGUxLi42MjdiOGJkNGQ4ZGQxYzc4YjJiODlmYzJhM2UzMDU5
ZWMyMzMzNTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jb2Nv
YS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBO
ZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25z
dCBOZXR3b3JrUHJvY2Vzc0MKICAgICBpZiAoIW1fZGlza0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgp
KSB7CiAgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNvbnN1bWVQZXJtYW5lbnRseShwYXJhbWV0
ZXJzLmRpc2tDYWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CiAjaWYgRU5BQkxFKE5FVFdP
UktfQ0FDSEUpCi0gICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNo
ZSAmJiBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3Rv
cnkpKSB7CisgICAgICAgIGlmIChwYXJhbWV0ZXJzLnNob3VsZEVuYWJsZU5ldHdvcmtDYWNoZSAm
JiBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUobV9kaXNrQ2FjaGVEaXJlY3Rv
cnkpKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNVUkxDYWNoZT4gdXJsQ2FjaGUoYWRvcHRO
UyhbW05TVVJMQ2FjaGUgYWxsb2NdIGluaXRXaXRoTWVtb3J5Q2FwYWNpdHk6MCBkaXNrQ2FwYWNp
dHk6MCBkaXNrUGF0aDpuaWxdKSk7CiAgICAgICAgICAgICBbTlNVUkxDYWNoZSBzZXRTaGFyZWRV
UkxDYWNoZTp1cmxDYWNoZS5nZXQoKV07CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMzQsOCAr
MTM0LDggQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hl
TW9kZWwgY2FjaGVNb2RlbCkKICAgICAgICAgcGFnZUNhY2hlQ2FwYWNpdHksIHVybENhY2hlTWVt
b3J5Q2FwYWNpdHksIHVybENhY2hlRGlza0NhcGFjaXR5KTsKIAogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmlzRW5hYmxlZCgpKSB7Ci0g
ICAgICAgIE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuc2V0TWF4aW11bVNpemUodXJsQ2FjaGVEaXNr
Q2FwYWNpdHkpOworICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlzRW5hYmxlZCgp
KSB7CisgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc2V0TWF4aW11bVNpemUodXJs
Q2FjaGVEaXNrQ2FwYWNpdHkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0x
NDgsNyArMTQ4LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVs
KENhY2hlTW9kZWwgY2FjaGVNb2RlbCkKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmNsZWFyRGlza0Nh
Y2hlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKLSAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmNsZWFyKCk7CisgICAg
TmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5jbGVhcigpOwogI2VuZGlmCiAKICAgICBpZiAoIW1f
Y2xlYXJDYWNoZURpc3BhdGNoR3JvdXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KaW5kZXggYjI5OWEzNmMzNWExODgy
OWQwOGE3YmM1YTNiNDNiZjc5MGMxYjdjMS4uMWQ3ZTA1MjdjZjQxNTY4MWQ2MzkwYzQwMTdhMzAw
YTZkMjI4Njc1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9z
L05ldHdvcmtQcm9jZXNzSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQpAQCAtODIsMTQgKzgyLDE0IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIp
CiAgICAgaWYgKHJlc291cmNlQ2FjaGVzVG9DbGVhciA9PSBJbk1lbW9yeVJlc291cmNlQ2FjaGVz
T25seSkKICAgICAgICAgcmV0dXJuOwogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIE5l
dHdvcmtDYWNoZTo6c2hhcmVkKCkuY2xlYXIoKTsKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRv
bigpLmNsZWFyKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZvcm1J
bml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAjaWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2Vj
SXRlbVNoaW06OnNoYXJlZCgpLmluaXRpYWxpemUodGhpcyk7CisgICAgU2VjSXRlbVNoaW06OnNp
bmdsZXRvbigpLmluaXRpYWxpemUodGhpcyk7CiAjZW5kaWYKICAgICBwbGF0Zm9ybUluaXRpYWxp
emVOZXR3b3JrUHJvY2Vzc0NvY29hKHBhcmFtZXRlcnMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9jZXNzTWFjLm1tCmluZGV4IDcx
ZDA2M2IxZDdhYTIyMWJhNGJhNzlmMGI3NDBhMWVkOTE3NzMyNzIuLmZhYzExYTRmOWUyNWI3MmVm
YjczMTgwZjJjMWYzY2Q1MjNjMDRjOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL21hYy9OZXR3b3JrUHJvY2Vzc01hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NNYWMubW0KQEAgLTEwMyw3ICsxMDMsNyBA
QCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyhj
b25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aQogICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQ
cm9jZXNzQ29jb2EocGFyYW1ldGVycyk7CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAg
ICBTZWNJdGVtU2hpbTo6c2hhcmVkKCkuaW5pdGlhbGl6ZSh0aGlzKTsKKyAgICBTZWNJdGVtU2hp
bTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSh0aGlzKTsKICNlbmRpZgogCiAgICAgaWYgKCFwYXJh
bWV0ZXJzLmh0dHBQcm94eS5pc051bGwoKSB8fCAhcGFyYW1ldGVycy5odHRwc1Byb3h5LmlzTnVs
bCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90
ZU5ldHdvcmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFj
L1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1tCmluZGV4IGFmNTRiODFhMDJjMDQ1M2RkYjliN2M3
N2IxZjlkZDE0YjNlZTAzYjguLmI0ZDQxYTU2YzkwMDdhNzA1NDI5Yzg4ZmY4MThlZThjYTk4NmJi
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVO
ZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9t
YWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KQEAgLTY3LDcgKzY3LDcgQEAgUmV0YWluUHRy
PENGRGF0YVJlZj4gUmVtb3RlTmV0d29ya2luZ0NvbnRleHQ6OnNvdXJjZUFwcGxpY2F0aW9uQXVk
aXREYXRhKCkgY29uc3QKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgYXVkaXRfdG9rZW5fdCBh
dWRpdFRva2VuOwotICAgIGlmICghTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCisgICAgaWYgKCFOZXR3
b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVk
aXRUb2tlbihhdWRpdFRva2VuKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJu
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKDAsIChjb25zdCBVSW50OCopJmF1ZGl0VG9rZW4sIHNpemVv
ZihhdWRpdFRva2VuKSkpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAppbmRleCA5ZGI4MWMxZjFhZDk2OTMy
NzVmMWQzYTE0Yzg5NDE3NzYwYTgyMTA2Li5kOWE4ZjYwZjEzZmZhNDEwNDM2YmQ5N2UyMWFlM2E2
YzI0YTJhZjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9Q
bHVnaW5Db250cm9sbGVyUHJveHkuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBQbHVnaW5D
b250cm9sbGVyUHJveHk6OmluaXRpYWxpemUoY29uc3QgUGx1Z2luQ3JlYXRpb25QYXJhbWV0ZXJz
JiBjcmVhdGlvblAKICAgICBBU1NFUlQoIW1faXNJbml0aWFsaXppbmcpOwogICAgIG1faXNJbml0
aWFsaXppbmcgPSB0cnVlOyAvLyBDYW5ub3QgdXNlIFRlbXBvcmFyeUNoYW5nZSBoZXJlLCBiZWNh
dXNlIHRoaXMgb2JqZWN0IGNhbiBiZSBkZWxldGVkIGJlZm9yZSB0aGUgZnVuY3Rpb24gcmV0dXJu
cy4KIAotICAgIG1fcGx1Z2luID0gTmV0c2NhcGVQbHVnaW46OmNyZWF0ZShQbHVnaW5Qcm9jZXNz
OjpzaGFyZWQoKS5uZXRzY2FwZVBsdWdpbk1vZHVsZSgpKTsKKyAgICBtX3BsdWdpbiA9IE5ldHNj
YXBlUGx1Z2luOjpjcmVhdGUoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0c2NhcGVQbHVn
aW5Nb2R1bGUoKSk7CiAgICAgaWYgKCFtX3BsdWdpbikgewogICAgICAgICAvLyBUaGlzIHdpbGwg
ZGVsZXRlIHRoZSBwbHVnLWluIGNvbnRyb2xsZXIgcHJveHkgb2JqZWN0LgogICAgICAgICBtX2Nv
bm5lY3Rpb24tPnJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eSh0aGlzLCAwKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwCmluZGV4IDU3YTY2YTA3
NWIyN2Q5NjEzNDlkZGVhZWZiYjRjNzIyMmNhZTM2MmUuLmVjYjljZjkxN2QxMzkzMGFhY2QxYjAz
ZGMzOWY0ZTU1NTI5NGM1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nl
c3MvUGx1Z2luUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9Q
bHVnaW5Qcm9jZXNzLmNwcApAQCAtNDgsNyArNDgsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBsdWdpblByb2Nlc3MmIFBsdWdpblByb2Nlc3M6
OnNoYXJlZCgpCitQbHVnaW5Qcm9jZXNzJiBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQbHVnaW5Qcm9jZXNzPiBwbHVnaW5Qcm9jZXNzOwog
ICAgIHJldHVybiBwbHVnaW5Qcm9jZXNzOwpAQCAtNzAsOCArNzAsOCBAQCBQbHVnaW5Qcm9jZXNz
Ojp+UGx1Z2luUHJvY2VzcygpCiB2b2lkIFBsdWdpblByb2Nlc3M6Omxvd01lbW9yeUhhbmRsZXIo
Ym9vbCBjcml0aWNhbCkKIHsKICAgICBVTlVTRURfUEFSQU0oY3JpdGljYWwpOwotICAgIGlmIChz
aGFyZWQoKS5zaG91bGRUZXJtaW5hdGUoKSkKLSAgICAgICAgc2hhcmVkKCkudGVybWluYXRlKCk7
CisgICAgaWYgKHNpbmdsZXRvbigpLnNob3VsZFRlcm1pbmF0ZSgpKQorICAgICAgICBzaW5nbGV0
b24oKS50ZXJtaW5hdGUoKTsKIH0KIAogdm9pZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUHJv
Y2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRl
cnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCmluZGV4
IDM1NjhkMDlhZWY4ZjkxMTRjMWYxYjdmYjJmNjcyNzk0N2MxOGY2ZjQuLjAwOWRkNzU5ZTNjOTE0
ZDhlZDU5YjZhMGU5MGFiYjMyNTAzYWNmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1Bs
dWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCkBAIC01MCw3ICs1MCw3IEBAIGNsYXNzIFBsdWdpblByb2Nl
c3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBwcml2YXRlIFdlYkNvcmU6OkF1ZGlvSGFyZHdhcmVM
aXN0ZW5lCiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGx1Z2luUHJvY2Vzcyk7CiAgICAgZnJp
ZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nlc3M+OwogcHVibGljOgotICAgIHN0
YXRpYyBQbHVnaW5Qcm9jZXNzJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgUGx1Z2luUHJvY2VzcyYg
c2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHJlbW92ZVdlYlByb2Nlc3NDb25uZWN0aW9uKFdlYlBy
b2Nlc3NDb25uZWN0aW9uKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJv
Y2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggM2E3NGM3ODQyNWEzN2I1ZTJmYjdk
NzczMjczZTJhZjhmMGNhMmM0NS4uMGZlMzVkMDEwZWJlMjNhYjJjOGIxOGQwMzE0OTEyNDkxNWEy
NTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNz
Q29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9j
ZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTEwNiwxMiArMTA2LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc0Nv
bm5lY3Rpb246OnJlbW92ZVBsdWdpbkNvbnRyb2xsZXJQcm94eShQbHVnaW5Db250cm9sbGVyUHJv
eHkqIHBsCiAgICAgbV9jb25uZWN0aW9uID0gbnVsbHB0cjsKIAogICAgIC8vIFRoaXMgd2lsbCBj
YXVzZSB1cyB0byBiZSBkZWxldGVkLiAgICAKLSAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5y
ZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbih0aGlzKTsKKyAgICBQbHVnaW5Qcm9jZXNzOjpzaW5n
bGV0b24oKS5yZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbih0aGlzKTsKIH0KIAogdm9pZCBXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0
aW9uU3RyaW5nKQogewotICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IENvbm5lY3Rp
b25TdGFjazo6c2hhcmVkKCkuY3VycmVudCgpOworICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVj
dGlvbiA9IENvbm5lY3Rpb25TdGFjazo6c2luZ2xldG9uKCkuY3VycmVudCgpOwogICAgIGlmICgh
Y29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhj
ZXB0aW9uU3RyaW5nKQogCiB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXImIGRl
Y29kZXIpCiB7Ci0gICAgQ29ubmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBj
dXJyZW50Q29ubmVjdGlvbihDb25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpLCAmY29ubmVjdGlvbik7
CisgICAgQ29ubmVjdGlvblN0YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29u
bmVjdGlvbihDb25uZWN0aW9uU3RhY2s6OnNpbmdsZXRvbigpLCAmY29ubmVjdGlvbik7CiAKICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgZGlkUmVjZWl2
ZVdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKQEAgLTE0
Miw3ICsxNDIsNyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6TQogCiB2b2lkIFdlYlByb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpN
ZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKLSAgICBDb25uZWN0aW9uU3RhY2s6OkN1
cnJlbnRDb25uZWN0aW9uUHVzaGVyIGN1cnJlbnRDb25uZWN0aW9uKENvbm5lY3Rpb25TdGFjazo6
c2hhcmVkKCksICZjb25uZWN0aW9uKTsKKyAgICBDb25uZWN0aW9uU3RhY2s6OkN1cnJlbnRDb25u
ZWN0aW9uUHVzaGVyIGN1cnJlbnRDb25uZWN0aW9uKENvbm5lY3Rpb25TdGFjazo6c2luZ2xldG9u
KCksICZjb25uZWN0aW9uKTsKIAogICAgIHVpbnQ2NF90IGRlc3RpbmF0aW9uSUQgPSBkZWNvZGVy
LmRlc3RpbmF0aW9uSUQoKTsKIApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nv
bm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBh
c3luY2hyCiAgICAgcmVwbHktPnNlbmQoKTsKIAogICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFt
cCBhbnkgdGltZXJzIGR1cmluZyBkZXN0cnVjdGlvbgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFj
dGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLmNvbm5lY3Rpb25BY3Rpdml0
eSgpKTsKKyAgICBBY3Rpdml0eUFzc2VydGlvbiBhY3Rpdml0eUFzc2VydGlvbihQbHVnaW5Qcm9j
ZXNzOjpzaW5nbGV0b24oKS5jb25uZWN0aW9uQWN0aXZpdHkoKSk7CiAKICAgICBQbHVnaW5Db250
cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xsZXJQcm94eSA9IG1fcGx1Z2luQ29udHJvbGxlcnMu
Z2V0KHBsdWdpbkluc3RhbmNlSUQpOwogICAgIApAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBsdWdpbkludGVybmFsKGNvbnN0IFBsdWdpbkNyZWF0
aW9uUGFyYW1ldGVycyYKIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBsdWdpbihj
b25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVycywgUGFzc1Jl
ZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXll
ZFJlcGx5PiByZXBseSkKIHsKICAgICAvLyBFbnN1cmUgd2UgZG9uJ3QgY2xhbXAgYW55IHRpbWVy
cyBkdXJpbmcgaW5pdGlhbGl6YXRpb24KLSAgICBBY3Rpdml0eUFzc2VydGlvbiBhY3Rpdml0eUFz
c2VydGlvbihQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5jb25uZWN0aW9uQWN0aXZpdHkoKSk7Cisg
ICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZpdHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2lu
Z2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5KCkpOwogCiAgICAgUGx1Z2luQ29udHJvbGxlclBy
b3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkgPSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChjcmVh
dGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFuY2VJRCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5t
bQppbmRleCBmYzU4Nzc2NGEyYTUzYTRmMjQzNjllZGNkMjk4ZDFkYTg0YzlmNDQ5Li5iMDE1OTI5
NGU4OWYwNTFmZTFjYzI2OTIxNDU4ODQzNTE4MjRhOGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Db250cm9sbGVyUHJveHlNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luQ29udHJvbGxlclByb3h5TWFj
Lm1tCkBAIC01MiwxMiArNTIsMTIgQEAgdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldENv
bXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUKIAogY29uc3Qg
TWFjaFNlbmRSaWdodCYgUGx1Z2luQ29udHJvbGxlclByb3h5Ojpjb21wb3NpdGluZ1JlbmRlclNl
cnZlclBvcnQoKQogewotICAgIHJldHVybiBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5jb21wb3Np
dGluZ1JlbmRlclNlcnZlclBvcnQoKTsKKyAgICByZXR1cm4gUGx1Z2luUHJvY2Vzczo6c2luZ2xl
dG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCk7CiB9CiAKIHZvaWQgUGx1Z2luQ29u
dHJvbGxlclByb3h5OjpvcGVuUGx1Z2luUHJlZmVyZW5jZVBhbmUoKQogewotICAgIFBsdWdpblBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlblBsdWdpblByZWZlcmVuY2VQYW5lKCksIDApOworICAg
IFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlblBsdWdpblByZWZlcmVuY2VQYW5l
KCksIDApOwogfQogCiB2b2lkIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6cGxhdGZvcm1Jbml0aWFs
aXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzKQpA
QCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5Ojp1cGRhdGVMYXll
ckhvc3RpbmdDb250ZXh0KExheWVySG9zdGluZ01vZGUgbGF5ZXJIb3N0CiAKICAgICBzd2l0Y2gg
KGxheWVySG9zdGluZ01vZGUpIHsKICAgICAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpJblBy
b2Nlc3M6Ci0gICAgICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdD
b250ZXh0OjpjcmVhdGVGb3JQb3J0KFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLmNvbXBvc2l0aW5n
UmVuZGVyU2VydmVyUG9ydCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9
IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQoUGx1Z2luUHJvY2Vzczo6c2luZ2xl
dG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQogICAgICAgICBjYXNlIExh
eWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9jZXNzTWFjLm1tCmluZGV4IGU4ZjRlYjAxOGVmZDE0
MDUyYjA4MGM4ZWVkMTMyMGY1OWQ1NDNiM2UuLjA0MmQ0MTc4YjhlZjI1ZmM2NDBhZDgxZDdkNjIw
NmVjMzk5MDI1YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFj
L1BsdWdpblByb2Nlc3NNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9t
YWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpAQCAtMTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHZvaWQgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXI6OndpbmRvd1Nob3duKFQgd2luZG93
KQogICAgIAogICAgIC8vIElmIHRoaXMgaXMgdGhlIGZpcnN0IGZ1bGwgc2NyZWVuIHdpbmRvdyB0
byBiZSBzaG93biwgbm90aWZ5IHRoZSBVSSBwcm9jZXNzLgogICAgIGlmICh3aW5kb3dTZXRXYXNF
bXB0eSkKLSAgICAgICAgUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkuc2V0RnVsbHNjcmVlbldpbmRv
d0lzU2hvd2luZyh0cnVlKTsKKyAgICAgICAgUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0
RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyh0cnVlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gdm9pZCBGdWxsc2NyZWVuV2luZG93VHJhY2tlcjo6d2luZG93SGlkZGVuKFQgd2luZG93KQpA
QCAtMTI4LDcgKzEyOCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgRnVsbHNjcmVlbldp
bmRvd1RyYWNrZXI6OndpbmRvd0hpZGRlbihUIHdpbmRvdykKIAogICAgIC8vIElmIHRoaXMgd2Fz
IHRoZSBsYXN0IGZ1bGwgc2NyZWVuIHdpbmRvdyB0aGF0IHdhcyB2aXNpYmxlLCBub3RpZnkgdGhl
IFVJIHByb2Nlc3MuCiAgICAgaWYgKG1fd2luZG93cy5pc0VtcHR5KCkpCi0gICAgICAgIFBsdWdp
blByb2Nlc3M6OnNoYXJlZCgpLnNldEZ1bGxzY3JlZW5XaW5kb3dJc1Nob3dpbmcoZmFsc2UpOwor
ICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRGdWxsc2NyZWVuV2luZG93SXNT
aG93aW5nKGZhbHNlKTsKIH0KIAogc3RhdGljIEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyJiBmdWxs
c2NyZWVuV2luZG93VHJhY2tlcigpCkBAIC0xOTUsNyArMTk1LDcgQEAgc3RhdGljIHZvaWQgY2Fy
Ym9uV2luZG93SGlkZGVuKFdpbmRvd1JlZiB3aW5kb3cpCiBzdGF0aWMgYm9vbCBvcGVuQ0ZVUkxS
ZWYoQ0ZVUkxSZWYgdXJsLCBpbnQzMl90JiBzdGF0dXMsIENGVVJMUmVmKiBsYXVuY2hlZFVSTCkK
IHsKICAgICBTdHJpbmcgbGF1bmNoZWRVUkxTdHJpbmc7Ci0gICAgaWYgKCFQbHVnaW5Qcm9jZXNz
OjpzaGFyZWQoKS5vcGVuVVJMKFVSTCh1cmwpLnN0cmluZygpLCBzdGF0dXMsIGxhdW5jaGVkVVJM
U3RyaW5nKSkKKyAgICBpZiAoIVBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLm9wZW5VUkwoVVJM
KHVybCkuc3RyaW5nKCksIHN0YXR1cywgbGF1bmNoZWRVUkxTdHJpbmcpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoIWxhdW5jaGVkVVJMU3RyaW5nLmlzTnVsbCgpICYmIGxhdW5j
aGVkVVJMKQpAQCAtMjA3LDcgKzIwNyw3IEBAIHN0YXRpYyBib29sIG9wZW5DRlVSTFJlZihDRlVS
TFJlZiB1cmwsIGludDMyX3QmIHN0YXR1cywgQ0ZVUkxSZWYqIGxhdW5jaGVkVVJMKQogCiBzdGF0
aWMgdm9pZCBzZXRNb2RhbChib29sIG1vZGFsV2luZG93SXNTaG93aW5nKQogewotICAgIFBsdWdp
blByb2Nlc3M6OnNoYXJlZCgpLnNldE1vZGFsV2luZG93SXNTaG93aW5nKG1vZGFsV2luZG93SXNT
aG93aW5nKTsKKyAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5zZXRNb2RhbFdpbmRvd0lz
U2hvd2luZyhtb2RhbFdpbmRvd0lzU2hvd2luZyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBtb2Rh
bENvdW50ID0gMDsKQEAgLTI3NSw3ICsyNzUsNyBAQCBzdGF0aWMgdm9pZCByZXBsYWNlZE5TQ29u
Y3JldGVUYXNrX2xhdW5jaChOU1Rhc2sgKnNlbGYsIFNFTCBfY21kKQogICAgIGZvciAoTlNTdHJp
bmcgKmFyZ3VtZW50IGluIHNlbGYuYXJndW1lbnRzKQogICAgICAgICBhcmd1bWVudHMudW5jaGVj
a2VkQXBwZW5kKGFyZ3VtZW50KTsKIAotICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5s
YXVuY2hQcm9jZXNzKGxhdW5jaFBhdGgsIGFyZ3VtZW50cykpCisgICAgaWYgKFBsdWdpblByb2Nl
c3M6OnNpbmdsZXRvbigpLmxhdW5jaFByb2Nlc3MobGF1bmNoUGF0aCwgYXJndW1lbnRzKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgTlNDb25jcmV0ZVRhc2tfbGF1bmNoKHNlbGYsIF9jbWQpOwpA
QCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBOU1J1bm5pbmdBcHBsaWNhdGlvbiAqcmVwbGFjZWRO
U1dvcmtzcGFjZV9sYXVuY2hBcHBsaWNhdGlvbkF0VVJMX29wdGlvbnNfCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpZiAoUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkubGF1bmNoQXBwbGljYXRpb25B
dFVSTChVUkwodXJsKS5zdHJpbmcoKSwgYXJndW1lbnRzKSkgeworICAgIGlmIChQbHVnaW5Qcm9j
ZXNzOjpzaW5nbGV0b24oKS5sYXVuY2hBcHBsaWNhdGlvbkF0VVJMKFVSTCh1cmwpLnN0cmluZygp
LCBhcmd1bWVudHMpKSB7CiAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAgICAgICplcnJvciA9
IG5pbDsKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgQk9P
TCAoKk5TV29ya3NwYWNlX29wZW5GaWxlKShOU1dvcmtzcGFjZSAqLCBTRUwsIE5TU3RyaW5nICop
OwogCiBzdGF0aWMgQk9PTCByZXBsYWNlZE5TV29ya3NwYWNlX29wZW5GaWxlKE5TV29ya3NwYWNl
ICpzZWxmLCBTRUwgX2NtZCwgTlNTdHJpbmcgKmZ1bGxQYXRoKQogewotICAgIGlmIChQbHVnaW5Q
cm9jZXNzOjpzaGFyZWQoKS5vcGVuRmlsZShmdWxsUGF0aCkpCisgICAgaWYgKFBsdWdpblByb2Nl
c3M6OnNpbmdsZXRvbigpLm9wZW5GaWxlKGZ1bGxQYXRoKSkKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKICAgICByZXR1cm4gTlNXb3Jrc3BhY2Vfb3BlbkZpbGUoc2VsZiwgX2NtZCwgZnVsbFBhdGgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmNwcAppbmRleCA1NjVhZGY1
OTliZjM2NzMwNjIxOWU2ZTU4ZWE4OTgxOTlkNTEyNmNiLi5mYjUzOTdkMTFhZDI0MmY3YzM2NTky
MzI4MjhjYmFmMzFlMjYyZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29u
bmVjdGlvblN0YWNrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0
YWNrLmNwcApAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQ29ubmVj
dGlvblN0YWNrJiBDb25uZWN0aW9uU3RhY2s6OnNoYXJlZCgpCitDb25uZWN0aW9uU3RhY2smIENv
bm5lY3Rpb25TdGFjazo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
Q29ubmVjdGlvblN0YWNrPiBjb25uZWN0aW9uU3RhY2s7CiAgICAgcmV0dXJuIGNvbm5lY3Rpb25T
dGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2su
aCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suaAppbmRleCBiZDc1M2Ew
ZTg1YjkzMGY1NjMzNjc4NDcxMjY4ZWRiZDhmYTFlYmNkLi5jNTMyNjM4OTQ0OGUzZWM1NmQ1MjU5
NmM1ZWQ3ZjBhOTRkMTVkN2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29u
bmVjdGlvblN0YWNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFj
ay5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBDb25uZWN0
aW9uU3RhY2sgewogcHVibGljOgotICAgIHN0YXRpYyBDb25uZWN0aW9uU3RhY2smIHNoYXJlZCgp
OworICAgIHN0YXRpYyBDb25uZWN0aW9uU3RhY2smIHNpbmdsZXRvbigpOwogCiAgICAgSVBDOjpD
b25uZWN0aW9uKiBjdXJyZW50KCkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvTGVnYWN5UHJvY2Vzcy9DaGlsZFByb2Nlc3NF
bnRyeVBvaW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9t
YWMvTGVnYWN5UHJvY2Vzcy9DaGlsZFByb2Nlc3NFbnRyeVBvaW50LmgKaW5kZXggZGJmMGExZjEw
NjgyNjk1NTg5ZWE5ZmZhZjNhZDViYjU1NzM2YWI1NC4uMWQ0Y2UzZjYyMDEzN2Q2NWYxYzFmMWRj
OWUzMDA3NmFmNWE2Yzc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5
UG9pbnRVdGlsaXRpZXMvbWFjL0xlZ2FjeVByb2Nlc3MvQ2hpbGRQcm9jZXNzRW50cnlQb2ludC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9MZWdh
Y3lQcm9jZXNzL0NoaWxkUHJvY2Vzc0VudHJ5UG9pbnQuaApAQCAtODcsNyArODcsNyBAQCBpbnQg
Q2hpbGRQcm9jZXNzTWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIGlmICghZGVs
ZWdhdGUuZ2V0RXh0cmFJbml0aWFsaXphdGlvbkRhdGEocGFyYW1ldGVycy5leHRyYUluaXRpYWxp
emF0aW9uRGF0YSkpCiAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogCi0gICAgICAg
IENoaWxkUHJvY2Vzc1R5cGU6OnNoYXJlZCgpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CisgICAg
ICAgIENoaWxkUHJvY2Vzc1R5cGU6OnNpbmdsZXRvbigpLmluaXRpYWxpemUocGFyYW1ldGVycyk7
CiAgICAgfQogCiAgICAgZGVsZWdhdGUuc3RhcnRSdW5Mb29wKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENT
ZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGls
aXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2VydmljZUVudHJ5UG9pbnQuaAppbmRleCAwOTk4NmJk
NzU5ODk1NGY2MTYzMGQ3YTk4NWYyYTRjZjYwNzQxYjEzLi5mYmIzMmEzOTUwYWJkY2I3N2FlZGNj
OGQyYjhhY2E3NDZiNTE1OTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50
cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2
aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBYUENTZXJ2
aWNlSW5pdGlhbGl6ZXIoT1NPYmplY3RQdHI8eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwg
eHBjX29iamVjdF8KICAgICB2b3VjaGVyX3JlcGxhY2VfZGVmYXVsdF92b3VjaGVyKCk7CiAjZW5k
aWYKIAotICAgIFhQQ1NlcnZpY2VUeXBlOjpzaGFyZWQoKS5pbml0aWFsaXplKHBhcmFtZXRlcnMp
OworICAgIFhQQ1NlcnZpY2VUeXBlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJN
ZW1vcnlTYW1wbGVyLmNwcAppbmRleCA4MjQ4ODc3NzhkOTFmZTE1NjI3NDYzYjEzYmMxNjk3ZWI3
ZjQyMjI5Li4yZmE0M2ZkMjFiMDE4YzBjMmYxMDhkNDViYzM4ZWQwZGQyZTMzNjk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgY29uc3QgY2hhciBzZXBhcmF0b3IgPSAnXHQn
OwogCi1XZWJNZW1vcnlTYW1wbGVyKiBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKQorV2ViTWVt
b3J5U2FtcGxlciogV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMg
V2ViTWVtb3J5U2FtcGxlciogc2hhcmVkTWVtb3J5U2FtcGxlcjsKICAgICBpZiAoIXNoYXJlZE1l
bW9yeVNhbXBsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5
U2FtcGxlci5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAppbmRl
eCBlYzI0NDEwNWM4ZmQ1NDNhMDBkMGRhOTZlYzJhYjY0OTE5NTY2OWU0Li42NmY2MmEyZWM4ZjRm
YjNjY2QyOTFkYjViMjM5ZmM2ZDVmYmQwM2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJN
ZW1vcnlTYW1wbGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgc3RydWN0IFdlYk1lbW9yeVN0YXRpc3Rp
Y3MgewogY2xhc3MgV2ViTWVtb3J5U2FtcGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
V2ViTWVtb3J5U2FtcGxlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIq
IHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJNZW1vcnlTYW1wbGVyKiBzaW5nbGV0b24oKTsKICAg
ICB2b2lkIHN0YXJ0KGNvbnN0IGRvdWJsZSBpbnRlcnZhbCA9IDApOwogICAgIHZvaWQgc3RhcnQo
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91
YmxlIGludGVydmFsID0gMCk7CiAgICAgdm9pZCBzdG9wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvaW9zL0NoaWxkUHJvY2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCmluZGV4IGFlY2MwNDFlZWMyZWRhOGUzNDczNjRh
YzJlZGM4M2Q2M2RkN2NkY2IuLmVmYzdiM2I4ZmUwMDJiNmE2NGIxZDJiZDJkODdmYzJhNDFhNzdi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCkBA
IC02Niw3ICs2Niw3IEBAIHZvaWQgQ2hpbGRQcm9jZXNzOjpzZXRBcHBsaWNhdGlvbklzRGFlbW9u
KCkKIAogdm9pZCBDaGlsZFByb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgRmxv
YXRpbmdQb2ludEVudmlyb25tZW50JiBmbG9hdGluZ1BvaW50RW52aXJvbm1lbnQgPSBGbG9hdGlu
Z1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgpOyAKKyAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1l
bnQmIGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCA9IEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6
c2luZ2xldG9uKCk7IAogICAgIGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5lbmFibGVEZW5vcm1h
bFN1cHBvcnQoKTsgCiAgICAgZmxvYXRpbmdQb2ludEVudmlyb25tZW50LnNhdmVNYWluVGhyZWFk
RW52aXJvbm1lbnQoKTsgCiAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjaGFu
Z2VDdXJyZW50RGlyZWN0b3J5UGF0aDpbW05TQnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhd
XTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVy
cy9TZWNjb21wQnJva2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21w
RmlsdGVycy9TZWNjb21wQnJva2VyLmNwcAppbmRleCA1OGU3M2Y5MWY3Y2JiNDUxZjI0YjQ5MWY1
ZWQ3ZjliZmVkZmE5ZDBmLi4xMTU4YWVlNmE5MDk0YTQ3MjQ0NzI4NzRlMjBkZjk4OGE3YmI5ZjQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMv
U2VjY29tcEJyb2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2Nv
bXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3BwCkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIHZv
aWQgU0lHU1lTSGFuZGxlcihpbnQgc2lnbmFsLCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIGRhdGEp
CiAgICAgaWYgKCF1Y29udGV4dCkKICAgICAgICAgQ1JBU0goKTsKIAotICAgIFNlY2NvbXBCcm9r
ZXJDbGllbnQqIGNsaWVudCA9ICZTZWNjb21wQnJva2VyQ2xpZW50OjpzaGFyZWQoKTsKKyAgICBT
ZWNjb21wQnJva2VyQ2xpZW50KiBjbGllbnQgPSAmU2VjY29tcEJyb2tlckNsaWVudDo6c2luZ2xl
dG9uKCk7CiAKICAgICBpZiAoY2xpZW50LT5oYW5kbGVJZk9wZW5pbmdPbmxpbmVDUFVDb3VudCgm
dWNvbnRleHQtPnVjX21jb250ZXh0KSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5oIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5oCmluZGV4IGExNTE5NTQ5NTMzYjg4MmM0
MTc5ODRmNDVkMWJiODJjOTA1MjVjOWYuLmFiMzQyMjQ2MzM4ZmZlOTI3Y2RiOWFkYWEzYjFkOGUz
OTIwMTg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3Rv
cmFnZVNoaW0uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VT
aGltLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgQ29va2llU3RvcmFnZVNoaW0gewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKENvb2tpZVN0b3JhZ2VTaGltKTsKICAgICBmcmllbmQgY2xhc3Mg
TmV2ZXJEZXN0cm95ZWQ8Q29va2llU3RvcmFnZVNoaW0+OwogcHVibGljOgotICAgIHN0YXRpYyBD
b29raWVTdG9yYWdlU2hpbSYgc2hhcmVkKCk7CisgICAgc3RhdGljIENvb2tpZVN0b3JhZ2VTaGlt
JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdlU2hpbS5tbQppbmRleCAxN2I4YzcyZjFiOGEx
ZDAzN2Q0N2FjMDY4YzQ0YTYxYmQyOGQ1ODBiLi4wNzBhODQxNDQyZTdmYWE1ZThjZWI4OGMyNzYx
MTBlZWM4NzIxNDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tp
ZVN0b3JhZ2VTaGltLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3Rv
cmFnZVNoaW0ubW0KQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiB3ZWJL
aXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RIZWFkZXJGaWVsZHNGb3JVUkwoQ0ZIVFRQQ28KIHsK
ICAgICBTdHJpbmcgY29va2llczsKICAgICBVUkwgZmlyc3RQYXJ0eUZvckNvb2tpZXNVUkw7Ci0g
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCksIGZpcnN0UGFydHlGb3JDb29raWVzVVJMLCBpblJlcXVlc3RVUkwpLCBNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET006OlJlcGx5KGNvb2tpZXMp
LCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShTZXNzaW9uSUQ6OmRlZmF1
bHRTZXNzaW9uSUQoKSwgZmlyc3RQYXJ0eUZvckNvb2tpZXNVUkwsIGluUmVxdWVzdFVSTCksIE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVw
bHkoY29va2llcyksIDApKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChjb29raWVzLmlz
TnVsbCgpKQpAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIHdlYktpdENv
b2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRlckZpZWxkc0ZvclVSTChDRkhUVFBDbwogICAgIHJl
dHVybiBDRkRpY3Rpb25hcnlDcmVhdGUoMCwgY29va2llS2V5cywgY29va2llVmFsdWVzLCAxLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKTsKIH0KIAotQ29va2llU3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaGFy
ZWQoKQorQ29va2llU3RvcmFnZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQog
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxDb29raWVTdG9yYWdlU2hpbT4gc3RvcmFnZTsK
ICAgICByZXR1cm4gc3RvcmFnZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9t
YWMvU2VjSXRlbVNoaW0uY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hp
bS5jcHAKaW5kZXggNmM2NjFiMTNhNDRjMDVhMmUwNTA2NGIwYjg0NmIzZjczODE2MmM5NC4uNDAy
OWQyMzU4NTU3MmJlOWMxMzc0NGNlNGZhMWVkZTIxOTk1MzVjZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEJsb2Nr
aW5nUmVzcG9uc2VNYXA8U2VjSXRlbVJlc3BvbnNlRGF0YT4mIHJlc3BvbnNlTWFwKCkKIAogc3Rh
dGljIENoaWxkUHJvY2Vzcyogc2hhcmVkUHJvY2VzczsKIAotU2VjSXRlbVNoaW0mIFNlY0l0ZW1T
aGltOjpzaGFyZWQoKQorU2VjSXRlbVNoaW0mIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKQogewog
ICAgIHN0YXRpYyBTZWNJdGVtU2hpbSogc2hpbTsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90
IG9uY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGlt
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmgKaW5kZXggOTdjNDc4
OGI1MjZkNGFiYTI4ODYxYWQ0MTJjNWIzNTM4NzNjNzc5ZC4uY2IzNjQyNTk4NDRiNDg1MjljNWI3
ZjFlNDk3OTk3ZDI4N2MwOWU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21h
Yy9TZWNJdGVtU2hpbS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNo
aW0uaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBTZWNJdGVtUmVzcG9uc2VEYXRhOwogY2xhc3Mg
U2VjSXRlbVNoaW0gOiBwdWJsaWMgSVBDOjpDb25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVj
ZWl2ZXIgewogV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VjSXRlbVNoaW0pOwogcHVibGljOgotICAg
IHN0YXRpYyBTZWNJdGVtU2hpbSYgc2hhcmVkKCk7CisgICAgc3RhdGljIFNlY0l0ZW1TaGltJiBz
aW5nbGV0b24oKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZShDaGlsZFByb2Nlc3MqKTsKICAgICB2
b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL3VuaXgvQ2hpbGRQcm9jZXNzTWFpbi5oCmluZGV4IGNmMmNiMDFmYzgxMTVm
YTU4NTU5NjVjNmRlMGI0YzJlNzM1MWY1OTAuLjdiOTAyOTQyMGQ5OGZiNmNmNzkxYWVmZjkzMDdi
MmE4NWQxYWMxMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC91bml4L0NoaWxk
UHJvY2Vzc01haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvdW5peC9DaGlsZFByb2Nl
c3NNYWluLmgKQEAgLTU3LDcgKzU3LDcgQEAgaW50IENoaWxkUHJvY2Vzc01haW4oaW50IGFyZ2Ms
IGNoYXIqKiBhcmd2KQogICAgIGlmICghY2hpbGRNYWluLnBhcnNlQ29tbWFuZExpbmUoYXJnYywg
YXJndikpCiAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CiAKLSAgICBDaGlsZFByb2Nlc3NU
eXBlOjpzaGFyZWQoKS5pbml0aWFsaXplKGNoaWxkTWFpbi5pbml0aWFsaXphdGlvblBhcmFtZXRl
cnMoKSk7CisgICAgQ2hpbGRQcm9jZXNzVHlwZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShjaGls
ZE1haW4uaW5pdGlhbGl6YXRpb25QYXJhbWV0ZXJzKCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwog
ICAgIGNoaWxkTWFpbi5wbGF0Zm9ybUZpbmFsaXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVja2VyLmNwcAppbmRleCAyZGE5NGRmYzIwMDM5YmYw
MTg3MTNiYTVhZGFjMDYzMzU3ZGQwN2Y1Li4zMjc5ZGQ3YTk2N2Y4MTQ5ZTUxNmYyOWIyOGY5NGQy
NGI1NGQ1YTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tU
ZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4
dENoZWNrZXIuY3BwCkBAIC0zNiwyNSArMzYsMjUgQEAgdm9pZCBXS1RleHRDaGVja2VyU2V0Q2xp
ZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGllbnRCYXNlKiB3a0NsaWVudCkKIHsKICAgICBpZiAo
d2tDbGllbnQgJiYgd2tDbGllbnQtPnZlcnNpb24pCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPnNldENsaWVudCh3a0NsaWVudCk7CisgICAgV2ViVGV4dENo
ZWNrZXI6OnNpbmdsZXRvbigpLT5zZXRDbGllbnQod2tDbGllbnQpOwogfQogCiB2b2lkIFdLVGV4
dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBl
bmFibGVkKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2Vy
OjpzaW5nbGV0b24oKS0+Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGVuYWJsZWQpOwogfQogCiB2b2lkIFdLVGV4dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
U3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVk
KCktPmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoZW5hYmxlZCk7CisgICAgV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGVuYWJsZWQpOwogfQogCiB2b2lkIFdLVGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFn
ZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogewotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2hlY2tTcGVsbGluZyh0b0ltcGwocGFnZSksIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNoZWNrU3BlbGxpbmco
dG9JbXBsKHBhZ2UpLCBzdGFydEJlZm9yZVNlbGVjdGlvbik7CiB9CiAKIHZvaWQgV0tUZXh0Q2hl
Y2tlckNoYW5nZVNwZWxsaW5nVG9Xb3JkKFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB3b3Jk
KQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2hhbmdlU3BlbGxpbmdUb1dvcmQo
dG9JbXBsKHBhZ2UpLCB0b1dURlN0cmluZyh3b3JkKSk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNp
bmdsZXRvbigpLT5jaGFuZ2VTcGVsbGluZ1RvV29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3RyaW5n
KHdvcmQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWlu
LmNwcAppbmRleCAwYTlmMWY1YjUwMDk5NmMwZGNlOWJhMTIwNmZmMjJiMTlkNjMyMDc1Li44OWRk
ZTNmOGQyMjI1MjVhN2YwYzkxODk2MTk5OWQ1MWU5MWQxYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3BwCkBAIC02Miw3ICs2Miw3IEBAIEV3a01h
aW46OkV3a01haW4oKQogewogfQogCi1Fd2tNYWluJiBFd2tNYWluOjpzaGFyZWQoKQorRXdrTWFp
biYgRXdrTWFpbjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgRXdrTWFpbiBpbnN0YW5jZTsK
ICAgICByZXR1cm4gaW5zdGFuY2U7CkBAIC0yMDksMTAgKzIwOSwxMCBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OwogCiBpbnQgZXdrX2luaXQoKQogewotICAgIHJldHVybiBFd2tNYWluOjpzaGFy
ZWQoKS5pbml0aWFsaXplKCk7CisgICAgcmV0dXJuIEV3a01haW46OnNpbmdsZXRvbigpLmluaXRp
YWxpemUoKTsKIH0KIAogaW50IGV3a19zaHV0ZG93bigpCiB7Ci0gICAgcmV0dXJuIEV3a01haW46
OnNoYXJlZCgpLmZpbmFsaXplKCk7CisgICAgcmV0dXJuIEV3a01haW46OnNpbmdsZXRvbigpLmZp
bmFsaXplKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfbWFpbl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfbWFpbl9wcml2YXRlLmgKaW5kZXggMzgwMjNjNjE4ODQzODhhY2I0MjAwZDAwZjQwNTUyNWQ0
NDAxODY4NC4uMWQ0Y2UxZmFlZjA0MzgwOTNmOWMzNjViZGRmYTY2NjllMTUxNDUzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW5fcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluX3ByaXZhdGUu
aApAQCAtMzIsNyArMzIsNyBAQCBlbnVtIGNsYXNzIEVGTE1vZHVsZUluaXRGYWlsdXJlOwogCiBj
bGFzcyBFd2tNYWluIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgRXdrTWFpbiYgc2hhcmVkKCk7Cisg
ICAgc3RhdGljIEV3a01haW4mIHNpbmdsZXRvbigpOwogICAgIH5Fd2tNYWluKCk7CiAgICAgaW50
IGluaXRpYWxpemUoKTsKICAgICBpbnQgZmluYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBjYmYxYzA0NDhhNjI5ZTYxMzU0ZjYx
ZjZkNjEwMDdkZjk3MWVkZWNmLi5iZjhmYTE4MzkwOGRjZDBiOWI3ZGFlODUxYTY2ZTdmMzllYzRh
YTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
dy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CkBAIC04MCw3ICs4MCw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdr
X1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAogRXZhc19PYmplY3QqIEVXS1ZpZXdDcmVhdGUoV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdyb3VwUmVmIHBhZ2VHcm91cCwgRXZhcyogY2FudmFz
LCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKLSAgICBpZiAoIUV3a01haW46OnNoYXJlZCgpLmlzSW5p
dGlhbGl6ZWQoKSkgeworICAgIGlmICghRXdrTWFpbjo6c2luZ2xldG9uKCkuaXNJbml0aWFsaXpl
ZCgpKSB7CiAgICAgICAgIEVJTkFfTE9HX0NSSVQoIkVXZWJLaXQgaGFzIG5vdCBiZWVuIGluaXRp
YWxpemVkLiBZb3UgbXVzdCBjYWxsIGV3a19pbml0KCkgYmVmb3JlIGNyZWF0aW5nIHZpZXcuIik7
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9jZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KaW5kZXggYTdkODQ4MTQ2
MDRjNTNiMDdmY2NlNTE1MTU1MDYxY2NmZDMxNTgxMi4uOTE2NTNkY2U3ZGI5YjYxYWFlYjhiMzk0
MWZkNWZlZDMzYTQzNzFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0Nv
Y29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0KQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFdl
YlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNzU3VwcHJlc3Npb25TdGF0ZSgpCiAgICAgaWYgKCFt
X3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkRm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKICAgICAg
ICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4g
PSBudWxscHRyOwogICAgIGVsc2UgaWYgKCFtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1
cHByZXNzaW9uRGlzYWJsZWRUb2tlbikKLSAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclBy
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hh
cmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbigpOworICAgICAgICBtX3BsdWdp
blByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbiA9IFBsdWdpblBy
b2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2Vu
KCk7CiAjZW5kaWYKIH0KIApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAgcmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMo
KTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBXZWJLaXQ6OldlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlcjo6c2hhcmVkKCk7CisgICAgV2ViS2l0OjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNp
bmdsZXRvbigpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAppbmRl
eCA1ZGZmNTQ2MzAzNmMzN2RmNTU5N2M5YmUyYWQ5OWQzODlkMmU1OGUxLi42NjM4Nzc0ODVlYmVi
MWY0OTRlZTI2YmYyYmZjZmU2ODlkYzg5NzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIu
Y3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBwYWdlSWRGcm9tUmVxdWVzdFBh
dGgoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBudW1iZXI7CiB9CiAKLVdlYkluc3Bl
Y3RvclNlcnZlciYgV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFyZWQoKQorV2ViSW5zcGVjdG9yU2Vy
dmVyJiBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdlYklu
c3BlY3RvclNlcnZlciYgc2VydmVyID0gKm5ldyBXZWJJbnNwZWN0b3JTZXJ2ZXI7CiAgICAgcmV0
dXJuIHNlcnZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5oCmluZGV4IDE5Njc1YjJiOWQ0OGIw
Y2RiM2MxNDZjOWQ5ZDllZjk3N2Q0MzJjYjQuLjEzMjk5YjE2ZTE5M2Y2NzRjMGM0ZmRjYzc3Nzhl
NmNmNjZkOTA5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuaApAQCAtNDEsNyArNDEsNyBA
QCBjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsKIGNsYXNzIFdlYkluc3BlY3RvclNlcnZlciA6IHB1
YmxpYyBXZWJTb2NrZXRTZXJ2ZXIsIHB1YmxpYyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgewogcHVi
bGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgV2ViSW5zcGVjdG9yUHJveHkqPiBD
bGllbnRNYXA7Ci0gICAgc3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYgc2hhcmVkKCk7CisgICAg
c3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYgc2luZ2xldG9uKCk7CiAKICAgICAvLyBQYWdlIHJl
Z2lzdHJ5IHRvIG1hbmFnZSBrbm93biBwYWdlcy4KICAgICBpbnQgcmVnaXN0ZXJQYWdlKFdlYklu
c3BlY3RvclByb3h5KiBjbGllbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCA1NGIzYmUyZmM2ZDMy
NTMxNjFhNGMyMThlNjI3OWE0NjUzNGRlNDNkLi5kNWYzM2ZjYzcxYWQ2MjQyYTAwYTVhOWQzYzJj
YjFmMDFjNDEwMWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29y
ay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtODUsNyArODUsNyBAQCB2b2lkIE5l
dHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5jaE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVu
Y2hPcHRpb25zJiBsYXVuYwogdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2ls
bE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKQogewogI2lmIEVOQUJMRShTRUNfSVRF
TV9TSElNKQotICAgIFNlY0l0ZW1TaGltUHJveHk6OnNoYXJlZCgpLmluaXRpYWxpemVDb25uZWN0
aW9uKGNvbm5lY3Rpb24pOworICAgIFNlY0l0ZW1TaGltUHJveHk6OnNpbmdsZXRvbigpLmluaXRp
YWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29u
bmVjdGlvbik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
bHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmNwcAppbmRleCBhYjliOTJkY2UwZDAyZWUw
YzgxOGY3OWNjY2NjNmNjZmVmODRkM2RhLi5jYjYxZDM2MjhlNzI5ZWUyNWU5YmFiOTUzY2I0Mjlj
MTE4NjY2MDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1QbHVnaW5Qcm9jZXNzTWFuYWdlciYgUGx1Z2luUHJvY2Vzc01hbmFn
ZXI6OnNoYXJlZCgpCitQbHVnaW5Qcm9jZXNzTWFuYWdlciYgUGx1Z2luUHJvY2Vzc01hbmFnZXI6
OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nlc3NN
YW5hZ2VyPiBwbHVnaW5Qcm9jZXNzTWFuYWdlcjsKICAgICByZXR1cm4gcGx1Z2luUHJvY2Vzc01h
bmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm9jZXNzTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luUHJvY2Vzc01hbmFnZXIuaAppbmRleCBkZjMyNTI3OTc1OTk0ZWFmOWUzZjYwNzIzNjdiZjdk
ZjllNzRhZjg3Li5mMjkxMWMzNmNiMjc2YjE3NDFmNjI2MDUzOTdkNWRkMWQxY2U4NDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFu
YWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nl
c3NNYW5hZ2VyLmgKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgUGx1Z2luUHJvY2Vzc01hbmFnZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpblByb2Nlc3NNYW5hZ2VyKTsKICAgICBm
cmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8UGx1Z2luUHJvY2Vzc01hbmFnZXI+OwogcHVibGlj
OgotICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNzTWFuYWdlciYgc2hhcmVkKCk7CisgICAgc3RhdGlj
IFBsdWdpblByb2Nlc3NNYW5hZ2VyJiBzaW5nbGV0b24oKTsKIAogICAgIHVpbnQ2NF90IHBsdWdp
blByb2Nlc3NUb2tlbihjb25zdCBQbHVnaW5Nb2R1bGVJbmZvJiwgUGx1Z2luUHJvY2Vzc1R5cGUs
IFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAKaW5kZXggMGYzZDk0
MTA4MTZmZjEzZjhhZTJhZTBhNDFhNGEwZDkwOTU0ODU1ZS4uM2E1ZjAwMWM5MDY0OTY3NGRkYWJm
NDEwMmY4MmM3MjliYTYzMTIxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAg
dm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNo
ZXIqLCBJUEM6OkNvbm5lY3Rpb246OkkKICAgICBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVz
dHMgPSAwOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKCFQbHVnaW5Qcm9jZXNzTWFu
YWdlcjo6c2hhcmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWQoKSkKKyAgICBpZiAoIVBs
dWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxl
ZCgpKQogICAgICAgICBzZXRQcm9jZXNzU3VwcHJlc3Npb25FbmFibGVkKHRydWUpOwogI2VuZGlm
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
V2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCAzNDk4ZWQ1ODg2MGY2ZmQ5YTYyMTZk
NmQ0YTVhYTkxOWNjNjU0OWE3Li5lMTgwNjAzMWU1Nzc4YjEyMDE1NThhMDUzODgyNDJhOTM2M2E2
NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVn
aW5TaXRlRGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdlci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUGx1Z2luUHJvY2Vz
c01hbmFnZXI6OnNoYXJlZCgpLmdldFNpdGVzV2l0aERhdGEobV9wbHVnaW5zLmxhc3QoKSwgbV93
ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIsIG1fY2FsbGJhY2tJRCk7CisgICAgICAgIFBsdWdpblBy
b2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5nZXRTaXRlc1dpdGhEYXRhKG1fcGx1Z2lucy5sYXN0
KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLCBtX2NhbGxiYWNrSUQpOwogICAgICAgICBt
X3BsdWdpbnMucmVtb3ZlTGFzdCgpOwogICAgIH0KIApAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBQbHVnaW5Qcm9jZXNz
TWFuYWdlcjo6c2hhcmVkKCkuY2xlYXJTaXRlRGF0YShtX3BsdWdpbnMubGFzdCgpLCBtX3dlYlBs
dWdpblNpdGVEYXRhTWFuYWdlciwgbV9zaXRlcywgbV9mbGFncywgbV9tYXhBZ2VJblNlY29uZHMs
IG1fY2FsbGJhY2tJRCk7CisgICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24o
KS5jbGVhclNpdGVEYXRhKG1fcGx1Z2lucy5sYXN0KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5h
Z2VyLCBtX3NpdGVzLCBtX2ZsYWdzLCBtX21heEFnZUluU2Vjb25kcywgbV9jYWxsYmFja0lEKTsK
ICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZUxhc3QoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAK
aW5kZXggMzE5YmQzZTE1YzRhNjAxZjk3MDRiMjE2NzNkZGM1NmU4NDY2NTgzZS4uNzkyMDM5Mzkz
MWU3Y2FmOGZjMTJlMjY0MDQzMWVjZDk1MzM5OGY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBn
U2NoZW1hVmVyc2lvbiA9IDI7CiAKLVBsdWdpbkluZm9DYWNoZSYgUGx1Z2luSW5mb0NhY2hlOjpz
aGFyZWQoKQorUGx1Z2luSW5mb0NhY2hlJiBQbHVnaW5JbmZvQ2FjaGU6OnNpbmdsZXRvbigpCiB7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFBsdWdpbkluZm9DYWNoZT4gcGx1Z2luSW5mb0Nh
Y2hlOwogICAgIHJldHVybiBwbHVnaW5JbmZvQ2FjaGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsvUGx1Z2luSW5mb0NhY2hlLmgKaW5kZXggZDM1NWI5
MDc2MjliZTU2ODkzYTg0ZDFiOWFlODg5NjgwNjExMDYzMS4uY2FiMWUwZjliNjQxNDdiMmZmN2Fm
NGU1YjFjNzY2YTU0NzAzZmI0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFz
cyBQbHVnaW5JbmZvQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbkluZm9D
YWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFBsdWdpbkluZm9DYWNoZT47
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdpbkluZm9DYWNoZSYgc2hhcmVkKCk7CisgICAgc3Rh
dGljIFBsdWdpbkluZm9DYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICBib29sIGdldFBsdWdpbklu
Zm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRoLCBQbHVnaW5Nb2R1bGVJbmZvJik7CiAgICAgdm9p
ZCB1cGRhdGVQbHVnaW5JbmZvKGNvbnN0IFN0cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2lu
TW9kdWxlSW5mbyYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdp
bnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0b3JlVW5peC5jcHAKaW5kZXggNWY1NDA5ZmU0YTEx
YjU4Y2FmMGVmMDBmZWNjOGE0YzIxMzhiZDQ2Yi4uM2M2Njg3MTlmZDNjYjU3ZWJhZTg2N2ViYjVl
ZjEyZGExNTYzYjRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdp
bnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCkBAIC0xMDIsMTEgKzEw
MiwxMSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVnaW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVnaW5Q
YXRocygpCiBib29sIFBsdWdpbkluZm9TdG9yZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcm
IHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUluZm8mIHBsdWdpbikKIHsKICNpZiBQTEFURk9STShH
VEspCi0gICAgaWYgKFBsdWdpbkluZm9DYWNoZTo6c2hhcmVkKCkuZ2V0UGx1Z2luSW5mbyhwbHVn
aW5QYXRoLCBwbHVnaW4pKQorICAgIGlmIChQbHVnaW5JbmZvQ2FjaGU6OnNpbmdsZXRvbigpLmdl
dFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICBpZiAoTmV0c2NhcGVQbHVnaW5Nb2R1bGU6OmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwg
cGx1Z2luKSkgewotICAgICAgICBQbHVnaW5JbmZvQ2FjaGU6OnNoYXJlZCgpLnVwZGF0ZVBsdWdp
bkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKTsKKyAgICAgICAgUGx1Z2luSW5mb0NhY2hlOjpzaW5n
bGV0b24oKS51cGRhdGVQbHVnaW5JbmZvKHBsdWdpblBhdGgsIHBsdWdpbik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAppbmRleCA3M2ViMzU2OWE1YmYyOWVhY2Iy
MGM0M2Q2Njg2YzRmYjY5NDM4Njc0Li5iZmQ3YWQ1NWQ5OWRhZTBjNmY5OGQ0YWU0MjI4ZDlkNGE2
NzNmMjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9y
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94
eS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgY29uc3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6
OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2NTA7CiAKIGNsYXNzIFdlYkluc3BlY3RvclBhZ2VHcm91
cHMgewogcHVibGljOgotICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzJiBzaGFyZWQo
KQorICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzJiBzaW5nbGV0b24oKQogICAgIHsK
ICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYkluc3BlY3RvclBhZ2VHcm91cHM+IGlu
c3RhbmNlOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CkBAIC0xNDUsNyArMTQ1LDcgQEAgV2Vi
SW5zcGVjdG9yUHJveHk6OldlYkluc3BlY3RvclByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKICAg
ICAsIG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCgwKQogI2VuZGlmCiB7Ci0gICAgbV9sZXZlbCA9
IFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNoYXJlZCgpLmluc3BlY3RvckxldmVsKG1fcGFnZS0+
cGFnZUdyb3VwKCkpOworICAgIG1fbGV2ZWwgPSBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaW5n
bGV0b24oKS5pbnNwZWN0b3JMZXZlbChtX3BhZ2UtPnBhZ2VHcm91cCgpKTsKICAgICBtX3BhZ2Ut
PnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIApA
QCAtMTU1LDE0ICsxNTUsMTQgQEAgV2ViSW5zcGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94
eSgpCiAKIFdlYlBhZ2VHcm91cCogV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VHcm91
cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNoYXJlZCgp
Lmluc3BlY3RvclBhZ2VHcm91cEZvckxldmVsKG1fbGV2ZWwpOworICAgIHJldHVybiBXZWJJbnNw
ZWN0b3JQYWdlR3JvdXBzOjpzaW5nbGV0b24oKS5pbnNwZWN0b3JQYWdlR3JvdXBGb3JMZXZlbCht
X2xldmVsKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCiAgICAgaWYgKG1fcmVtb3RlSW5zcGVjdGlvblBh
Z2VJZCkKLSAgICAgICAgV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFyZWQoKS51bnJlZ2lzdGVyUGFn
ZShtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpOworICAgICAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6
OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJQYWdlKG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCk7CiAj
ZW5kaWYKIAogICAgIG1fcGFnZS0+cHJvY2VzcygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9n
Z2xlUGFnZVByb2ZpbGluZygpCiAKIGJvb2wgV2ViSW5zcGVjdG9yUHJveHk6OmlzSW5zcGVjdG9y
UGFnZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7Ci0gICAgcmV0dXJuIFdlYkluc3BlY3RvclBhZ2VH
cm91cHM6OnNoYXJlZCgpLmlzSW5zcGVjdG9yUGFnZUdyb3VwKHBhZ2UucGFnZUdyb3VwKCkpOwor
ICAgIHJldHVybiBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaW5nbGV0b24oKS5pc0luc3BlY3Rv
clBhZ2VHcm91cChwYWdlLnBhZ2VHcm91cCgpKTsKIH0KIAogV2ViUHJvY2Vzc1Bvb2wmIFdlYklu
c3BlY3RvclByb3h5OjppbnNwZWN0b3JQcm9jZXNzUG9vbCgpCkBAIC00MzAsNyArNDMwLDcgQEAg
c3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYgZnJhbWVSZWYsIFdLRnIKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVuYWJsZVJl
bW90ZUluc3BlY3Rpb24oKQogewogICAgIGlmICghbV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKQot
ICAgICAgICBtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQgPSBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNo
YXJlZCgpLnJlZ2lzdGVyUGFnZSh0aGlzKTsKKyAgICAgICAgbV9yZW1vdGVJbnNwZWN0aW9uUGFn
ZUlkID0gV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24oKS5yZWdpc3RlclBhZ2UodGhpcyk7
CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnJlbW90ZUZyb250ZW5kQ29ubmVjdGVkKCkK
QEAgLTY0MCw3ICs2NDAsNyBAQCBib29sIFdlYkluc3BlY3RvclByb3h5OjpzaG91bGRPcGVuQXR0
YWNoZWQoKQogdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6c2VuZE1lc3NhZ2VUb1JlbW90ZUZyb250
ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBBU1NFUlQobV9yZW1vdGVJbnNwZWN0
aW9uUGFnZUlkKTsKLSAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLnNlbmRNZXNzYWdl
T3ZlckNvbm5lY3Rpb24obV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkLCBtZXNzYWdlKTsKKyAgICBX
ZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLnNlbmRNZXNzYWdlT3ZlckNvbm5lY3Rpb24o
bV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkLCBtZXNzYWdlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IGMwMTBmZGVmMTIxM2RkM2Ex
NDY2YzJlMWI3NjIxODY3NWM3NTE4ODMuLmEzNDEzMTliMjJiNjRlOTlhZGMzNGY2OTM1MjNlNjJj
OGExNjQ3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBA
IC0xNzUsNyArMTc1LDcgQEAgcHVibGljOgogICAgICAgICBSZWZQdHI8TWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpEZWxheWVkUmVwbHk+IHJlcGx5OwogICAg
IH07CiAKLSAgICBzdGF0aWMgRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3JkcyYgc2hhcmVkKCk7
CisgICAgc3RhdGljIEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHMmIHNpbmdsZXRvbigpOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlY29yZD4gY3JlYXRlUmVjb3JkKHVpbnQ2NF90IGZyYW1l
SUQsIFN0cmluZyBvcmlnaW5JZGVudGlmaWVyLAogICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1l
LCBTdHJpbmcgZGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YSwKQEAgLTE5NCw3ICsx
OTQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWNvcmQ+IG1fY3VycmVudFJl
Y29yZDsKIH07CiAKLUV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHMmIEV4Y2VlZGVkRGF0YWJh
c2VRdW90YVJlY29yZHM6OnNoYXJlZCgpCitFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzJiBF
eGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzPiByZWNvcmRzOwogICAg
IHJldHVybiByZWNvcmRzOwpAQCAtOTg0LDcgKzk4NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpy
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKICAg
ICAgICAgcmV0dXJuOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgVmlld1NuYXBzaG90U3Rv
cmU6OnNoYXJlZCgpLnJlY29yZFNuYXBzaG90KCp0aGlzLCBpdGVtKTsKKyAgICBWaWV3U25hcHNo
b3RTdG9yZTo6c2luZ2xldG9uKCkucmVjb3JkU25hcHNob3QoKnRoaXMsIGl0ZW0pOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAjZW5kaWYKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHZv
aWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2luKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQz
Ml90IHByb2Nlc3NUeXBlLCBjb25zCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwbHVn
aW5Qcm9jZXNzVG9rZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luUHJv
Y2Vzc1Rva2VuKHBsdWdpbiwgc3RhdGljX2Nhc3Q8UGx1Z2luUHJvY2Vzc1R5cGU+KHByb2Nlc3NU
eXBlKSwgcGx1Z2luUHJvY2Vzc1NhbmRib3hQb2xpY3kpOworICAgIHBsdWdpblByb2Nlc3NUb2tl
biA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzVG9rZW4o
cGx1Z2luLCBzdGF0aWNfY2FzdDxQbHVnaW5Qcm9jZXNzVHlwZT4ocHJvY2Vzc1R5cGUpLCBwbHVn
aW5Qcm9jZXNzU2FuZGJveFBvbGljeSk7CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKQEAgLTQ3NjEsNyArNDc2MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRS
ZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSh1aW50NjRfdCBmcmFtZUlELCBQYXNz
CiAKIHZvaWQgV2ViUGFnZVByb3h5OjpleGNlZWRlZERhdGFiYXNlUXVvdGEodWludDY0X3QgZnJh
bWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3Rh
LCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2UsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVz
YWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdlLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkV4Y2VlZGVkRGF0YWJhc2VRdW90YTo6RGVsYXllZFJlcGx5PiByZXBseSkKIHsKLSAg
ICBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzJiByZWNvcmRzID0gRXhjZWVkZWREYXRhYmFz
ZVF1b3RhUmVjb3Jkczo6c2hhcmVkKCk7CisgICAgRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3Jk
cyYgcmVjb3JkcyA9IEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHM6OnNpbmdsZXRvbigpOwog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpSZWNvcmQ+
IG5ld1JlY29yZCA9IHJlY29yZHMuY3JlYXRlUmVjb3JkKGZyYW1lSUQsCiAgICAgICAgIG9yaWdp
bklkZW50aWZpZXIsIGRhdGFiYXNlTmFtZSwgZGlzcGxheU5hbWUsIGN1cnJlbnRRdW90YSwgY3Vy
cmVudE9yaWdpblVzYWdlLAogICAgICAgICBjdXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRV
c2FnZSwgcmVwbHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
c3RlYm9hcmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2Fy
ZFByb3h5LmNwcAppbmRleCAzOGMxOWUxZmYxODQ5NWZlYWYxMDljZWZjYzg4NGMwMmM2YjBkOGEx
Li45MDk3Y2I1MmIyMGJiNjY0OWZhMDE3ZTMzYTM5ZDBkZmUwNzYwODRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcApAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotV2ViUGFzdGVib2FyZFByb3h5JiBXZWJQYXN0
ZWJvYXJkUHJveHk6OnNoYXJlZCgpCitXZWJQYXN0ZWJvYXJkUHJveHkmIFdlYlBhc3RlYm9hcmRQ
cm94eTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7
CiAgICAgc3RhdGljIExhenlOZXZlckRlc3Ryb3llZDxXZWJQYXN0ZWJvYXJkUHJveHk+IHByb3h5
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCmluZGV4
IDJlNDY3Mzg4MDAzMWQ2ZWQ2Y2E5M2MzZWY2ZDY3MDBkYjU4OTE0ZDQuLjQ5NGFhYzlmODA5Njg3
NGNjMDU1ZmJhODQzN2RlNTI2NjdmYTIzMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3MgV2ViUGFzdGVi
b2FyZFByb3h5IDogcHVibGljIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShXZWJQYXN0ZWJvYXJkUHJveHkpOwogICAgIGZyaWVuZCBjbGFzcyBMYXp5TmV2
ZXJEZXN0cm95ZWQ8V2ViUGFzdGVib2FyZFByb3h5PjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2Vi
UGFzdGVib2FyZFByb3h5JiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV2ViUGFzdGVib2FyZFByb3h5
JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgYWRkV2ViUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQ
cm94eSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApp
bmRleCA4NmE2ZTIwNTRjMGFjODMwMjBhZTBlMGViNmM2Y2M3ZTNlOTMxMDU3Li5lMTkzYWQzZjNm
ZDI3YjFmZmFjMmUyMDA4MjRmNDlmOGEyODJhZTBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTY3NSwxMCArNjc1LDEwIEBAIFdlYlByb2Nlc3NQ
cm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5ld1dlYlByb2Nlc3MoKQogICAgIHBhcmFtZXRl
cnMubWVtb3J5Q2FjaGVEaXNhYmxlZCA9IG1fbWVtb3J5Q2FjaGVEaXNhYmxlZDsKIAogI2lmIEVO
QUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIHBhcmFtZXRlcnMuaGFzSW1hZ2VTZXJ2aWNlcyA9
IFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCkuaGFzSW1hZ2VTZXJ2aWNlcygpOwotICAgIHBh
cmFtZXRlcnMuaGFzU2VsZWN0aW9uU2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNoYXJl
ZCgpLmhhc1NlbGVjdGlvblNlcnZpY2VzKCk7Ci0gICAgcGFyYW1ldGVycy5oYXNSaWNoQ29udGVu
dFNlcnZpY2VzID0gU2VydmljZXNDb250cm9sbGVyOjpzaGFyZWQoKS5oYXNSaWNoQ29udGVudFNl
cnZpY2VzKCk7Ci0gICAgU2VydmljZXNDb250cm9sbGVyOjpzaGFyZWQoKS5yZWZyZXNoRXhpc3Rp
bmdTZXJ2aWNlcygpOworICAgIHBhcmFtZXRlcnMuaGFzSW1hZ2VTZXJ2aWNlcyA9IFNlcnZpY2Vz
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuaGFzSW1hZ2VTZXJ2aWNlcygpOworICAgIHBhcmFtZXRl
cnMuaGFzU2VsZWN0aW9uU2VydmljZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNpbmdsZXRvbigp
Lmhhc1NlbGVjdGlvblNlcnZpY2VzKCk7CisgICAgcGFyYW1ldGVycy5oYXNSaWNoQ29udGVudFNl
cnZpY2VzID0gU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYXNSaWNoQ29udGVudFNl
cnZpY2VzKCk7CisgICAgU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZWZyZXNoRXhp
c3RpbmdTZXJ2aWNlcygpOwogI2VuZGlmCiAKICAgICAvLyBBZGQgYW55IHBsYXRmb3JtIHNwZWNp
ZmljIHBhcmFtZXRlcnMKQEAgLTcxNSw3ICs3MTUsNyBAQCBXZWJQcm9jZXNzUHJveHkmIFdlYlBy
b2Nlc3NQb29sOjpjcmVhdGVOZXdXZWJQcm9jZXNzKCkKIAogI2lmIEVOQUJMRShSRU1PVEVfSU5T
UEVDVE9SKQogICAgIC8vIEluaXRpYWxpemUgcmVtb3RlIGluc3BlY3RvciBjb25uZWN0aW9uIG5v
dyB0aGF0IHdlIGhhdmUgYSBzdWItcHJvY2VzcyB0aGF0IGlzIGhvc3Rpbmcgb25lIG9mIG91ciB3
ZWIgdmlld3MuCi0gICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpOyAKKyAg
ICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCk7IAogI2VuZGlmCiAKICAg
ICByZXR1cm4gcHJvY2VzczsKQEAgLTExMDUsNyArMTEwNSw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBkb3VibGUgaW50ZXJ2YWwpCiAgICAgCiAgICAg
Ly8gRm9yIFVJUHJvY2VzcwogI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikKLSAgICBXZWJNZW1v
cnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RhcnQoaW50ZXJ2YWwpOworICAgIFdlYk1lbW9yeVNhbXBs
ZXI6OnNpbmdsZXRvbigpLT5zdGFydChpbnRlcnZhbCk7CiAjZW5kaWYKICAgICAKICAgICAvLyBG
b3IgV2ViUHJvY2VzcwpAQCAtMTEyNCw3ICsxMTI0LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c3RvcE1lbW9yeVNhbXBsZXIoKQogICAgIAogICAgIC8vIEZvciBVSVByb2Nlc3MKICNpZiBFTkFC
TEUoTUVNT1JZX1NBTVBMRVIpCi0gICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0b3Ao
KTsKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaW5nbGV0b24oKS0+c3RvcCgpOwogI2VuZGlmCiAK
ICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlN0b3BNZW1vcnlT
YW1wbGVyKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCBjMjU3YTM4ODJjYTVkYmNlMjU2Yjg5Yzk4NjRmZTRiZTBlYTUyMmJiLi5kZDAwNjQ4
MDRlODA3NGYyMzY3OTU3NTY0YTg2ODJhMTE0MTg1ZmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcApAQCAtOTksNyArOTksNyBAQCBXZWJQcm9jZXNz
UHJveHk6OldlYlByb2Nlc3NQcm94eShXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCiAgICAg
LCBtX251bWJlck9mVGltZXNTdWRkZW5UZXJtaW5hdGlvbldhc0Rpc2FibGVkKDApCiAgICAgLCBt
X3Rocm90dGxlcihzdGQ6Om1ha2VfdW5pcXVlPFByb2Nlc3NUaHJvdHRsZXI+KHRoaXMpKQogewot
ICAgIFdlYlBhc3RlYm9hcmRQcm94eTo6c2hhcmVkKCkuYWRkV2ViUHJvY2Vzc1Byb3h5KCp0aGlz
KTsKKyAgICBXZWJQYXN0ZWJvYXJkUHJveHk6OnNpbmdsZXRvbigpLmFkZFdlYlByb2Nlc3NQcm94
eSgqdGhpcyk7CiAKICAgICBjb25uZWN0KCk7CiB9CkBAIC0xMjYsNyArMTI2LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzUHJveHk6OmNvbm5lY3Rpb25XaWxsT3BlbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24pCiAgICAgQVNTRVJUKHRoaXMtPmNvbm5lY3Rpb24oKSA9PSAmY29ubmVjdGlvbik7CiAK
ICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hpbVByb3h5OjpzaGFyZWQo
KS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKKyAgICBTZWNJdGVtU2hpbVByb3h5
OjpzaW5nbGV0b24oKS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0aW9uKTsKICNlbmRpZgog
CiAgICAgZm9yIChhdXRvJiBwYWdlIDogbV9wYWdlTWFwLnZhbHVlcygpKQpAQCAtMzg0LDcgKzM4
NCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Byb3h5OjpnZXRQbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVj
dG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zLCBWZWN0CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJ
Tl9BUEkpCiB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24o
dWludDY0X3QgcGx1Z2luUHJvY2Vzc1Rva2VuLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpEZWxheWVkUmVwbHk+IHJlcGx5
KQogewotICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaGFyZWQoKS5nZXRQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9rZW4sIHJlcGx5KTsKKyAgICBQbHVnaW5Qcm9jZXNz
TWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJv
Y2Vzc1Rva2VuLCByZXBseSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJUZXh0Q2hlY2tlci5jcHAKaW5kZXggYWY0NTlhM2IwM2U1ZjViODFhZWNjYzA0YjA0ZThl
Y2U3YjI4NzYxYS4uOGE4NTQzNGVhODEyMTg0NTA4MTliNzVhMzhhZDZmODg1YmU2YzM0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCkBAIC0zMyw3ICsz
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJUZXh0Q2hlY2tlciogV2ViVGV4dENo
ZWNrZXI6OnNoYXJlZCgpCitXZWJUZXh0Q2hlY2tlciogV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRv
bigpCiB7CiAgICAgc3RhdGljIFdlYlRleHRDaGVja2VyKiB0ZXh0Q2hlY2tlciA9IGFkb3B0UmVm
KG5ldyBXZWJUZXh0Q2hlY2tlcikubGVha1JlZigpOwogICAgIHJldHVybiB0ZXh0Q2hlY2tlcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmgKaW5kZXggMzU5ZTgxZWU1
MzU1MzIzNWU1YTUyYjQ0OGNkOWYwZTAxNmMyMTdhZS4uN2M5NDVjNzI2MjdhMmZmYmJmYTAyN2Jk
MTQwYTlhYzBjMjU0MTRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlRleHRDaGVja2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVj
a2VyLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3MgV2ViUGFnZVByb3h5OwogCiBjbGFzcyBXZWJU
ZXh0Q2hlY2tlciA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmplY3Q6OlR5cGU6OlRl
eHRDaGVja2VyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYlRleHRDaGVja2VyKiBzaGFyZWQo
KTsKKyAgICBzdGF0aWMgV2ViVGV4dENoZWNrZXIqIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBz
ZXRDbGllbnQoY29uc3QgV0tUZXh0Q2hlY2tlckNsaWVudEJhc2UqKTsKICAgICBXZWJUZXh0Q2hl
Y2tlckNsaWVudCYgY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRXdrRGVidWcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9lZmwvRXdrRGVidWcuaAppbmRleCAwZjFlNDliNzZmNjdiZmU0MWMxZGUwNGMxY2Fl
Mzk4ZjljMmI4ODIxLi4zYjRlNGE5YTE5N2Y5Yjc5OWIwYTE0NTViMjk5Y2Y0ZWZlZjkxZDUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL0V3a0RlYnVnLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tEZWJ1Zy5oCkBAIC0yOSwxMCArMjksMTAg
QEAKIAogI2luY2x1ZGUgImV3a19tYWluX3ByaXZhdGUuaCIKIAotI2RlZmluZSBDUklUSUNBTCgu
Li4pIEVJTkFfTE9HX0RPTV9DUklUKEV3a01haW46OnNoYXJlZCgpLmxvZ0RvbWFpbklkKCksIF9f
VkFfQVJHU19fKQotI2RlZmluZSBFUlIoLi4uKSBFSU5BX0xPR19ET01fRVJSKEV3a01haW46OnNo
YXJlZCgpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQotI2RlZmluZSBXQVJOKC4uLikgRUlO
QV9MT0dfRE9NX1dBUk4oRXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdT
X18pCi0jZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhFd2tNYWluOjpzaGFyZWQo
KS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgREJHKC4uLikgRUlOQV9MT0df
RE9NX0RCRyhFd2tNYWluOjpzaGFyZWQoKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKKyNk
ZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5BX0xPR19ET01fQ1JJVChFd2tNYWluOjpzaW5nbGV0b24o
KS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgRVJSKC4uLikgRUlOQV9MT0df
RE9NX0VSUihFd2tNYWluOjpzaW5nbGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykK
KyNkZWZpbmUgV0FSTiguLi4pIEVJTkFfTE9HX0RPTV9XQVJOKEV3a01haW46OnNpbmdsZXRvbigp
LmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBJTkZPKC4uLikgRUlOQV9MT0df
RE9NX0lORk8oRXdrTWFpbjo6c2luZ2xldG9uKCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18p
CisjZGVmaW5lIERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoRXdrTWFpbjo6c2luZ2xldG9uKCku
bG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18pCiAKICNlbmRpZiAvLyBFd2tEZWJ1Z19oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1RleHRDaGVja2VyRWZsLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCmluZGV4IGIz
N2QwOWE3N2VhMGNlZmMyMDZlZGU5Yjc4YmU0MTBiYTZhODk5NGQuLjE3YmQyNTNkZjk3MDMxYzRi
OTE0MDRiMzNlYjI1ODZjY2IzMThmMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgVGV4dENoZWNr
ZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpCiAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwogCiAgICAgLy8gTm90
aWZ5IHRoZSBjbGllbnQgYWJvdXQgdGhlIHNldHRpbmcgY2hhbmdlLgotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVk
KGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2luZ2xldG9uKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChp
c0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TShpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CiAjZW5kaWYKQEAgLTEwMyw3ICsx
MDMsNyBAQCB2b2lkIFRleHRDaGVja2VyOjpncmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFu
Z2VkKGJvb2wpCiBpbnQ2NF90IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdl
YlBhZ2VQcm94eSogcGFnZSkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykKLSAgICByZXR1cm4g
V2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVTcGVsbERvY3VtZW50VGFn
KHBhZ2UpOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgp
LnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShw
YWdlKTsKICAgICByZXR1cm4gMDsKQEAgLTExMyw3ICsxMTMsNyBAQCBpbnQ2NF90IFRleHRDaGVj
a2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkKIHZvaWQgVGV4
dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7CiAjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNp
bmdsZXRvbigpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTSh0YWcpOwogI2VuZGlmCkBAIC0xOTQsNyArMTk0LDcgQEAgVmVj
dG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gVGV4dENoZWNrZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBo
KGludDY0X3Qgc3BlbGxEb2N1bWUKIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcgdGV4dCwgaW50MzJfdCYg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdMZW5ndGgpCiB7CiAjaWYg
RU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dC50b1N0cmluZ1dp
dGhvdXRDb3B5aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsK
KyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdP
ZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwg
bWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogI2Vsc2UKICAgICBVTlVT
RURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAgICAgVU5VU0VEX1BBUkFNKHRleHQpOwpAQCAt
MjMzLDcgKzIzMyw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlXaXRoR3Jh
bW1hclN0cmluZyhpbnQ2NF90LCBjb25zdCBTdHJpbmcmLCBjb25zCiB2b2lkIFRleHRDaGVja2Vy
OjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmlu
ZyYgd29yZCwgY29uc3QgU3RyaW5nJiAsIFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzKQogewogI2lm
IEVOQUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisgICAg
V2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVs
bERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNw
ZWxsRG9jdW1lbnRUYWcpOwogICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKQEAgLTI0NCw3ICsyNDQs
NyBAQCB2b2lkIFRleHRDaGVja2VyOjpnZXRHdWVzc2VzRm9yV29yZChpbnQ2NF90IHNwZWxsRG9j
dW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZAogdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewogI2lmIEVO
QUJMRShTUEVMTENIRUNLKQotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCku
bGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOworICAgIFdlYlRleHRDaGVja2VyOjpz
aW5nbGV0b24oKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwog
I2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAgICAgVU5VU0VEX1BB
UkFNKHdvcmQpOwpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OmxlYXJuV29y
ZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHZvaWQgVGV4
dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJp
bmcmIHdvcmQpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0gICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwor
ICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuaWdub3JlV29yZChzcGVs
bERvY3VtZW50VGFnLCB3b3JkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNwZWxsRG9jdW1l
bnRUYWcpOwogICAgIFVOVVNFRF9QQVJBTSh3b3JkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwCmluZGV4IGI2NTQ3MjZjMTU2NTBiYTdjYWU5Yzc1
YWIxZjU5ZjBhMzk4MzA0MzQuLmZmZmIyZmVmYzhjNTlmNDlmMDQwZmE2NjkwZTVhZDJlMGM5MjNj
MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4dEVm
bC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNw
cApAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplSW5zcGVjdG9yU2VydmVy
KCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNl
ICVzLCB3cm9uZyBmb3JtYXQ/IFVzaW5nIDEyNy4wLjAuMToyOTk5IGluc3RlYWQuIiwgc2VydmVy
QWRkcmVzcy51dGY4KCkuZGF0YSgpKTsKIAotICAgICAgICBpZiAoIVdlYkluc3BlY3RvclNlcnZl
cjo6c2hhcmVkKCkubGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KSkKKyAgICAgICAgaWYgKCFXZWJJ
bnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLmxpc3RlbihiaW5kQWRkcmVzcywgcG9ydCkpCiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHN0YXJ0IGxpc3RlbmluZyBvbjogSVAgYWRk
cmVzcz0lcywgcG9ydD0lZC4iLCBiaW5kQWRkcmVzcy51dGY4KCkuZGF0YSgpLCBwb3J0KTsKIAog
ICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3Rr
L1RleHRDaGVja2VyR3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENo
ZWNrZXJHdGsuY3BwCmluZGV4IGRlMTk0YWQ4OWUyNGRmNGIxMjY3OTlkMWI2MjlhNTkwNWM5ZjI4
N2EuLjRmZjgyNDQ2OWRlMGE3YjcwNjE0ODQxZTQzYWZiY2I0Zjk0NjYyZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3BwCkBAIC00Myw3ICs0
Myw3IEBAIGNvbnN0IFRleHRDaGVja2VyU3RhdGUmIFRleHRDaGVja2VyOjpzdGF0ZSgpCiAgICAg
aWYgKGRpZEluaXRpYWxpemVTdGF0ZSkKICAgICAgICAgcmV0dXJuIHRleHRDaGVja2VyU3RhdGU7
CiAKLSAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2ViVGV4dENoZWNrZXI6OnNo
YXJlZCgpLT5jbGllbnQoKTsKKyAgICBXZWJUZXh0Q2hlY2tlckNsaWVudCYgY2xpZW50ID0gV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKTsKICAgICB0ZXh0Q2hlY2tlclN0YXRl
LmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gY2xpZW50LmNvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpOwogICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkID0gIGNsaWVudC5ncmFtbWFyQ2hlY2tpbmdFbmFibGVkKCk7CiAKQEAgLTU0LDcg
KzU0LDcgQEAgY29uc3QgVGV4dENoZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKICAg
CiBib29sIFRleHRDaGVja2VyOjppc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nQWxsb3dlZCgpCiB7
Ci0gICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY29udGludW91
c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaW5n
bGV0b24oKS0+Y2xpZW50KCkuY29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCk7CiB9CiAK
IHZvaWQgVGV4dENoZWNrZXI6OnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29s
IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQpAQCAtNjIsNyArNjIsNyBAQCB2b2lk
IFRleHRDaGVja2VyOjpzZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraQogICAgIGlmIChzdGF0ZSgpLmlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkID09IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKQogICAgICAg
ICByZXR1cm47CiAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRD
aGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFi
bGVkKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKTsKKyAgICBXZWJUZXh0Q2hlY2tl
cjo6c2luZ2xldG9uKCktPmNsaWVudCgpLnNldENvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNr
ZXI6OnNldEdyYW1tYXJDaGVja2luZ0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnNldEdyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoYm9vbCBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpCiAgICAgaWYgKHN0YXRlKCku
aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkID09IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKICAg
ICAgICAgcmV0dXJuOwogICAgIHRleHRDaGVja2VyU3RhdGUuaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkID0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkOwotICAgIFdlYlRleHRDaGVja2VyOjpzaGFy
ZWQoKS0+Y2xpZW50KCkuc2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuc2V0
R3JhbW1hckNoZWNraW5nRW5hYmxlZChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQpOwogfQogCiB2
b2lkIFRleHRDaGVja2VyOjpjb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5n
ZWQoYm9vbCBlbmFibGVkKQpAQCAtODUsNTcgKzg1LDU3IEBAIHZvaWQgVGV4dENoZWNrZXI6Omdy
YW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogCiBpbnQ2NF90
IFRleHRDaGVja2VyOjp1bmlxdWVTcGVsbERvY3VtZW50VGFnKFdlYlBhZ2VQcm94eSogcGFnZSkK
IHsKLSAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51bmlxdWVT
cGVsbERvY3VtZW50VGFnKHBhZ2UpOworICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xl
dG9uKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CiB9CiAKIHZvaWQg
VGV4dENoZWNrZXI6OmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcoaW50NjRfdCB0YWcpCiB7Ci0g
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jbG9zZVNwZWxsRG9jdW1lbnRX
aXRoVGFnKHRhZyk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5j
bG9zZVNwZWxsRG9jdW1lbnRXaXRoVGFnKHRhZyk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNo
ZWNrU3BlbGxpbmdPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcg
dGV4dCwgaW50MzJfdCYgbWlzc3BlbGxpbmdMb2NhdGlvbiwgaW50MzJfdCYgbWlzc3BlbGxpbmdM
ZW5ndGgpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5
aW5nKCksIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhz
cGVsbERvY3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpj
aGVja0dyYW1tYXJPZlN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIFN0cmluZ1ZpZXcg
dGV4dCwgVmVjdG9yPFdlYkNvcmU6OkdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50
MzJfdCYgYmFkR3JhbW1hckxvY2F0aW9uLCBpbnQzMl90JiBiYWRHcmFtbWFyTGVuZ3RoKQogewot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJp
bmcoc3BlbGxEb2N1bWVudFRhZywgdGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGdyYW1t
YXJEZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOworICAgIFdl
YlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuY2hlY2tHcmFtbWFyT2ZTdHJpbmco
c3BlbGxEb2N1bWVudFRhZywgdGV4dC50b1N0cmluZ1dpdGhvdXRDb3B5aW5nKCksIGdyYW1tYXJE
ZXRhaWxzLCBiYWRHcmFtbWFyTG9jYXRpb24sIGJhZEdyYW1tYXJMZW5ndGgpOwogfQogCiBib29s
IFRleHRDaGVja2VyOjpzcGVsbGluZ1VJSXNTaG93aW5nKCkKIHsKLSAgICByZXR1cm4gV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7CisgICAg
cmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuc3BlbGxpbmdVSUlz
U2hvd2luZygpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjp0b2dnbGVTcGVsbGluZ1VJSXNTaG93
aW5nKCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnRvZ2dsZVNw
ZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNs
aWVudCgpLnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tl
cjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChpbnQ2NF90IHNwZWxsRG9jdW1l
bnRUYWcsIGNvbnN0IFN0cmluZyYgbWlzc3BlbGxlZFdvcmQpCiB7Ci0gICAgV2ViVGV4dENoZWNr
ZXI6OnNoYXJlZCgpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KHNwZWxsRG9jdW1lbnRUYWcsIG1pc3NwZWxsZWRXb3JkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6
c2luZ2xldG9uKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQo
c3BlbGxEb2N1bWVudFRhZywgbWlzc3BlbGxlZFdvcmQpOwogfQogCiB2b2lkIFRleHRDaGVja2Vy
Ojp1cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoaW50NjRfdCBzcGVsbERvY3VtZW50
VGFnLCBjb25zdCBTdHJpbmcmIGJhZEdyYW1tYXJQaHJhc2UsIGNvbnN0IEdyYW1tYXJEZXRhaWwm
IGdyYW1tYXJEZXRhaWwpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQo
KS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxEb2N1bWVudFRhZywgYmFk
R3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmds
ZXRvbigpLT5jbGllbnQoKS51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJTdHJpbmcoc3BlbGxE
b2N1bWVudFRhZywgYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7CiB9CiAKIHZvaWQg
VGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywg
Y29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRleHQgKi8sIFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50
KCkuZ3Vlc3Nlc0ZvcldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCwgZ3Vlc3Nlcyk7CisgICAg
V2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChzcGVs
bERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6bGVh
cm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogewot
ICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkubGVhcm5Xb3JkKHNwZWxsRG9j
dW1lbnRUYWcsIHdvcmQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50
KCkubGVhcm5Xb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQpOwogfQogCiB2b2lkIFRleHRDaGVj
a2VyOjppZ25vcmVXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3
b3JkKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkuaWdub3JlV29y
ZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9u
KCktPmNsaWVudCgpLmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiB9CiAKIHZv
aWQgVGV4dENoZWNrZXI6OnJlcXVlc3RDaGVja2luZ09mU3RyaW5nKFBhc3NSZWZQdHI8VGV4dENo
ZWNrZXJDb21wbGV0aW9uPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc1Bvb2xHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJQcm9jZXNzUG9vbEd0ay5jcHAKaW5kZXggNWNhNWVlOGY2OTgzZjFjNjFjNjlkYWIxNmUwMWFm
OGRlYmQxOTEwYi4uMGY5ZTBjN2ZmMzYwMTJmN2JiMWJjMzhlYjIzNDgwYTc2MDE3OTg5NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0ay5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0ay5j
cHAKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgaW5pdEluc3BlY3RvclNlcnZlcigpCiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZG4ndCBwYXJzZSAlcywg
d3JvbmcgZm9ybWF0PyBVc2UgMTI3LjAuMC4xOjI5OTkgaW5zdGVhZC4iLCBzZXJ2ZXJBZGRyZXNz
LnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFy
ZWQoKS5saXN0ZW4oYmluZEFkZHJlc3MsIHBvcnQpKQorICAgICAgICBpZiAoIVdlYkluc3BlY3Rv
clNlcnZlcjo6c2luZ2xldG9uKCkubGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KSkKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGRuJ3Qgc3RhcnQgbGlzdGVuaW5nIG9uOiBJUCBhZGRyZXNzPSVz
LCBwb3J0PSVkLiIsIGJpbmRBZGRyZXNzLnV0ZjgoKS5kYXRhKCksIHBvcnQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
ZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLmgKaW5kZXggNzkxMGZhYTU5ODc4ZDViMmQ4
ODAxM2E3NTcyMTY3YjUxMTM3OTNmMy4uN2MzNGMzMTc4NDA1YzY5NjQ1NzVhMmM4YmRjZTJhNWVi
MGMxNTJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1v
cnlQcmVzc3VyZUhhbmRsZXJJT1MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBXZWJLaXQgewogY2xhc3MgV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyIHsKICAgICBmcmllbmQg
Y2xhc3MgTmV2ZXJEZXN0cm95ZWQ8V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyPjsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0
aWMgV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyJiBzaW5nbGV0b24oKTsKIAogcHJpdmF0ZToKICAg
ICBXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVySU9TLm1tIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0KaW5kZXgg
YmRkMjM2M2UwYjYyOTQ2NGJhOWFiNDg5ODA3Y2U4YmFmNjE1YTk4MC4uMWJiNWQzYTE1NGRhNTU5
MzBiOTNhNDg2YmUwZTg4ZmM1MTY5YjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0KQEAgLTMz
LDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlciYgV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaGFyZWQoKQorV2ViTWVtb3J5UHJlc3N1
cmVIYW5kbGVyJiBXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpCiB7CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFdlYk1lbW9yeVByZXNzdXJlSGFuZGxlcj4gbWVtb3J5UHJl
c3N1cmVIYW5kbGVyOwogICAgIHJldHVybiBtZW1vcnlQcmVzc3VyZUhhbmRsZXI7CkBAIC00OCw3
ICs0OCw3IEBAIFdlYk1lbW9yeVByZXNzdXJlSGFuZGxlcjo6V2ViTWVtb3J5UHJlc3N1cmVIYW5k
bGVyKCkKICAgICBkaXNwYXRjaF9zb3VyY2VfdCBzb3VyY2UgPSBkaXNwYXRjaF9zb3VyY2VfY3Jl
YXRlKERJU1BBVENIX1NPVVJDRV9UWVBFX01FTU9SWVNUQVRVUywgMCwgRElTUEFUQ0hfTUVNT1JZ
U1RBVFVTX1BSRVNTVVJFX1dBUk4sIGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCkpOwogICAgIGRp
c3BhdGNoX3NldF9jb250ZXh0KHNvdXJjZSwgdGhpcyk7CiAgICAgZGlzcGF0Y2hfc291cmNlX3Nl
dF9ldmVudF9oYW5kbGVyKHNvdXJjZSwgXnsKLSAgICAgICAgVmlld1NuYXBzaG90U3RvcmU6OnNo
YXJlZCgpLmRpc2NhcmRTbmFwc2hvdEltYWdlcygpOworICAgICAgICBWaWV3U25hcHNob3RTdG9y
ZTo6c2luZ2xldG9uKCkuZGlzY2FyZFNuYXBzaG90SW1hZ2VzKCk7CiAgICAgfSk7CiAgICAgZGlz
cGF0Y2hfcmVzdW1lKHNvdXJjZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9QYWdlQ2xpZW50SW1wbC5tbQppbmRleCAxYzg4YWE1MzQ0MjVmYTFmOGRhNGEyNmZkNjEzOTdk
NDhmYzgxY2E1Li5kYzA5Njk5MGNjMTJiNjhkN2Q4ZTI0OGJkNjM4ODU1NzJkMGNjMTZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KQEAgLTI1
NSw3ICsyNTUsNyBAQCBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiAKIGJv
b2wgUGFnZUNsaWVudEltcGw6OmlzVmlzdWFsbHlJZGxlKCkKIHsKLSAgICByZXR1cm4gV2luZG93
U2VydmVyQ29ubmVjdGlvbjo6c2hhcmVkKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25z
SGF2ZVN0b3BwZWQoKSB8fCAhaXNWaWV3VmlzaWJsZSgpOworICAgIHJldHVybiBXaW5kb3dTZXJ2
ZXJDb25uZWN0aW9uOjpzaW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNI
YXZlU3RvcHBlZCgpIHx8ICFpc1ZpZXdWaXNpYmxlKCk7CiB9CiAKIExheWVySG9zdGluZ01vZGUg
UGFnZUNsaWVudEltcGw6OnZpZXdMYXllckhvc3RpbmdNb2RlKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1Qcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3BwCmluZGV4IGYzZjg0NGY5OTM5
MzIxOWQ0ZjYxYmY3M2UwMzVhZGNhNGVmNTNmOGIuLjQyMDM5MTIxNTAzYzIzZmM1YzNjYjc2YjJk
NjMwNzExM2Q1NDUyNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
U2VjSXRlbVNoaW1Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9T
ZWNJdGVtU2hpbVByb3h5LmNwcApAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAotU2VjSXRlbVNoaW1Qcm94eSYgU2VjSXRlbVNoaW1Qcm94eTo6c2hhcmVkKCkKK1NlY0l0
ZW1TaGltUHJveHkmIFNlY0l0ZW1TaGltUHJveHk6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGlj
IFNlY0l0ZW1TaGltUHJveHkqIHByb3h5OwogICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25j
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VjSXRlbVNoaW1Q
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmgK
aW5kZXggM2U0OTYyNDBkMWRjNzU1MTYxYTc1ZWYxNDU3MmQ2NjMwZTYzM2YyZi4uYWJhM2QxNjMy
ZDNhMTIyMGJhMzA2YjI3NmFjZDBmOWY5NDQ4NWE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xhc3Mg
U2VjSXRlbVJlcXVlc3REYXRhOwogY2xhc3MgU2VjSXRlbVNoaW1Qcm94eSA6IHB1YmxpYyBJUEM6
OkNvbm5lY3Rpb246OldvcmtRdWV1ZU1lc3NhZ2VSZWNlaXZlciB7CiBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTZWNJdGVtU2hpbVByb3h5KTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU2VjSXRlbVNoaW1Q
cm94eSYgc2hhcmVkKCk7CisgICAgc3RhdGljIFNlY0l0ZW1TaGltUHJveHkmIHNpbmdsZXRvbigp
OwogCiAgICAgdm9pZCBpbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9sbGVyLmgK
aW5kZXggOGVjNzU1ZGRlY2NiN2I0NjVhMTMyNTc4NDdhNjBlYzJiYzM3NTVhMi4uM2RmN2FhOTYx
ZWY0NDVmNDU4ODZlMzNhOWEwMTYxMGEyNWJkNzE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5oCkBAIC0zOCw3ICszOCw3IEBAIGNs
YXNzIFNlcnZpY2VzQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2Vydmlj
ZXNDb250cm9sbGVyKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8U2VydmljZXND
b250cm9sbGVyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgU2VydmljZXNDb250cm9sbGVyJiBzaGFy
ZWQoKTsKKyAgICBzdGF0aWMgU2VydmljZXNDb250cm9sbGVyJiBzaW5nbGV0b24oKTsKIAogICAg
IGJvb2wgaGFzSW1hZ2VTZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzSW1hZ2VTZXJ2aWNl
czsgfQogICAgIGJvb2wgaGFzU2VsZWN0aW9uU2VydmljZXMoKSBjb25zdCB7IHJldHVybiBtX2hh
c1NlbGVjdGlvblNlcnZpY2VzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9t
YWMvU2VydmljZXNDb250cm9sbGVyLm1tCmluZGV4IGU4MmM3MmQ5MWM5MDQ1OTdiZTQ2YTg4MDFl
M2IxYmRiYTQ2ZGRjMTcuLjJkZDM1YzUwZmQ5NjQ4ZjE3YTcxMDgzNWVkODljYzlhNWEyZmM5MGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9s
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250cm9s
bGVyLm1tCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1TZXJ2aWNl
c0NvbnRyb2xsZXImIFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVkKCkKK1NlcnZpY2VzQ29udHJv
bGxlciYgU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTZXJ2aWNlc0NvbnRyb2xsZXI+IHNoYXJlZENvbnRyb2xsZXI7CiAgICAgcmV0
dXJuIHNoYXJlZENvbnRyb2xsZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1ZpZXdTbmFwc2hvdFN0b3JlLmgKaW5kZXggNTgwOTNmYjRiMzY0NjNjNDA2MDIwMGJkNDIzZGY0
ZTBlMjA1ODI5Yy4uM2RjOTFmMjkzZDVhZDMxMWFmNWQxNWFjOTA0YTMxMGMxOTBhMWRlOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUuaApA
QCAtMTE1LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICBWaWV3U25hcHNob3RTdG9yZSgpOwogICAg
IH5WaWV3U25hcHNob3RTdG9yZSgpOwogCi0gICAgc3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHNpbmdsZXRvbigpOwogCiAg
ICAgdm9pZCByZWNvcmRTbmFwc2hvdChXZWJQYWdlUHJveHkmLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1Nu
YXBzaG90U3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hv
dFN0b3JlLm1tCmluZGV4IDFhOGFlMDcxOWQyOTY5Y2I4OTVhNzU3YjMzZDc2Y2NhNzcyOWU2OGIu
LjM1ZDFmMzU0OGIxZTljNmU3MTZjZTU4OWEzYmMzOTkzZTFkNjMwOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQpAQCAtNTYsNyAr
NTYsNyBAQCBWaWV3U25hcHNob3RTdG9yZTo6flZpZXdTbmFwc2hvdFN0b3JlKCkKICAgICBkaXNj
YXJkU25hcHNob3RJbWFnZXMoKTsKIH0KIAotVmlld1NuYXBzaG90U3RvcmUmIFZpZXdTbmFwc2hv
dFN0b3JlOjpzaGFyZWQoKQorVmlld1NuYXBzaG90U3RvcmUmIFZpZXdTbmFwc2hvdFN0b3JlOjpz
aW5nbGV0b24oKQogewogICAgIHN0YXRpYyBWaWV3U25hcHNob3RTdG9yZSYgc3RvcmUgPSAqbmV3
IFZpZXdTbmFwc2hvdFN0b3JlOwogICAgIHJldHVybiBzdG9yZTsKQEAgLTE1Niw3ICsxNTYsNyBA
QCBWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdCh1aW50MzJfdCBzbG90SUQsIEludFNpemUgc2l6
ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZQogICAgICwgbV9zaXplKHNpemUpCiB7CiAgICAgaWYg
KGhhc0ltYWdlKCkpCi0gICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaGFyZWQoKS5kaWRBZGRJ
bWFnZVRvU25hcHNob3QoKnRoaXMpOworICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xl
dG9uKCkuZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KIAogVmlld1NuYXBzaG90Ojp+
Vmlld1NuYXBzaG90KCkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFZpZXdTbmFwc2hvdDo6Y2xl
YXJJbWFnZSgpCiAgICAgaWYgKCFoYXNJbWFnZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
aWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkud2lsbFJlbW92ZUltYWdlRnJvbVNuYXBzaG90KCp0
aGlzKTsKKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkud2lsbFJlbW92ZUltYWdl
RnJvbVNuYXBzaG90KCp0aGlzKTsKIAogI2lmIFVTRV9JT1NVUkZBQ0VfVklFV19TTkFQU0hPVFMK
ICAgICBtX3N1cmZhY2UgPSBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFjLm1tCmluZGV4IGRjNjQ5NWEwNGZiOGY3
YmZlMjQyZjZlMjAzNDYxZDgyZWQzYWQ0MTUuLmRkYmE4YTFjNmE1OTU1ZGQwOTY5NzdhODQ5ZDlm
ZmQ1MjAzYmRmMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2Vi
Q29udGV4dE1lbnVQcm94eU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFj
L1dlYkNvbnRleHRNZW51UHJveHlNYWMubW0KQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIFdlYkNv
bnRleHRNZW51UHJveHlNYWM6OnNldHVwU2VydmljZXNNZW51KGNvbnN0IENvbnRleHRNZW51Q29u
dGV4dERhdGEmIGNvbgogICAgIC8vIElmIHRoZXJlIGlzIG5vIHNlcnZpY2VzIG1lbnUsIHRoZW4g
dGhlIGV4aXN0aW5nIHNlcnZpY2VzIG9uIHRoZSBzeXN0ZW0gaGF2ZSBjaGFuZ2VkLCBzbyByZWZy
ZXNoIHRoYXQgbGlzdCBvZiBzZXJ2aWNlcy4KICAgICAvLyBJZiA8cmRhcjovL3Byb2JsZW0vMTc5
NTQ3MDk+IGlzIHJlc29sdmVkIHRoZW4gd2UgY2FuIG1vcmUgYWNjdXJhdGVseSBrZWVwIHRoZSBs
aXN0IHVwIHRvIGRhdGUgd2l0aG91dCB0aGlzIGNhbGwuCiAgICAgaWYgKCFtX3NlcnZpY2VzTWVu
dSkKLSAgICAgICAgU2VydmljZXNDb250cm9sbGVyOjpzaGFyZWQoKS5yZWZyZXNoRXhpc3RpbmdT
ZXJ2aWNlcygpOworICAgICAgICBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJlZnJl
c2hFeGlzdGluZ1NlcnZpY2VzKCk7CiB9CiAKIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
Y2xlYXJTZXJ2aWNlc01lbnUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
bWFjL1dpbmRvd1NlcnZlckNvbm5lY3Rpb24uaAppbmRleCA3ZjAyODY1Yjg3YjlmODIzNzA3NzI4
ODMzZWM2MjJkMzU5N2UyMjFiLi44MzhhMzRmYjVjMmQ0NGVlZTU0NjRlNTdlZGM3MGUxMGFkYmQz
YjIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZl
ckNvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1Nl
cnZlckNvbm5lY3Rpb24uaApAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgV2luZG93U2VydmVyQ29ubmVjdGlvbiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFdpbmRv
d1NlcnZlckNvbm5lY3Rpb24mIHNoYXJlZCgpOworICAgIHN0YXRpYyBXaW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uJiBzaW5nbGV0b24oKTsKIAogICAgIGJvb2wgYXBwbGljYXRpb25XaW5kb3dNb2RpZmlj
YXRpb25zSGF2ZVN0b3BwZWQoKSBjb25zdCB7IHJldHVybiBtX2FwcGxpY2F0aW9uV2luZG93TW9k
aWZpY2F0aW9uc0hhdmVTdG9wcGVkOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5tbQppbmRleCA0YTdlZmU2ZTU0ZDI2
Njc3NmFjYTgyMGFlODYzZmRmNTk5YTJjODM5Li44MTk1MzVjMmFjMTI5YzhkNTIxMjE4Yzk3NTVj
ODRiNjFkNDRmMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dp
bmRvd1NlcnZlckNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21h
Yy9XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uLm1tCkBAIC00MywxMiArNDMsMTIgQEAgdm9pZCBXaW5k
b3dTZXJ2ZXJDb25uZWN0aW9uOjphcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNTdG9wcGVk
KGJvb2wgc3RvcHBlZCkKIAogdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjphcHBsaWNhdGlv
bldpbmRvd01vZGlmaWNhdGlvbnNTdGFydGVkKHVpbnQzMl90LCB2b2lkKiwgdWludDMyX3QsIHZv
aWQqLCB1aW50MzJfdCkKIHsKLSAgICBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaGFyZWQoKS5h
cHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNTdG9wcGVkKGZhbHNlKTsKKyAgICBXaW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uOjpzaW5nbGV0b24oKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlv
bnNTdG9wcGVkKGZhbHNlKTsKIH0KIAogdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjphcHBs
aWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNTdG9wcGVkKHVpbnQzMl90LCB2b2lkKiwgdWludDMy
X3QsIHZvaWQqLCB1aW50MzJfdCkKIHsKLSAgICBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaGFy
ZWQoKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNTdG9wcGVkKHRydWUpOworICAgIFdp
bmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmdsZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZp
Y2F0aW9uc1N0b3BwZWQodHJ1ZSk7CiB9CiAKIHZvaWQgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6
d2luZG93U2VydmVyQ29ubmVjdGlvblN0YXRlQ2hhbmdlZCgpCkBAIC01OSw3ICs1OSw3IEBAIHZv
aWQgV2luZG93U2VydmVyQ29ubmVjdGlvbjo6d2luZG93U2VydmVyQ29ubmVjdGlvblN0YXRlQ2hh
bmdlZCgpCiAKICNlbmRpZgogCi1XaW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiBXaW5kb3dTZXJ2ZXJD
b25uZWN0aW9uOjpzaGFyZWQoKQorV2luZG93U2VydmVyQ29ubmVjdGlvbiYgV2luZG93U2VydmVy
Q29ubmVjdGlvbjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV2luZG93U2VydmVyQ29ubmVj
dGlvbiYgd2luZG93U2VydmVyQ29ubmVjdGlvbiA9ICpuZXcgV2luZG93U2VydmVyQ29ubmVjdGlv
bjsKICAgICByZXR1cm4gd2luZG93U2VydmVyQ29ubmVjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWRE
Qi9XZWJJREJTZXJ2ZXJDb25uZWN0aW9uLmNwcAppbmRleCA0MTE2M2Q5MWRmNWIwYTYwZjI1ODI4
MjgwYzY0M2YwNGMyMTBlNjI2Li5mNjkwZWI3M2U4YTdkZjQ3NjY3MzliNTJmNjA3Yjk3ZDY2OGY2
MWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRl
eGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwCkBA
IC01NSw3ICs1NSw3IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVNlcnZlckNvbm5lY3Rpb25J
ZGVudGlmaWVyKCkKIFBhc3NSZWZQdHI8V2ViSURCU2VydmVyQ29ubmVjdGlvbj4gV2ViSURCU2Vy
dmVyQ29ubmVjdGlvbjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
ZWN1cml0eU9yaWdpbiYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW4mIG1haW5G
cmFtZU9yaWdpbikKIHsKICAgICBSZWZQdHI8V2ViSURCU2VydmVyQ29ubmVjdGlvbj4gcmVzdWx0
ID0gYWRvcHRSZWYobmV3IFdlYklEQlNlcnZlckNvbm5lY3Rpb24oZGF0YWJhc2VOYW1lLCBvcGVu
aW5nT3JpZ2luLCBtYWluRnJhbWVPcmlnaW4pKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS53
ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24oKS0+cmVnaXN0ZXJXZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uKCpyZXN1bHQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlRvRGF0YWJh
c2VQcm9jZXNzQ29ubmVjdGlvbigpLT5yZWdpc3RlcldlYklEQlNlcnZlckNvbm5lY3Rpb24oKnJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTcxLDcgKzcxLDcg
QEAgV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6V2ViSURCU2VydmVyQ29ubmVjdGlvbihjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QKIAogV2ViSURCU2VydmVyQ29ubmVjdGlvbjo6fldl
YklEQlNlcnZlckNvbm5lY3Rpb24oKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlRv
RGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1vdmVXZWJJREJTZXJ2ZXJDb25uZWN0aW9u
KCp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJUb0RhdGFiYXNlUHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+cmVtb3ZlV2ViSURCU2VydmVyQ29ubmVjdGlvbigqdGhpcyk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogbV9zZXJ2ZXJSZXF1ZXN0cykKICAgICAgICAgaXQudmFs
dWUtPnJlcXVlc3RBYm9ydGVkKCk7CkBAIC03MDUsNyArNzA1LDcgQEAgdm9pZCBXZWJJREJTZXJ2
ZXJDb25uZWN0aW9uOjpjdXJzb3JJdGVyYXRlKElEQkN1cnNvckJhY2tlbmQmLCBjb25zdCBDdXJz
b3JJdGVyYXQKIAogSVBDOjpDb25uZWN0aW9uKiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjptZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlv
bigpLT5jb25uZWN0aW9uKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nl
c3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL1dl
YlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggNGU5MjM5MDUxNmQ5ZjhmYWFm
ZGEwNmNiMGQ4M2MyNjliM2VlYWQ5OS4uNDJhMTU3NjJkMDA0NzNjM2Q3ZmE4ZWNmYzg0Nzg2OWI4
YWZlZDI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
V2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBA
IC02Myw3ICs2Myw3IEBAIHZvaWQgV2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3RpCiAKIHZvaWQgV2ViVG9EYXRh
YmFzZVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24pCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25u
ZWN0aW9uQ2xvc2VkKHRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlRvRGF0
YWJhc2VQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKIH0KIAogdm9pZCBXZWJUb0RhdGFi
YXNlUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvRmlsZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCmluZGV4IDQ1MzM1ZWQ4ODc2
YTYxMDI5YTA2MzJhNTRmNTE2YTU0Y2I2Yjg1MzQuLmRhY2U1NzNmMTZhMzUzODQ2MzVhY2E3NTk5
Mzg3MmJjMjFjZmQxZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmls
ZUFQSS9CbG9iUmVnaXN0cnlQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVByb3h5LmNwcApAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJGaWxlQmxvYlVS
TChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUGFzc1JlZlB0cjxCbG9iRGF0YUZpbGVSZWZlcmVu
Y2U+IGZpbGUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAgICBBU1NFUlQoV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCiAgICAgU2FuZGJveEV4
dGVuc2lvbjo6SGFuZGxlIGV4dGVuc2lvbkhhbmRsZTsKIApAQCAtNDgsNDMgKzQ4LDQzIEBAIHZv
aWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyRmlsZUJsb2JVUkwoY29uc3QgV2ViQ29yZTo6
VVJMJiB1cmwsIFBhc3NSZWZQdHI8CiAgICAgaWYgKCFmaWxlLT5wYXRoKCkuaXNFbXB0eSgpKQog
ICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUoZmlsZS0+cGF0aCgpLCBTYW5k
Ym94RXh0ZW5zaW9uOjpSZWFkT25seSwgZXh0ZW5zaW9uSGFuZGxlKTsKIAotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyRmlsZUJsb2JVUkwo
dXJsLCBmaWxlLT5wYXRoKCksIGV4dGVuc2lvbkhhbmRsZSwgY29udGVudFR5cGUpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3Rl
ckZpbGVCbG9iVVJMKHVybCwgZmlsZS0+cGF0aCgpLCBleHRlbnNpb25IYW5kbGUsIGNvbnRlbnRU
eXBlKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChj
b25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKTsKKyAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05l
dHdvcmtQcm9jZXNzKCkpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYlBhcnRzLCBjb250ZW50VHlwZSks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JQYXJ0cywgY29udGVudFR5cGUpLCAwKTsKIH0KIAog
dm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBj
b25zdCBVUkwmIHNyY1VSTCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNl
c05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51
c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGcm9tVVJMKHVybCwgc3JjVVJMKSwgMCk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVn
aXN0ZXJCbG9iVVJMRnJvbVVSTCh1cmwsIHNyY1VSTCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdp
c3RyeVByb3h5Ojp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBVUkwmIHVybCkKIHsKLSAgICBBU1NF
UlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VS
VChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpVbnJlZ2lzdGVyQmxv
YlVSTCh1cmwpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVj
dGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpVbnJlZ2lzdGVyQmxvYlVSTCh1cmwpLCAwKTsKIH0KIAogdm9pZCBCbG9iUmVn
aXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UoY29uc3QgVVJMJiB1cmwsIGNvbnN0
IFVSTCYgc3JjVVJMLCBsb25nIGxvbmcgc3RhcnQsIGxvbmcgbG9uZyBlbmQpCiB7Ci0gICAgQVNT
RVJUKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAgICBBU1NF
UlQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCi0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9i
VVJMRm9yU2xpY2UodXJsLCBzcmNVUkwsIHN0YXJ0LCBlbmQpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGb3JT
bGljZSh1cmwsIHNyY1VSTCwgc3RhcnQsIGVuZCksIDApOwogfQogCiB1bnNpZ25lZCBsb25nIGxv
bmcgQmxvYlJlZ2lzdHJ5UHJveHk6OmJsb2JTaXplKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFT
U0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CisgICAgQVNT
RVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAogICAg
IHVpbnQ2NF90IHJlc3VsdFNpemU7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3
b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6QmxvYlNpemUodXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZTo6UmVwbHkocmVzdWx0U2l6ZSksIDApKQor
ICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkJsb2JTaXplKHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6QmxvYlNpemU6OlJlcGx5KHJlc3VsdFNpemUpLCAwKSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIHJlc3VsdFNpemU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5GcmFtZS5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dL
V2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCmluZGV4IGRiMjgyNzcwNDQ3OGIyNGUwYWU3NDBmZjU0
NGVjYjI3NDY2MGIwZDQuLjMxZWVlZDIwMTM2MzExYmU2N2FmZjMxMWViNzhjMzU4ZDMyY2NkZjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1l
Lm1tCkBAIC00OCw3ICs0OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKICsgKGluc3Rh
bmNldHlwZSlsb29rVXBGcmFtZUZyb21IYW5kbGU6KF9XS0ZyYW1lSGFuZGxlICopaGFuZGxlCiB7
Ci0gICAgV2ViRnJhbWUqIHdlYkZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUo
aGFuZGxlLl9mcmFtZUlEKTsKKyAgICBXZWJGcmFtZSogd2ViRnJhbWUgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS53ZWJGcmFtZShoYW5kbGUuX2ZyYW1lSUQpOwogICAgIGlmICghd2ViRnJhbWUp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNw
cAppbmRleCA5ZDg4ZmQwYjJmNDcyYzZiNzNlMTAxMWMzYTVhMTZiZGFiNjQxOGVhLi4wYWU5MTNi
MmNhMWIzMjMwYjgyMDdjOGQ0OTgxYjQ0ZTgzNWQ1ZGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dl
YktpdFdlYlBhZ2UuY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAgc3RhdGljIHZvaWQgZGlkSW5pdGlh
dGVMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYg
ZnIKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJGcmFtZSIpLCB0b0ltcGwoZnJh
bWUpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlmaWVyIiksIEFQ
STo6VUludDY0OjpjcmVhdGUoaWRlbnRpZmllcikpOwogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6
ZnJvbVVURjgoIlJlcXVlc3QiKSwgdG9JbXBsKHJlcXVlc3QpKTsKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJX
ZWJQYWdlLkRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3Jl
YXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBh
Z2UuRGlkSW5pdGlhdGVMb2FkRm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUo
V1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyBXS1VSTFJlcXVlc3RSZWYg
d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJh
bWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFdLVVJMUmVxdWVzdFJlZiB3a1JlcXVlc3QsIFdL
VVJMUmVzcG9uc2VSZWYgd2tSZWRpcmVjdFJlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQpAQCAtMTg4LDcgKzE4OCw3IEBAIHN0YXRpYyBXS1VSTFJlcXVlc3RSZWYgd2lsbFNlbmRSZXF1
ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhCiAgICAgbWVzc2Fn
ZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUmVxdWVzdCIpLCBuZXdSZXF1ZXN0LmdldCgpKTsKICAg
ICBpZiAoIXJlZGlyZWN0UmVzb3VyY2VSZXNwb25zZS5pc051bGwoKSkKICAgICAgICAgbWVzc2Fn
ZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUmVkaXJlY3RSZXNwb25zZSIpLCB0b0ltcGwod2tSZWRp
cmVjdFJlc3BvbnNlKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUo
KS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRTZW5kUmVxdWVzdEZv
clJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSku
Z2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPnBv
c3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkU2VuZFJlcXVlc3RGb3JSZXNv
dXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkpLmdldCgp
KTsKIAogICAgIHJldHVybiB0b0FQSShuZXdSZXF1ZXN0LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwog
fQpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUZvclJl
c291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmCiAgICAgbWVzc2Fn
ZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUGFnZSIpLCB0b0ltcGwocGFnZSkpOwogICAgIG1lc3Nh
Z2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJOjpVSW50NjQ6OmNyZWF0
ZShpZGVudGlmaWVyKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUmVzcG9u
c2UiKSwgdG9JbXBsKHJlc3BvbnNlKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0
ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRSZWNl
aXZlUmVzcG9uc2VGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1v
dmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3Rl
ZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZFJlY2Vp
dmVSZXNwb25zZUZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92
ZShtZXNzYWdlKSkuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlQ29udGVudExl
bmd0aEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1
aW50NjRfdCBpZGVudGlmaWVyLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZvaWQqKQpAQCAtMjA4
LDcgKzIwOCw3IEBAIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3Vy
Y2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhCiAgICAgbWVzc2FnZS5zZXQoU3Ry
aW5nOjpmcm9tVVRGOCgiUGFnZSIpLCB0b0ltcGwocGFnZSkpOwogICAgIG1lc3NhZ2Uuc2V0KFN0
cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShpZGVudGlm
aWVyKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiQ29udGVudExlbmd0aCIp
LCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGxlbmd0aCkpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2Uu
RGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNy
ZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQ
YWdlLkRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5
OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRp
ZEZpbmlzaExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFt
ZVJlZiwgdWludDY0X3QgaWRlbnRpZmllciwgY29uc3Qgdm9pZCopCkBAIC0yMTYsNyArMjE2LDcg
QEAgc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBw
YWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW4KICAgICBBUEk6OkRpY3Rpb25hcnk6Ok1hcFR5cGUg
bWVzc2FnZTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJQYWdlIiksIHRvSW1w
bChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiSWRlbnRpZmllciIp
LCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQ
YWdlLkRpZEZpbmlzaExvYWRGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShX
VEY6Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5p
bmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRp
ZEZpbmlzaExvYWRGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1v
dmUobWVzc2FnZSkpLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkRmFpbExvYWRGb3JSZXNv
dXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRl
bnRpZmllciwgV0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCopCkBAIC0yMjUsNyArMjI1LDcg
QEAgc3RhdGljIHZvaWQgZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDYKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21V
VEY4KCJQYWdlIiksIHRvSW1wbChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9t
VVRGOCgiSWRlbnRpZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKICAg
ICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJFcnJvciIpLCB0b0ltcGwoZXJyb3IpKTsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShT
dHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZEZhaWxMb2FkRm9yUmVzb3VyY2UiKSwgQVBJOjpE
aWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpm
cm9tVVRGOCgiV2ViUGFnZS5EaWRGYWlsTG9hZEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFy
eTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOwogfQogCiBjbGFzcyBQYWdlQ29u
dGV4dE1lbnVDbGllbnQgZmluYWwgOiBwdWJsaWMgQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZUNv
bnRleHRNZW51Q2xpZW50IHsKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIHdlYmtpdFdlYlBhZ2VE
aWRSZWNlaXZlTWVzc2FnZShXZWJLaXRXZWJQYWdlKiBwYWdlLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2VOYQogICAgICAgICBtZXNzYWdlUmVwbHkuc2V0KCJQYWdlIiwgd2ViUGFnZSk7CiAgICAgICAg
IG1lc3NhZ2VSZXBseS5zZXQoIkNhbGxiYWNrSUQiLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGNhbGxi
YWNrSUQpKTsKICAgICAgICAgbWVzc2FnZVJlcGx5LnNldCgiU25hcHNob3QiLCBzbmFwc2hvdElt
YWdlKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9z
dE1lc3NhZ2UoIldlYlBhZ2UuRGlkR2V0U25hcHNob3QiLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0
ZShXVEY6Om1vdmUobWVzc2FnZVJlcGx5KSkuZ2V0KCkpOworICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZSgiV2ViUGFnZS5EaWRHZXRT
bmFwc2hvdCIsIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlUmVwbHkp
KS5nZXQoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQ
bHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KaW5kZXggMmZiOGY5NTM5ZWNjODMxMTRk
MjZhNjZhNmFjNDM3Nzc2NmNiZjg4Ny4uYjBhMjc0NTQyMzQ2OTMzNDI3NTZlMmQ0YmY3YzMxZjNl
MzY3NjI5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0Q29udHJvbGxlci5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMv
V0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCkBAIC00MDIsNyAr
NDAyLDcgQEAgc3RhdGljIHZvaWQgc2V0VXBSZXNvdXJjZUxvYWRDbGllbnQoV0tXZWJQcm9jZXNz
UGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyICoKIAogKyAoaW5zdGFuY2V0eXBlKWxvb2tV
cEJyb3dzaW5nQ29udGV4dEZyb21IYW5kbGU6KFdLQnJvd3NpbmdDb250ZXh0SGFuZGxlICopaGFu
ZGxlCiB7Ci0gICAgV2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBh
Z2UoaGFuZGxlLnBhZ2VJRCk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLndlYlBhZ2UoaGFuZGxlLnBhZ2VJRCk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAg
ICAgICByZXR1cm4gbmlsOwogCkBAIC00MTMsNyArNDEzLDcgQEAgc3RhdGljIHZvaWQgc2V0VXBS
ZXNvdXJjZUxvYWRDbGllbnQoV0tXZWJQcm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9s
bGVyICoKIHsKICAgICBpZiAoIV9yZW1vdGVPYmplY3RSZWdpc3RyeSkgewogICAgICAgICBfcmVt
b3RlT2JqZWN0UmVnaXN0cnkgPSBhZG9wdE5TKFtbX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkgYWxs
b2NdIF9pbml0V2l0aE1lc3NhZ2VTZW5kZXI6Kl9wYWdlXSk7Ci0gICAgICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0
cnk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgX3BhZ2UtPnBhZ2VJRCgpLCBbX3JlbW90ZU9iamVj
dFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlT2JqZWN0UmVnaXN0
cnk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgX3BhZ2UtPnBhZ2VJRCgpLCBbX3JlbW90ZU9iamVj
dFJlZ2lzdHJ5IHJlbW90ZU9iamVjdFJlZ2lzdHJ5XSk7CiAgICAgfQogCiAgICAgcmV0dXJuIF9y
ZW1vdGVPYmplY3RSZWdpc3RyeS5nZXQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggZmYw
YWZkOWRlM2I5NWU4NTgyZmU4ZTJkNzY1YmVmNmJiODhjNTM3Yi4uYjRlNmZlNGQzYjNhN2VlMGNj
MjYwZWU0OTZhMTM2YTA1YTRjOWJiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTExNiwz
MiArMTE2LDMyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OmluaXRpYWxpemVDbGllbnQoY29uc3Qg
V0tCdW5kbGVDbGllbnRCYXNlKiBjbGllbnQpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnBvc3RN
ZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9k
eSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlTWVzc2FnZShtZXNzYWdlTmFt
ZSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyhtZXNzYWdlQm9keSkpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkhhbmRs
ZU1lc3NhZ2UobWVzc2FnZU5hbWUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIDApOwogfQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpwb3N0U3luY2hyb25vdXNNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZU5hbWUsIEFQSTo6T2JqZWN0KiBtZXNzYWdlQm9keSwgUmVmUHRyPEFQSTo6T2JqZWN0PiYgcmV0
dXJuRGF0YSkKIHsKICAgICBVc2VyRGF0YSByZXR1cm5Vc2VyRGF0YTsKIAotICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UobWVzc2FnZU5h
bWUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlU3luY2hy
b25vdXNNZXNzYWdlOjpSZXBseShyZXR1cm5Vc2VyRGF0YSksIDApKQorICAgIGlmICghV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpIYW5kbGVTeW5jaHJvbm91c01lc3NhZ2UobWVzc2FnZU5h
bWUsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlU3lu
Y2hyb25vdXNNZXNzYWdlOjpSZXBseShyZXR1cm5Vc2VyRGF0YSksIDApKQogICAgICAgICByZXR1
cm5EYXRhID0gbnVsbHB0cjsKICAgICBlbHNlCi0gICAgICAgIHJldHVybkRhdGEgPSBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHJldHVyblVzZXJEYXRhLm9i
amVjdCgpKTsKKyAgICAgICAgcmV0dXJuRGF0YSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybUhhbmRsZXNUb09iamVjdHMocmV0dXJuVXNlckRhdGEub2JqZWN0KCkpOwogfQogCiBX
ZWJDb25uZWN0aW9uKiBJbmplY3RlZEJ1bmRsZTo6d2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViQ29ubmVjdGlvblRv
VUlQcm9jZXNzKCk7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkNvbm5l
Y3Rpb25Ub1VJUHJvY2VzcygpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRBbHdheXNB
Y2NlcHRDb29raWVzKGJvb2wgYWNjZXB0KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1
cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeShh
Y2NlcHQgPyBIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlzIDogSFRUUENvb2tpZUFjY2VwdFBv
bGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXI+KCktPnNldEhUVFBDb29raWVBY2NlcHRQ
b2xpY3koYWNjZXB0ID8gSFRUUENvb2tpZUFjY2VwdFBvbGljeUFsd2F5cyA6IEhUVFBDb29raWVB
Y2NlcHRQb2xpY3lPbmx5RnJvbU1haW5Eb2N1bWVudERvbWFpbik7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldENhY2hlTW9kZWwodWludDMyX3QgY2FjaGVNb2RlbCkKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5zZXRDYWNoZU1vZGVsKGNhY2hlTW9kZWwpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKFdlYlBhZ2VH
cm91cFByb3h5KiBwYWdlR3JvdXAsIGNvbnN0IFN0cmluZyYgcHJlZmVyZW5jZSwgYm9vbCBlbmFi
bGVkKQpAQCAtMzQyLDE5ICszNDIsMTkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0QXN5bmNo
cm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2UKIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogewotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViRGF0YWJhc2VNYW5hZ2VyPigpLT5kZWxldGVBbGxEYXRh
YmFzZXMoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkRhdGFi
YXNlTWFuYWdlcj4oKS0+ZGVsZXRlQWxsRGF0YWJhc2VzKCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVvdGEpCiB7CiAgICAgLy8gSGlzdG9y
aWNhbGx5LCB3ZSd2ZSB1c2VkIHRoZSBmb2xsb3dpbmcgKHNvbWV3aGF0IG5vbi1zZW5zaWNhbCkg
c3RyaW5nCiAgICAgLy8gZm9yIHRoZSBkYXRhYmFzZUlkZW50aWZpZXIgb2YgbG9jYWwgZmlsZXMu
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJEYXRhYmFzZU1hbmFnZXI+
KCktPnNldFF1b3RhRm9yT3JpZ2luKCJmaWxlX18wIiwgcXVvdGEpOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViRGF0YWJhc2VNYW5hZ2VyPigpLT5zZXRRdW90YUZv
ck9yaWdpbigiZmlsZV9fMCIsIHF1b3RhKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xl
YXJBcHBsaWNhdGlvbkNhY2hlKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVt
ZW50PFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5kZWxldGVBbGxFbnRyaWVzKCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJBcHBsaWNhdGlvbkNhY2hl
TWFuYWdlcj4oKS0+ZGVsZXRlQWxsRW50cmllcygpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxl
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJp
bmcpCkBAIC0zNjUsNyArMzY1LDcgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6Y2xlYXJBcHBsaWNh
dGlvbkNhY2hlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2luU3RyaW5nKQogCiB2b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRBcHBDYWNoZU1heGltdW1TaXplKHVpbnQ2NF90IHNpemUpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJBcHBsaWNhdGlvbkNhY2hlTWFu
YWdlcj4oKS0+c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShzaXplKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkFwcGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5zZXRB
cHBDYWNoZU1heGltdW1TaXplKHNpemUpOwogfQogCiB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZTo6
YXBwQ2FjaGVVc2FnZUZvck9yaWdpbihjb25zdCBTdHJpbmcmIG9yaWdpblN0cmluZykKQEAgLTU4
Niw3ICs1ODYsNyBAQCB1aW50NjRfdCBJbmplY3RlZEJ1bmRsZTo6d2ViTm90aWZpY2F0aW9uSUQo
SlNDb250ZXh0UmVmIGpzQ29udGV4dCwgSlNWYWx1ZVJlZiBqcwogICAgIFdlYkNvcmU6Ok5vdGlm
aWNhdGlvbiogbm90aWZpY2F0aW9uID0gSlNOb3RpZmljYXRpb246OnRvV3JhcHBlZCh0b0pTKHRv
SlMoanNDb250ZXh0KSwganNOb3RpZmljYXRpb24pKTsKICAgICBpZiAoIW5vdGlmaWNhdGlvbikK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+bm90aWZpY2F0aW9uSURGb3JUZXN0aW5n
KG5vdGlmaWNhdGlvbik7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+bm90aWZpY2F0aW9uSURGb3JUZXN0aW5n
KG5vdGlmaWNhdGlvbik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShqc0NvbnRleHQpOwogICAg
IFVOVVNFRF9QQVJBTShqc05vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
CmluZGV4IGE5NGM3OWMzMzc3ZjYwZGViODgyMmU0NzZkYTViNTlkYjJjOTFkYTQuLjgzNzBjYzRl
NzYyOWFhNDZmYjAyMWFmOWYwMzc0NTcwZDY5NWRjZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwCkBAIC01Niw3ICs1Niw3IEBAIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6fk5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbigpCiB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VE
ZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewotICAgICAgICBpZiAoV2ViUmVzb3VyY2VMb2FkZXIqIHdlYlJlc291cmNlTG9hZGVyID0gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkud2ViUmVzb3VyY2VM
b2FkZXJGb3JJZGVudGlmaWVyKGRlY29kZXIuZGVzdGluYXRpb25JRCgpKSkKKyAgICAgICAgaWYg
KFdlYlJlc291cmNlTG9hZGVyKiB3ZWJSZXNvdXJjZUxvYWRlciA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpLndlYlJlc291cmNlTG9hZGVyRm9ySWRl
bnRpZmllcihkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKSkpCiAgICAgICAgICAgICB3ZWJSZXNvdXJj
ZUxvYWRlci0+ZGlkUmVjZWl2ZVdlYlJlc291cmNlTG9hZGVyTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybjsKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6Ok1lc3MKIHZvaWQgTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpkaWRD
bG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogICAgIC8vIFRoZSBOZXR3b3JrUHJvY2VzcyBwcm9i
YWJseSBjcmFzaGVkLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtQcm9jZXNzQ29u
bmVjdGlvbkNsb3NlZCh0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7CiB9CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZFNjaGVkdWxlci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2No
ZWR1bGVyLmNwcAppbmRleCA0MzQ3OTBhOGMyZTY1YWY3MzdjMzQwZDY0YTRjNzFiNGVjOWY1YmFj
Li44MDI0NWZiNmJmZTBmYWVmZmI1OGYzZjk3MzYxZjdhMjlmOWU1MTgyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyOjpzY2hlZHVsZUxvYWQoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyLCBD
YWNoCiAKICAgICBBU1NFUlQoKGxvYWRQYXJhbWV0ZXJzLndlYlBhZ2VJRCAmJiBsb2FkUGFyYW1l
dGVycy53ZWJGcmFtZUlEKSB8fCBsb2FkUGFyYW1ldGVycy5jbGllbnRDcmVkZW50aWFsUG9saWN5
ID09IERvTm90QXNrQ2xpZW50Rm9yQW55Q3JlZGVudGlhbHMpOwogCi0gICAgaWYgKCFXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVsZVJlc291cmNlTG9h
ZChsb2FkUGFyYW1ldGVycyksIDApKSB7CisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTY2hlZHVsZVJlc291cmNlTG9hZChsb2FkUGFyYW1l
dGVycyksIDApKSB7CiAgICAgICAgIC8vIFdlIHByb2JhYmx5IGZhaWxlZCB0byBzY2hlZHVsZSB0
aGlzIGxvYWQgd2l0aCB0aGUgTmV0d29ya1Byb2Nlc3MgYmVjYXVzZSBpdCBoYWQgY3Jhc2hlZC4K
ICAgICAgICAgLy8gVGhpcyBsb2FkIHdpbGwgbmV2ZXIgc3VjY2VlZCBzbyB3ZSB3aWxsIHNjaGVk
dWxlIGl0IHRvIGZhaWwgYXN5bmNocm9ub3VzbHkuCiAgICAgICAgIHNjaGVkdWxlSW50ZXJuYWxs
eUZhaWxlZExvYWQocmVzb3VyY2VMb2FkZXIpOwpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpyZW1vdmUoUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyKQogICAgIGlmICghbG9hZGVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVMb2FkSWRlbnRpZmllcihp
ZGVudGlmaWVyKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6UmVtb3ZlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllciksIDApOwogCiAgICAg
Ly8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgV2ViUmVzb3VyY2VMb2FkZXIgbWlnaHQgYmUganVz
dCBhYm91dCB0byBtZXNzYWdlIGJhY2sgdG8gdGhlIE5ldHdvcmtQcm9jZXNzIChlLmcuIENvbnRp
bnVlV2lsbFNlbmRSZXF1ZXN0KQogICAgIC8vIGJ1dCB0aGVyZSdzIG5vIHBvaW50IGluIGRvaW5n
IHNvIGFueW1vcmUuCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCiB2b2lkIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6c2V0RGVmZXJzTG9hZGluZyhSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIsIGJvb2wgZGVmZXJzKQogewogICAgIFJlc291cmNlTG9hZElkZW50aWZpZXIg
aWRlbnRpZmllciA9IHJlc291cmNlTG9hZGVyLT5pZGVudGlmaWVyKCk7Ci0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0RGVmZXJzTG9hZGluZyhpZGVu
dGlmaWVyLCBkZWZlcnMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpTZXREZWZlcnNMb2FkaW5nKGlkZW50aWZpZXIsIGRlZmVycyksIDAp
OwogfQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6Y3Jvc3NPcmlnaW5SZWRpcmVj
dFJlY2VpdmVkKFJlc291cmNlTG9hZGVyKiwgY29uc3QgVVJMJikKQEAgLTI1NCw3ICsyNTQsNyBA
QCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6c2VydmVQZW5kaW5nUmVxdWVzdHMoUmVz
b3VyY2VMb2FkUHJpb3JpdHkgbWluaW11bQogICAgIGlmIChtX3N1c3BlbmRQZW5kaW5nUmVxdWVz
dHNDb3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6U2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6U2VydmVQZW5kaW5nUmVxdWVzdHMobWluaW11bVByaW9yaXR5KSwgMCk7CiB9CiAKIHZvaWQg
V2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzdXNwZW5kUGVuZGluZ1JlcXVlc3RzKCkKQEAgLTI3
MCw3ICsyNzAsNyBAQCB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxlcjo6cmVzdW1lUGVuZGlu
Z1JlcXVlc3RzKCkKIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNldFNlcmlhbExv
YWRpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoZW5hYmxl
ZCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0U2VyaWFsTG9h
ZGluZ0VuYWJsZWQ6OlJlcGx5KCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5l
dHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZChlbmFibGVk
KSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2Fk
aW5nRW5hYmxlZDo6UmVwbHkoKSwgMCk7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggNmQ2NjhkNTg0
NGNkNWJhZGE0MDk1NWZlYjMwZDk2YjgzMjNhZTEzYS4uODlkMTc4YmEzMjNlMjI1YzA0MmQxMWU0
ZTAzMGMxOGQyN2U3OTcxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC02MSw3ICs2MSw3IEBAIFdlYlJl
c291cmNlTG9hZGVyOjp+V2ViUmVzb3VyY2VMb2FkZXIoKQogCiBJUEM6OkNvbm5lY3Rpb24qIFdl
YlJlc291cmNlTG9hZGVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpCiB7Ci0gICAgcmV0dXJu
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsK
KyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpOwogfQogCiB1aW50NjRfdCBXZWJSZXNvdXJjZUxvYWRlcjo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9Ob3RpZmljYXRpb25zL05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVy
bWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCA2MDk4YTE3Y2UwMTljZDBiY2IyZmFlYjdk
ODcyZWE3MTgwMDQ0NTI5Li4zYTk5ZGQ4OGNiZjIwMjUwZDdkM2E5Y2RmNTNjMjY5YzQzZjdlOWYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RN
YW5hZ2VyLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlz
c2lvbiBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnBlcm1pc3Npb25MCiAg
ICAgaWYgKCFtX3BhZ2UtPmNvcmVQYWdlKCktPnNldHRpbmdzKCkubm90aWZpY2F0aW9uc0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbkRlbmll
ZDsKICAgICAKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJO
b3RpZmljYXRpb25NYW5hZ2VyPigpLT5wb2xpY3lGb3JPcmlnaW4oc2VjdXJpdHlPcmlnaW4pOwor
ICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXI+KCktPnBvbGljeUZvck9yaWdpbihzZWN1cml0eU9yaWdpbik7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShzZWN1cml0eU9yaWdpbik7CiAgICAgcmV0dXJuIE5vdGlmaWNhdGlv
bkNsaWVudDo6UGVybWlzc2lvbkRlbmllZDsKQEAgLTEzNiw3ICsxMzYsNyBAQCBOb3RpZmljYXRp
b25DbGllbnQ6OlBlcm1pc3Npb24gTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2Vy
OjpwZXJtaXNzaW9uTAogdm9pZCBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6
OnNldFBlcm1pc3Npb25MZXZlbEZvclRlc3RpbmcoY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJpbmcs
IGJvb2wgYWxsb3dlZCkKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExF
R0FDWV9OT1RJRklDQVRJT05TKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8
V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkVXBkYXRlTm90aWZpY2F0aW9uRGVjaXNpb24o
b3JpZ2luU3RyaW5nLCBhbGxvd2VkKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBw
bGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmRpZFVwZGF0ZU5vdGlmaWNhdGlvbkRl
Y2lzaW9uKG9yaWdpblN0cmluZywgYWxsb3dlZCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShv
cmlnaW5TdHJpbmcpOwogICAgIFVOVVNFRF9QQVJBTShhbGxvd2VkKTsKQEAgLTE0Niw3ICsxNDYs
NyBAQCB2b2lkIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6c2V0UGVybWlz
c2lvbkxldmVsRm9yVGVzdGluZyhjb25zdCBTdAogdm9pZCBOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXI6OnJlbW92ZUFsbFBlcm1pc3Npb25zRm9yVGVzdGluZygpCiB7CiAjaWYg
RU5BQkxFKE5PVElGSUNBVElPTlMpIHx8IEVOQUJMRShMRUdBQ1lfTk9USUZJQ0FUSU9OUykKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+
KCktPnJlbW92ZUFsbFBlcm1pc3Npb25zRm9yVGVzdGluZygpOworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+cmVtb3ZlQWxs
UGVybWlzc2lvbnNGb3JUZXN0aW5nKCk7CiAjZW5kaWYKIH0KIApAQCAtMTYyLDcgKzE2Miw3IEBA
IHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjpkaWRSZWNlaXZlTm90
aWZpY2F0aW9uUGVybWlzc2lvbkRlY2lzCiAKICAgICBtX29yaWdpblRvSURNYXAucmVtb3ZlKG9y
aWdpbik7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNh
dGlvbk1hbmFnZXI+KCktPmRpZFVwZGF0ZU5vdGlmaWNhdGlvbkRlY2lzaW9uKG9yaWdpbi0+dG9T
dHJpbmcoKSwgYWxsb3dlZCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5kaWRVcGRhdGVOb3RpZmljYXRpb25EZWNpc2lv
bihvcmlnaW4tPnRvU3RyaW5nKCksIGFsbG93ZWQpOwogCiAjaWYgRU5BQkxFKExFR0FDWV9OT1RJ
RklDQVRJT05TKQogICAgIFJlZlB0cjxXZWJDb3JlOjpWb2lkQ2FsbGJhY2s+IHZvaWRDYWxsYmFj
ayA9IG1faWRUb1ZvaWRDYWxsYmFja01hcC50YWtlKHJlcXVlc3RJRCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUERGL1BERlBsdWdpbi5tbSBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCmluZGV4IDgwZjQ0
MzZiODkwNDBjYzlhMTYxYWJkNDhlMDE2YzY1N2JlMTg5ZDMuLmJmMWYwZTkyY2VhY2VmNTE2MzIw
Y2M3NTIxMzJlYzkzMjgwZTEzY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QREYvUERGUGx1Z2luLm1tCkBAIC0xNjYyLDcgKzE2NjIsNyBAQCB2b2lkIFBE
RlBsdWdpbjo6d3JpdGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUs
IE5TQXJyYXkgKml0ZW1zLAogICAgICAgICBwYXN0ZWJvYXJkVHlwZXMuYXBwZW5kKHR5cGUpOwog
CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlw
ZXMpLAorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRU
eXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGVzKSwKICAgICAgICAgTWVzc2FnZXM6
OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzOjpSZXBseShuZXdDaGFuZ2VD
b3VudCksIDApOwogCiAgICAgZm9yIChOU1VJbnRlZ2VyIGkgPSAwLCBjb3VudCA9IGl0ZW1zLmNv
dW50OyBpIDwgY291bnQ7ICsraSkgewpAQCAtMTY3Nyw3ICsxNjc3LDcgQEAgdm9pZCBQREZQbHVn
aW46OndyaXRlSXRlbXNUb1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0Fy
cmF5ICppdGVtcywKIAogICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TU3RyaW5n
UGJvYXJkVHlwZV0gfHwgW3R5cGUgaXNFcXVhbFRvU3RyaW5nOk5TUGFzdGVib2FyZFR5cGVTdHJp
bmddKSB7CiAgICAgICAgICAgICBSZXRhaW5QdHI8TlNTdHJpbmc+IHBsYWluVGV4dFN0cmluZyA9
IGFkb3B0TlMoW1tOU1N0cmluZyBhbGxvY10gaW5pdFdpdGhEYXRhOmRhdGEgZW5jb2Rpbmc6TlNV
VEY4U3RyaW5nRW5jb2RpbmddKTsKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBw
bGFpblRleHRTdHJpbmcuZ2V0KCkpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICAg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCB0eXBlLCBwbGFpblRleHRTdHJpbmcuZ2V0KCkpLCBN
ZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6
UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6d3JhcE5TRGF0YShk
YXRhKTsKIApAQCAtMTY4OCw3ICsxNjg4LDcgQEAgdm9pZCBQREZQbHVnaW46OndyaXRlSXRlbXNU
b1Bhc3RlYm9hcmQoTlNTdHJpbmcgKnBhc3RlYm9hcmROYW1lLCBOU0FycmF5ICppdGVtcywKICAg
ICAgICAgICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeSA9IFNoYXJlZE1lbW9y
eTo6Y3JlYXRlKGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgIG1lbWNweShzaGFyZWRNZW1v
cnktPmRhdGEoKSwgYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAg
IHNoYXJlZE1lbW9yeS0+Y3JlYXRlSGFuZGxlKGhhbmRsZSwgU2hhcmVkTWVtb3J5OjpSZWFkT25s
eSk7Ci0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJv
YXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgdHlwZSwgaGFuZGxlLCBidWZmZXItPnNp
emUoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJG
b3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVi
b2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5zaXplKCkpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdl
Q291bnQpLCAwKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5jcHAKaW5kZXggZDhiYjk5MDQ1YmQ1N2M3OWI0YWNkNjQzMTg1ZTJhNTkwZDA0
ZTY0MC4uYzM1NGIyMjQ0Njg2NTZhOTg0MDZkZmNmNGY5ZDJlMDA0M2IwNTcxMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgUGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb24qIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcjo6Z2V0UGx1
Z2luUHJvY2Vzc0Nvbm5lY3QKIAogICAgIElQQzo6QXR0YWNobWVudCBlbmNvZGVkQ29ubmVjdGlv
bklkZW50aWZpZXI7CiAgICAgYm9vbCBzdXBwb3J0c0FzeW5jaHJvbm91c0luaXRpYWxpemF0aW9u
OwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb24ocGx1Z2luUHJvY2Vzc1Rva2VuKSwKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblByb2Nlc3NUb2tl
biksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uOjpS
ZXBseShlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIsIHN1cHBvcnRzQXN5bmNocm9ub3VzSW5p
dGlhbGl6YXRpb24pLCAwKSkKICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJveHkuY3BwCmluZGV4IDA5NWRjYmRjNzAx
OWM1OWExOWM1Y2VjMjk4OTU5NTcyZmE4MWUyM2QuLmRkN2Y5Mjk1OTk0M2MwOWFiNzliYjliOGI2
MjFmZDZhZTZlZjVjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5Qcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5LmNwcApAQCAtODYsNyArODYsNyBAQCB2b2lkIFBsdWdpblByb3h5Ojpw
bHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpCiBib29sIFBsdWdpblByb3h5Ojppbml0aWFsaXplKGNvbnN0
IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAgQVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwot
ICAgIG1fY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlcigpLmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKG1fcGx1Z2luUHJvY2Vz
c1Rva2VuKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wbHVn
aW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKS5nZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbiht
X3BsdWdpblByb2Nlc3NUb2tlbik7CiAgICAgCiAgICAgaWYgKCFtX2Nvbm5lY3Rpb24pCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAppbmRleCAxMDc2MDdhZDZiY2M5MzhkZDdiYTc5OTg2OWNhZDY0Y2Iz
NjAxZWJkLi4xODY0MjMzZDU2OWEyOWEyY2IyOTI1YjJmMmE4MjVjOGRiMTZlMjAyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0x
NTMyLDcgKzE1MzIsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnNldENvbXBsZXhUZXh0SW5wdXRTdGF0
ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1Z2luQ29tcAogCiBjb25zdCBNYWNoU2Vu
ZFJpZ2h0JiBQbHVnaW5WaWV3Ojpjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKQogewotICAg
IHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQo
KTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJT
ZXJ2ZXJQb3J0KCk7CiB9CiAKIHZvaWQgUGx1Z2luVmlldzo6b3BlblBsdWdpblByZWZlcmVuY2VQ
YW5lKCkKQEAgLTE4MTQsNyArMTgxNCw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luRGlkUmVj
ZWl2ZVVzZXJJbnRlcmFjdGlvbigpCiAgICAgU3RyaW5nIHBsdWdpbk9yaWdpbiA9IHBsdWdJbklt
YWdlRWxlbWVudC5sb2FkZWRVcmwoKS5ob3N0KCk7CiAgICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1
Z0luSW1hZ2VFbGVtZW50LmxvYWRlZE1pbWVUeXBlKCk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHBhZ2VPcmlnaW4sIHBsdWdpbk9y
aWdpbiwgbWltZVR5cGUsIHBsdWdJbkltYWdlRWxlbWVudC5kb2N1bWVudCgpLnBhZ2UoKS0+c2Vz
c2lvbklEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBsdWdJbkRpZFJlY2VpdmVV
c2VySW50ZXJhY3Rpb24ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgcGx1Z0lu
SW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5zZXNzaW9uSUQoKSk7CiB9CiAKIGJvb2wg
UGx1Z2luVmlldzo6c2hvdWxkQ3JlYXRlVHJhbnNpZW50UGFpbnRpbmdTbmFwc2hvdCgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Njcm9sbGluZy9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU2Nyb2xs
aW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCmluZGV4IDNhM2M1OTY2ZTZlNDU4MWQz
M2IyNWNhZmE5ODIzYWExMWY2MDk3OWUuLmE2ODA4ODFjMmRhMTc5ZDFjMWRjZTMxY2U5MjVjOTE0
ZTA0MmRlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU2Nyb2xsaW5n
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCkBAIC01NCwxMiAr
NTQsMTIgQEAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OlJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKFdlYlBhZ2UqIHBhZ2UpCiAgICAgOiBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBh
Z2UtPmNvcmVQYWdlKCkpCiAgICAgLCBtX3dlYlBhZ2UocGFnZSkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCksICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fd2ViUGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAogUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6On5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
d2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNwcAppbmRleCA3NmIwOWFlZDFiODRhOWZm
M2UyMDZjMzIwNjFhNGVmN2VkY2RiMDY5Li5lMjE4NTE2MzA4ODc3ZGYyMTQ1MmZmOWIzYWMxYWJm
YzI1NmZjMGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2Uv
U3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFn
ZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTcxLDI0ICs3MSwyNCBAQCBTdG9yYWdlQXJlYU1hcDo6
U3RvcmFnZUFyZWFNYXAoU3RvcmFnZU5hbWVzcGFjZUltcGwqIHN0b3JhZ2VOYW1lc3BhY2UsIFBh
c3NSZWZQdAogICAgIHN3aXRjaCAobV9zdG9yYWdlVHlwZSkgewogICAgIGNhc2UgV2ViQ29yZTo6
TG9jYWxTdG9yYWdlOgogICAgICAgICBpZiAoU2VjdXJpdHlPcmlnaW4qIHRvcExldmVsT3JpZ2lu
ID0gc3RvcmFnZU5hbWVzcGFjZS0+dG9wTGV2ZWxPcmlnaW4oKSkKLSAgICAgICAgICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVUcmFuc2llbnRMb2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdl
TWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9y
aWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbih0b3BMZXZlbE9yaWdpbiksIFNlY3VyaXR5T3Jp
Z2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fc2VjdXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7
CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlVHJhbnNpZW50TG9j
YWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFt
ZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4odG9wTGV2
ZWxPcmlnaW4pLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX3NlY3Vy
aXR5T3JpZ2luLmdldCgpKSksIDApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpT
dG9yYWdlTWFuYWdlcjo6Q3JlYXRlTG9jYWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKKyAgICAgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVMb2NhbFN0b3JhZ2VNYXAobV9zdG9y
YWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0
eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbihtX3NlY3VyaXR5T3JpZ2luLmdldCgpKSks
IDApOwogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXZWJDb3JlOjpTZXNzaW9uU3RvcmFn
ZToKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0ZVNlc3Npb25TdG9yYWdlTWFw
KG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwg
U2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5n
ZXQoKSkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkNyZWF0ZVNlc3Np
b25TdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFt
ZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1
cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJl
YU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VNYXBJRCwgKnRoaXMpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6U3Rv
cmFnZUFyZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9zdG9yYWdlTWFwSUQsICp0aGlz
KTsKIH0KIAogU3RvcmFnZUFyZWFNYXA6On5TdG9yYWdlQXJlYU1hcCgpCiB7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
U3RvcmFnZU1hbmFnZXI6OkRlc3Ryb3lTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElEKSwgMCk7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpT
dG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VNYXBJRCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkRlc3Ryb3lTdG9yYWdlTWFwKG1fc3RvcmFnZU1h
cElEKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0
b3JhZ2VNYXBJRCk7CiB9CiAKIHVuc2lnbmVkIFN0b3JhZ2VBcmVhTWFwOjpsZW5ndGgoKQpAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJj
ZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEsIGNvCiAKICAgICBtX3BlbmRpbmdW
YWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRl
bShtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRT
ZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbShtX3N0b3JhZ2VNYXBJRCwgc291cmNl
QXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VG
cmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6
cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCog
c291cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpCkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNlRnJhbWUsIFN0
b3JhZ2VBcmVhSW1wbCogc28KIAogICAgIG1fcGVuZGluZ1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsK
IAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpSZW1vdmVJdGVtKG1fc3RvcmFnZU1hcElELCBz
b3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3VycmVudFNlZWQsIGtleSwgc291cmNlRnJh
bWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6
OlJlbW92ZUl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwg
bV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsK
IH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZy
YW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEpCkBAIC0xNTQsNyArMTU0LDcgQEAgdm9p
ZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9y
YWdlQXJlYUltcGwqIHNvdXJjZUEKIAogICAgIG1faGFzUGVuZGluZ0NsZWFyID0gdHJ1ZTsKICAg
ICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVhdGUobV9xdW90YUluQnl0ZXMpOwotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDbGVhcihtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+
c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q2xlYXIobV9zdG9yYWdl
TWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwgc291cmNl
RnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFNYXA6
OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgU3Rv
cmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCgpCiAgICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIHVzZSBhIHNwZWNpYWwgc2VuZFN5bmMgZmxhZyB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0
IHdhbnQgdG8gcHJvY2VzcyBpbmNvbWluZyBtZXNzYWdlcyB3aGlsZSB3YWl0aW5nIGZvciBhIHJl
cGx5LgogICAgIC8vIChUaGlzIGZsYWcgZG9lcyBub3QgeWV0IGV4aXN0KS4gU2luY2UgbG9hZFZh
bHVlc0lmTmVlZGVkKCkgZW5kcyB1cCBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gSmF2YVNjcmlw
dCBjb2RlLCBwcm9jZXNzaW5nIGluY29taW5nIHN5bmNocm9ub3VzIG1lc3NhZ2VzCiAgICAgLy8g
Y291bGQgbGVhZCB0byB3ZWlyZCByZWVudHJlbmN5IGJ1Z3Mgb3RoZXJ3aXNlLgotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKG1fc3RvcmFnZU1hcElELCBtX2N1cnJlbnRT
ZWVkKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKG1fc3RvcmFn
ZU1hcElELCBtX2N1cnJlbnRTZWVkKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1
ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogCiAgICAgbV9zdG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6
Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKICAgICBtX3N0b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKHZh
bHVlcyk7CkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hT
ZXNzaW9uU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNvdXJjZVN0b3JhZ2VBcmVhSUQsIGMKIAogICAg
IC8vIE5hbWVzcGFjZSBJRHMgZm9yIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVp
dmFsZW50IHRvIHdlYiBwYWdlIElEcwogICAgIC8vIHNvIHdlIGNhbiBnZXQgdGhlIHJpZ2h0IHBh
Z2UgaGVyZS4KLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2Vi
UGFnZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCk7CisgICAgV2ViUGFnZSogd2ViUGFnZSA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UobV9zdG9yYWdlTmFtZXNwYWNlSUQpOwogICAgIGlm
ICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zNTAsNyArMzUwLDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hMb2NhbFN0b3JhZ2VFdmVudCh1aW50NjRfdCBzb3VyY2VT
dG9yYWdlQXJlYUlELCBjb24KIAogICAgIFZlY3RvcjxSZWZQdHI8RnJhbWU+PiBmcmFtZXM7CiAK
LSAgICBQYWdlR3JvdXAmIHBhZ2VHcm91cCA9ICpXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdl
R3JvdXAobV9zdG9yYWdlTmFtZXNwYWNlSUQpLT5jb3JlUGFnZUdyb3VwKCk7CisgICAgUGFnZUdy
b3VwJiBwYWdlR3JvdXAgPSAqV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZUdyb3VwKG1f
c3RvcmFnZU5hbWVzcGFjZUlEKS0+Y29yZVBhZ2VHcm91cCgpOwogICAgIGNvbnN0IEhhc2hTZXQ8
UGFnZSo+JiBwYWdlcyA9IHBhZ2VHcm91cC5wYWdlcygpOwogICAgIGZvciAoSGFzaFNldDxQYWdl
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVnaW4oKSwgZW5kID0gcGFnZXMuZW5kKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2Vi
VXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcAppbmRleCA0ZmNmODZlODU5MDkz
YjcyM2U3OTAzN2MwYmZmYzkzMDZkNzc0MmMyLi4yMzYwMzMzMGY1ODE5YjZhZTBlODAyZjA3MGE4
MTk1MDEzZWY3ZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29udGVudENvbnRyb2xsZXIuY3BwCkBAIC03
MCwxNCArNzAsMTQgQEAgV2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjpXZWJVc2VyQ29udGVudENv
bnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlm
aWVyKQogICAgICwgbV91c2VyQ29udGVudENvbnRyb2xsZXIoKlVzZXJDb250ZW50Q29udHJvbGxl
cjo6Y3JlYXRlKCkpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CiB9CiAKIFdlYlVzZXJD
b250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW50Q29udHJvbGxlcigpCiB7CiAgICAgQVNT
RVJUKHVzZXJDb250ZW50Q29udHJvbGxlcnMoKS5jb250YWlucyhtX2lkZW50aWZpZXIpKTsKIAot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRp
Zmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pZGVudGlmaWVyKTsKIAogICAgIHVzZXJDb250ZW50Q29udHJvbGxlcnMoKS5yZW1vdmUo
bV9pZGVudGlmaWVyKTsKIH0KQEAgLTEzMyw3ICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGlm
ICghd2ViUGFnZSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2Vy
Q29udGVudENvbnRyb2xsZXJQcm94eTo6RGlkUG9zdE1lc3NhZ2Uod2ViUGFnZS0+cGFnZUlEKCks
IHdlYkZyYW1lLT5mcmFtZUlEKCksIG1faWRlbnRpZmllciwgSVBDOjpEYXRhUmVmZXJlbmNlKHZh
bHVlLT5kYXRhKCkpKSwgbV9jb250cm9sbGVyLT5pZGVudGlmaWVyKCkpOworICAgICAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6RGlkUG9zdE1lc3NhZ2Uod2ViUGFn
ZS0+cGFnZUlEKCksIHdlYkZyYW1lLT5mcmFtZUlEKCksIG1faWRlbnRpZmllciwgSVBDOjpEYXRh
UmVmZXJlbmNlKHZhbHVlLT5kYXRhKCkpKSwgbV9jb250cm9sbGVyLT5pZGVudGlmaWVyKCkpOwog
ICAgIH0KIAogICAgIFdlYkNvcmU6OlVzZXJNZXNzYWdlSGFuZGxlckRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IoKSB7IHJldHVybiAqbV9kZXNjcmlwdG9yOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkJhdHRlcnlDbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJCYXR0ZXJ5Q2xpZW50LmNw
cAppbmRleCAxZDEzNmU0ZjEzYzAxNWMxMzVhNzZiMzA5NTIwMjc1YzQxODIwZWE4Li5hYTdkNGZi
MGMxNmFlYzcxYzE5NjRlNjg0Yjk0Zjg3OTc5N2Q4NmNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkJhdHRlcnlDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQmF0dGVyeUNsaWVu
dC5jcHAKQEAgLTM4LDE3ICszOCwxNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJC
YXR0ZXJ5Q2xpZW50OjpzdGFydFVwZGF0aW5nKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9wYWdl
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5h
Z2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKIH0KIAogdm9pZCBXZWJCYXR0ZXJ5Q2xp
ZW50OjpzdG9wVXBkYXRpbmcoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1l
bnQ8V2ViQmF0dGVyeU1hbmFnZXI+KCktPnVucmVnaXN0ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+
dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKIH0KIAogdm9pZCBXZWJCYXR0ZXJ5Q2xpZW50Ojpi
YXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
c3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdl
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5h
Z2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOwogICAgIGRlbGV0ZSB0aGlzOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggZWE1YTM5OGQ4Y2QxM2JlMWJmN2Y4ZjI2Njg1
OTExMzdkYzUzNzk0Mi4uYTZmZTEzZWVhNDQ5NTNjODJmNTMyNThjNzdjY2Q2YzUwNDdmNjZjNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIEZsb2F0UmVjdCBX
ZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQogCiAgICAgRmxvYXRSZWN0IG5ld1dpbmRvd0Zy
YW1lOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5kb3dGcmFtZTo6UmVwbHkobmV3V2luZG93
RnJhbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldFdpbmRvd0ZyYW1lKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRv
d0ZyYW1lOjpSZXBseShuZXdXaW5kb3dGcmFtZSksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICByZXR1cm4gbmV3V2luZG93RnJhbWU7CkBAIC0x
OTIsNyArMTkyLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQo
RnJhbWUqIGZyYW1lKQogewogICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IGZyYW1lID8gV2ViRnJh
bWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKSA6IG51bGxwdHI7CiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkZvY3VzZWRGcmFtZUNoYW5nZWQod2ViRnJhbWUgPyB3ZWJGcmFtZS0+ZnJhbWVJRCgp
IDogMCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9j
dXNlZEZyYW1lQ2hhbmdlZCh3ZWJGcmFtZSA/IHdlYkZyYW1lLT5mcmFtZUlEKCkgOiAwKSwgbV9w
YWdlLT5wYWdlSUQoKSk7CiB9CiAKIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93
KEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgV2lu
ZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBuYXZp
Z2F0aW9uQWN0aW9uKQpAQCAtMjEzLDE0ICsyMTMsMTQgQEAgUGFnZSogV2ViQ2hyb21lQ2xpZW50
OjpjcmVhdGVXaW5kb3coRnJhbWUqIGZyYW1lLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1
ZXMKIAogICAgIHVpbnQ2NF90IG5ld1BhZ2VJRCA9IDA7CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Q3Jl
YXRlTmV3UGFnZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCByZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgp
LCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlvbkRhdGEpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpSZXBseShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0
ZU5ld1BhZ2Uod2ViRnJhbWUtPmZyYW1lSUQoKSwgcmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKSwg
d2luZG93RmVhdHVyZXMsIG5hdmlnYXRpb25BY3Rpb25EYXRhKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6Q3JlYXRlTmV3UGFnZTo6UmVwbHkobmV3UGFnZUlELCBwYXJhbWV0ZXJzKSwgbV9wYWdl
LT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYgKCFuZXdQYWdlSUQpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuY3JlYXRlV2ViUGFn
ZShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpOwotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQo
KS53ZWJQYWdlKG5ld1BhZ2VJRCktPmNvcmVQYWdlKCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuY3JlYXRlV2ViUGFnZShuZXdQYWdlSUQsIHBhcmFtZXRlcnMpOworICAgIHJldHVybiBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKG5ld1BhZ2VJRCktPmNvcmVQYWdlKCk7CiB9
CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzaG93KCkKQEAgLTI1MCw3ICsyNTAsNyBAQCBib29s
IFdlYkNocm9tZUNsaWVudDo6dG9vbGJhcnNWaXNpYmxlKCkKICAgICAgICAgcmV0dXJuIHRvb2xi
YXJzVmlzaWJpbGl0eSA9PSBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ6OlVJRWxl
bWVudFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgCiAgICAgYm9vbCB0b29sYmFyc0FyZVZpc2li
bGUgPSB0cnVlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJhcnNB
cmVWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJs
ZTo6UmVwbHkodG9vbGJhcnNBcmVWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRUb29sYmFyc0FyZVZpc2libGUoKSwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJhcnNBcmVWaXNpYmxlOjpSZXBseSh0b29sYmFy
c0FyZVZpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICByZXR1cm4gdG9vbGJhcnNBcmVWaXNpYmxlOwpAQCAtMjY4LDcgKzI2OCw3IEBAIGJvb2wg
V2ViQ2hyb21lQ2xpZW50OjpzdGF0dXNiYXJWaXNpYmxlKCkKICAgICAgICAgcmV0dXJuIHN0YXR1
c2JhclZpc2liaWxpdHkgPT0gQVBJOjpJbmplY3RlZEJ1bmRsZTo6UGFnZVVJQ2xpZW50OjpVSUVs
ZW1lbnRWaXNpYmlsaXR5OjpWaXNpYmxlOwogCiAgICAgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUg
PSB0cnVlOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNW
aXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFN0YXR1c0JhcklzVmlzaWJsZTo6
UmVwbHkoc3RhdHVzQmFySXNWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRTdGF0dXNCYXJJc1Zpc2libGUoKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlOjpSZXBseShzdGF0dXNCYXJJ
c1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAg
ICByZXR1cm4gc3RhdHVzQmFySXNWaXNpYmxlOwpAQCAtMjk3LDcgKzI5Nyw3IEBAIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50OjptZW51YmFyVmlzaWJsZSgpCiAgICAgICAgIHJldHVybiBtZW51YmFyVmlz
aWJpbGl0eSA9PSBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlVUlDbGllbnQ6OlVJRWxlbWVudFZp
c2liaWxpdHk6OlZpc2libGU7CiAgICAgCiAgICAgYm9vbCBtZW51QmFySXNWaXNpYmxlID0gdHJ1
ZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldE1lbnVCYXJJc1Zpc2libGUo
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlzaWJsZTo6UmVwbHkobWVu
dUJhcklzVmlzaWJsZSksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlzaWJsZSgpLCBNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpSZXBseShtZW51QmFySXNWaXNpYmxlKSwgbV9wYWdl
LT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIG1lbnVCYXJJ
c1Zpc2libGU7CkBAIC0zMzEsNyArMzMxLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJl
Zm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEZyYW1lKgogICAg
IGlmIChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAg
ICAgICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNwaW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVw
bHk7CiAgICAgCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxv
YWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xv
c2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwg
c3luY1NlbmRGbGFncykpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5C
ZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHko
c2hvdWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgc3luY1NlbmRGbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJl
dHVybiBzaG91bGRDbG9zZTsKQEAgLTM2Nyw3ICszNjcsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBhbGVydFRl
eHQpCiAgICAgdW5zaWduZWQgc3luY1NlbmRGbGFncyA9IElQQzo6SW5mb3JtUGxhdGZvcm1Qcm9j
ZXNzV2lsbFN1c3BlbmQ7CiAgICAgaWYgKFdlYlBhZ2U6OnN5bmNocm9ub3VzTWVzc2FnZXNTaG91
bGRTcGluUnVuTG9vcCgpKQogICAgICAgICBzeW5jU2VuZEZsYWdzIHw9IElQQzo6U3BpblJ1bkxv
b3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5K
YXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1lSUQoKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJ
RCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncyk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1l
LT5mcmFtZUlEKCksIGFsZXJ0VGV4dCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFT
Y3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpOwogfQogCiBib29sIFdlYkNocm9tZUNsaWVu
dDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCkBAIC0zODIsNyArMzgyLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3Jp
cHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGlmIChX
ZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAgICAgICAg
c3luY1NlbmRGbGFncyB8PSBJUEM6OlNwaW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7CiAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlJ1bkphdmFTY3JpcHRDb25maXJtKHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UpLCBNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwg
bV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNT
ZW5kRmxhZ3MpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNj
cmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQoKSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtOjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBh
Z2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiByZXN1bHQ7CkBAIC00MDAsNyAr
NDAwLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGMKICAgICBpZiAoV2ViUGFnZTo6c3luY2hy
b25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAgICAgIHN5bmNTZW5kRmxhZ3Mg
fD0gSVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5OwogICAgIAotICAgIGlmICgh
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJh
bWVJRCgpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpS
dW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykpCisgICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5m
cmFtZUlEKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJlc3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0
ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFyZXN1bHQuaXNOdWxsKCk7CkBAIC00MTcsNyAr
NDE3LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3Ry
aW5nJiBzdGF0dXNiYXJUZXh0KQogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnNob3VsZEludGVycnVw
dEphdmFTY3JpcHQoKQogewogICAgIGJvb2wgc2hvdWxkSW50ZXJydXB0ID0gZmFsc2U7Ci0gICAg
aWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCks
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3VsZEludGVycnVwdEphdmFTY3JpcHQ6OlJlcGx5
KHNob3VsZEludGVycnVwdCksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpTaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0OjpSZXBseShzaG91bGRJbnRl
cnJ1cHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cmV0dXJuIHNob3VsZEludGVycnVwdDsKQEAgLTYwMSw3ICs2MDEsNyBAQCB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0
VGVzdFJlc3VsdAogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViSGl0VGVz
dFJlc3VsdDo6RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YShoaXRUZXN0UmVzdWx0KTsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQod2ViSGl0VGVzdFJlc3VsdERhdGEsIG1vZGlmaWVyRmxhZ3MsIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpNb3VzZURp
ZE1vdmVPdmVyRWxlbWVudCh3ZWJIaXRUZXN0UmVzdWx0RGF0YSwgbW9kaWZpZXJGbGFncywgVXNl
ckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1
c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRC
ZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgSW50UG9pbnQmIG1vdXNl
RG93blBvc2l0aW9uLCBjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQpAQCAtNjEz
LDcgKzYxMyw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRCZWdpblRyYWNraW5nUG90ZW50
aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgSW50UG9pbnQmIG1vCiAgICAgCiAgICAgLy8gTm90aWZ5
IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSB3ZWJIaXRUZXN0UmVz
dWx0RGF0YShoaXRUZXN0UmVzdWx0KTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkQmVnaW5UcmFja2luZ1BvdGVudGlhbExvbmdNb3VzZVByZXNzKG1vdXNlRG93
blBvc2l0aW9uLCB3ZWJIaXRUZXN0UmVzdWx0RGF0YSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7
CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEJlZ2luVHJhY2tp
bmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhtb3VzZURvd25Qb3NpdGlvbiwgd2ViSGl0VGVzdFJl
c3VsdERhdGEsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6ZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MoKQpAQCAtNjI0LDcgKzYyNCw3IEBA
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRSZWNvZ25pemVMb25nTW91c2VQcmVzcygpCiAgICAg
bV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50KCkuZGlkUmVjb2duaXplTG9uZ01vdXNlUHJl
c3MobV9wYWdlLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjb2duaXplTG9uZ01v
dXNlUHJlc3MoVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1Rv
SGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY29nbml6ZUxvbmdNb3VzZVByZXNzKFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkQ2FuY2VsVHJh
Y2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcygpCkBAIC02MzUsNyArNjM1LDcgQEAgdm9pZCBX
ZWJDaHJvbWVDbGllbnQ6OmRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3Mo
KQogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVVSUNsaWVudCgpLmRpZENhbmNlbFRyYWNraW5n
UG90ZW50aWFsTG9uZ01vdXNlUHJlc3MobV9wYWdlLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
Q2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3Ry
aW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQpAQCAtNjYxLDcgKzY2MSw3IEBAIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJhbWUpCiAgICAgLy8gdGhlIHByaW50IG9wZXJh
dGlvbiBpcyBmaW5pc2hlZCB1bmV4cGVjdGVseSBhbmQgdGhlIHdlYiBwcm9jZXNzIGNyYXNoZXMs
IHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2OTc5LgogICAg
IC8vIFRoZSBQcmludGVyTGlzdEd0ayBjbGFzcyBnZXRzIHRoZSBsaXN0IG9mIHByaW50ZXJzIGlu
IHRoZSBjb25zdHJ1Y3RvciBzbyB3ZSBqdXN0IG5lZWQgdG8gZW5zdXJlIHRoZXJlJ3MgYW4gaW5z
dGFuY2UgYWxpdmUKICAgICAvLyBkdXJpbmcgdGhlIHN5bmNocm9ub3VzIHByaW50IG9wZXJhdGlv
bi4KLSAgICBSZWZQdHI8UHJpbnRlckxpc3RHdGs+IHByaW50ZXJMaXN0ID0gUHJpbnRlckxpc3RH
dGs6OnNoYXJlZCgpOworICAgIFJlZlB0cjxQcmludGVyTGlzdEd0az4gcHJpbnRlckxpc3QgPSBQ
cmludGVyTGlzdEd0azo6c2luZ2xldG9uKCk7CiAjZW5kaWYKIAogICAgIHVuc2lnbmVkIHN5bmNT
ZW5kRmxhZ3MgPSBJUEM6OkluZm9ybVBsYXRmb3JtUHJvY2Vzc1dpbGxTdXNwZW5kOwpAQCAtNjkw
LDcgKzY5MCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpleGNlZWRlZERhdGFiYXNlUXVvdGEo
RnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlCiAgICAgICAgIGlmIChXZWJQYWdl
OjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAgICAgICAgICAgIHN5
bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5OwogICAg
ICAgICAKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhKHdlYkZyYW1lLT5mcmFtZUlEKCksIG9yaWdp
bi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGRhdGFiYXNlTmFtZSwgZGV0YWlscy5kaXNwbGF5TmFt
ZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmlnaW5Vc2FnZSwgZGV0YWlscy5jdXJyZW50VXNh
Z2UoKSwgZGV0YWlscy5leHBlY3RlZFVzYWdlKCkpLAogICAgICAgICAgICAgTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFn
ZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZs
YWdzKTsKICAgICB9CkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJl
YWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgdWludDY0X3QgbmV3UXVvdGEgPSAwOwotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAorICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKAogICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25D
YWNoZU9yaWdpblF1b3RhKG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90
YSwgdG90YWxCeXRlc05lZWRlZCksCiAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJl
YWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdl
LT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxh
Z3MpOwogCkBAIC0xMDUzLDcgKzEwNTMsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0UGFn
ZUFjdGl2aXR5U3RhdGUoUGFnZUFjdGl2aXR5U3RhdGU6OkZsYWdzIGFjdGl2aXR5U3RhdAogYm9v
bCBXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9LZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBr
ZXksIFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSkgY29uc3QKIHsKICAgICBib29sIHN1Y2Nl
ZWRlZDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldyYXBDcnlwdG9LZXkoa2V5
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V3JhcENyeXB0b0tleTo6UmVwbHkoc3VjY2VlZGVk
LCB3cmFwcGVkS2V5KSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpXcmFwQ3J5cHRvS2V5KGtleSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OldyYXBDcnlwdG9LZXk6OlJlcGx5KHN1Y2NlZWRlZCwgd3JhcHBlZEtleSksIG1fcGFnZS0+cGFn
ZUlEKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHN1Y2NlZWRlZDsKIH0K
QEAgLTEwNjEsNyArMTA2MSw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5
KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBWZWN0b3I8dWludDhfdD4mCiBib29sIFdlYkNo
cm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBl
ZEtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkpIGNvbnN0CiB7CiAgICAgYm9vbCBzdWNjZWVkZWQ7
Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbndyYXBDcnlwdG9LZXkod3JhcHBl
ZEtleSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tleTo6UmVwbHkoc3Vj
Y2VlZGVkLCBrZXkpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tleSh3cmFwcGVkS2V5KSwgTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6VW53cmFwQ3J5cHRvS2V5OjpSZXBseShzdWNjZWVkZWQsIGtleSksIG1fcGFnZS0+
cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHN1Y2NlZWRlZDsK
IH0KQEAgLTEwODIsNyArMTA4Miw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVTZWxl
Y3Rpb25TZXJ2aWNlQ2xpY2soV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24mIHNlbGVjCiAKIGJvb2wg
V2ViQ2hyb21lQ2xpZW50OjpoYXNSZWxldmFudFNlbGVjdGlvblNlcnZpY2VzKGJvb2wgaXNUZXh0
T25seSkgY29uc3QKIHsKLSAgICByZXR1cm4gKGlzVGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2hh
cmVkKCkuaGFzU2VsZWN0aW9uU2VydmljZXMoKSkgfHwgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFz
UmljaENvbnRlbnRTZXJ2aWNlcygpOworICAgIHJldHVybiAoaXNUZXh0T25seSAmJiBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5oYXNTZWxlY3Rpb25TZXJ2aWNlcygpKSB8fCBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb2xvckNo
b29zZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
b2xvckNob29zZXIuY3BwCmluZGV4IGI3NzkxODIxNjJkZmE4YzJlNDQ2MDZjZDFiMmFmYzRlNTQ1
NmZlMWUuLjE1ODU0YWVjMGI5YjFlYTRkYjg5YTI2MDVjODkzOTY4NzllNjJiYjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29sb3JDaG9v
c2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbG9yQ2hvb3Nlci5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgV2ViQ29sb3JDaG9vc2VyOjpXZWJD
b2xvckNob29zZXIoV2ViUGFnZSogcGFnZSwgQ29sb3JDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNv
bnMKICAgICAsIG1fcGFnZShwYWdlKQogewogICAgIG1fcGFnZS0+c2V0QWN0aXZlQ29sb3JDaG9v
c2VyKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbG9yUGlja2VyKGluaXRp
YWxDb2xvciwgY2xpZW50LT5lbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29sb3JQaWNrZXIo
aW5pdGlhbENvbG9yLCBjbGllbnQtPmVsZW1lbnRSZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogV2ViQ29sb3JDaG9vc2VyOjp+V2ViQ29sb3JDaG9vc2Vy
KCkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJDb2xvckNob29zZXI6OnJlYXR0YWNoQ29sb3JD
aG9vc2VyKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBtX3BhZ2UtPnNldEFjdGl2ZUNvbG9yQ2hv
b3Nlcih0aGlzKTsKIAogICAgIEFTU0VSVChtX2NvbG9yQ2hvb3NlckNsaWVudCk7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpTaG93Q29sb3JQaWNrZXIoY29sb3IsIG1fY29sb3JDaG9vc2VyQ2xp
ZW50LT5lbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29sb3JQaWNrZXIoY29sb3IsIG1fY29s
b3JDaG9vc2VyQ2xpZW50LT5lbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdl
LT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ29sb3JDaG9vc2VyOjpzZXRTZWxlY3RlZENvbG9y
KGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBXZWJDb2xvckNob29z
ZXI6OnNldFNlbGVjdGVkQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIGlmIChtX3BhZ2Ut
PmFjdGl2ZUNvbG9yQ2hvb3NlcigpICE9IHRoaXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6U2V0Q29sb3JQaWNrZXJDb2xvcihjb2xvciksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q29sb3JQaWNrZXJDb2xvcihj
b2xvciksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkNvbG9yQ2hvb3Nlcjo6ZW5k
Q2hvb3NlcigpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgV2ViQ29sb3JDaG9vc2VyOjplbmRDaG9v
c2VyKCkKICAgICBpZiAoIW1fcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpFbmRDb2xvclBpY2tlcigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkVuZENvbG9yUGlja2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA1
MjZhYzU3M2FlYjdmODkzZjA5NmRiYjMxYmI2OTAxNDU4ODFmNDg2Li4zNGFmYmJhZGZkYjRkOTg2
ZjVmN2NhM2RjZGRhNDcwM2ZmZTc5MjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC04
OCw3ICs4OCw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVz
cGFjZUVuYWJsZWQoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0
Q2hlY2tlclN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CisgICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUoKS5pc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2ds
ZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBXZWJFZGl0
b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKIAogYm9vbCBXZWJFZGl0
b3JDbGllbnQ6OmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUo
KS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0
b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApp
bmRleCA2MzRhMTRhZTAyMzVlYmQ2ZjRkNjU0ODgyZjVhNjkzNzlhM2QwYTU3Li45NTE0MDllMzQ2
ODFkY2M3OTAyNTZiOTQ2YzgyYWE2YmMxZmQ1Y2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVy
Q2xpZW50LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRldGFjaGVkRnJvbVBhcmVudDIoKQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVy
Q2xpZW50KCkuZGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KHdlYlBhZ2UsIG1fZnJhbWUsIHVz
ZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KG1f
ZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHko
bV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNoZWRGcm9tUGFyZW50MygpCkBAIC0xOTcsNyAr
MTk3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2EKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8QXV0aGVu
dGljYXRpb25NYW5hZ2VyPigpLT5kaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9m
cmFtZSwgY2hhbGxlbmdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50
PEF1dGhlbnRpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlKG1fZnJhbWUsIGNoYWxsZW5nZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciovLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpICAgIApAQCAtMjkxLDcgKzI5MSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKICAg
ICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJE
YXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlz
aW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZp
Z2F0aW9uSUQoKSwgdXJsLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1P
YmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclBy
b3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIu
bmF2aWdhdGlvbklEKCksIHVybCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJh
bnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3Qo
KQpAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9j
ZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBkb2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0
PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1
bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRv
Y3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uQW5jaG9y
TmF2aWdhdGlvbiwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5k
bGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1l
LT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uQW5jaG9yTmF2aWdhdGlvbiwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkK
QEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERp
ZFB1c2hTdGF0ZVdpdGhpblBhZ2UoKQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAg
ICAgV2ViRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9j
dW1lbnRMb2FkZXImPigqbV9mcmFtZS0+Y29yZUZyYW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9h
ZGVyKCkpOwotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2Ft
ZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQ
dXNoLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNl
ckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1l
SUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRp
b25TZXNzaW9uU3RhdGVQdXNoLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9i
amVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQpAQCAt
MzU5LDcgKzM1OSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVw
bGFjZVN0YXRlV2l0aGluUGFnZSgpCiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAg
ICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1
bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2Fk
ZXIoKSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1l
RG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExv
YWRlci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVJl
cGxhY2UsIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1
c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJh
bWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdh
dGlvblNlc3Npb25TdGF0ZVJlcGxhY2UsIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgp
LT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNm
b3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkKQEAg
LTM3NSw3ICszNzUsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFBv
cFN0YXRlV2l0aGluUGFnZSgpCiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBX
ZWJEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVu
dExvYWRlciY+KCptX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIo
KSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9j
dW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRl
ci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVBvcCwg
bV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0
YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCks
IGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vz
c2lvblN0YXRlUG9wLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3Ry
aW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNU
b0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zZSgpCkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBX
ZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsQ2xvc2UoKQogCiB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJ
Y29uRGF0YWJhc2U6OkRpZFJlY2VpdmVJY29uRm9yUGFnZVVSTChtX2ZyYW1lLT51cmwoKSksIDAp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFzZTo6RGlkUmVjZWl2ZUljb25Gb3JQYWdlVVJM
KG1fZnJhbWUtPnVybCgpKSwgMCk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRp
c3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQpAQCAtNDEzLDcgKzQxMyw3IEBAIHZvaWQg
V2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQog
ICAgIFN0cmluZyB1bnJlYWNoYWJsZVVSTCA9IHByb3Zpc2lvbmFsTG9hZGVyLnVucmVhY2hhYmxl
VVJMKCkuc3RyaW5nKCk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBwcm92aXNpb25hbExvYWRlci5uYXZpZ2F0aW9u
SUQoKSwgdXJsLCB1bnJlYWNoYWJsZVVSTCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTdGFydFByb3Zpc2lvbmFs
TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgcHJvdmlzaW9uYWxMb2FkZXIubmF2aWdh
dGlvbklEKCksIHVybCwgdW5yZWFjaGFibGVVUkwsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRs
ZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aXRsZSkKQEAgLTQyOSw3ICs0MjksNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBT
dHJpbmdXaXRoRGlyZWN0aW9uJiB0aQogICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVy
Q2xpZW50KCkuZGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUod2ViUGFnZSwgdGl0bGUuc3RyaW5nKCks
IG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZVRpdGxlRm9y
RnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCB0aXRsZS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJv
Y2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRS
ZWNlaXZlVGl0bGVGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIHRpdGxlLnN0cmluZygpLCBV
c2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVz
KHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRDaGFuZ2VJY29ucyhXZWJDb3JlOjpJY29uVHlwZSkKQEAgLTQ1Myw3ICs0
NTMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQo
KQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1pdExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFt
ZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBkb2N1bWVudExvYWRlci5yZXNw
b25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXNDdXN0b21Db250ZW50UHJvdmlkZXIsIHN0YXRp
Y19jYXN0PHVpbnQzMl90PihtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkubG9hZFR5cGUo
KSksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkuY2VydGlmaWNhdGVJbmZvKCksIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2Fk
ZXIubmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCkubWltZVR5cGUoKSwg
bV9mcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRlciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1f
ZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5sb2FkVHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIu
cmVzcG9uc2UoKS5jZXJ0aWZpY2F0ZUluZm8oKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7
CiAgICAgd2ViUGFnZS0+ZGlkQ29tbWl0TG9hZChtX2ZyYW1lKTsKIH0KIApAQCAtNDgzLDcgKzQ4
Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lv
bmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlCiAgICAgICAgIG5hdmlnYXRpb25JRCA9IHN0
YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyKj4oZG9jdW1lbnRMb2FkZXIpLT5uYXZpZ2F0aW9u
SUQoKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFpbFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbklELCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0
KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGYWls
UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uSUQs
IGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIAogICAgIC8vIElmIHdlIGhhdmUg
YSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAgICAgaWYgKFdlYkZyYW1lOjpMb2FkTGlzdGVu
ZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxvYWRMaXN0ZW5lcigpKQpAQCAtNTAzLDcgKzUw
Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29u
c3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4K
ICAgICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJE
b2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3JlRnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRM
b2FkZXIoKSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRG
YWlsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdh
dGlvbklEKCksIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1P
YmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZhaWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+
ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgZXJyb3IsIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIs
IG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVy
ID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkpCkBAIC01MjQsNyArNTI0LDcgQEAgdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogICAgIFdl
YkRvY3VtZW50TG9hZGVyJiBkb2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50
TG9hZGVyJj4oKm1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigp
KTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUobV9mcmFt
ZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgVXNlckRhdGEoV2Vi
UHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50
TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAog
dm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKQEAgLTU0
MSw3ICs1NDEsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlz
aExvYWQoKQogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBkb2N1bWVudExvYWRlciA9IHN0YXRpY19j
YXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5k
b2N1bWVudExvYWRlcigpKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoTG9hZEZvckZyYW1l
KG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmluaXNoTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogCiAgICAg
Ly8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJh
bWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkp
CkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxlc3RvbmVzKQogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZSBvbGQgZGlkRmlyc3RMYXlvdXQgQVBJIHNp
bmNlIHRoaXMgaXMgZG9pbmcgZG91YmxlIGR1dHkgd2l0aCB0aGUKICAgICAgICAgLy8gbmV3IGRp
ZExheW91dCBBUEkuCiAgICAgICAgIHdlYlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50
KCkuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7Ci0g
ICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RMYXlv
dXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwor
ICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0TGF5
b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkp
KTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgb24gRGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0IHdoZW4gTWFjIFNhZmFyaSBpcyBhYmxlIHRvIGhh
bmRsZSBpdCAoPHJkYXI6Ly9wcm9ibGVtLzE3NTgwMDIxPikKQEAgLTU5Myw3ICs1OTMsNyBAQCB2
b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExheW91dChMYXlvdXRNaWxlc3Rv
bmVzIG1pbGVzdG9uZXMpCiAKICAgICAvLyBTZW5kIHRoaXMgYWZ0ZXIgRGlkRmlyc3RMYXlvdXQt
c3BlY2lmaWMgY2FsbHMgc2luY2Ugc29tZSBjbGllbnRzIGV4cGVjdCB0byBnZXQgdGhvc2UgbWVz
c2FnZXMgZmlyc3QuCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5k
aWRMYXlvdXQod2ViUGFnZSwgbWlsZXN0b25lcywgdXNlckRhdGEpOwotICAgIHdlYlBhZ2UtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkTGF5b3V0KG1pbGVzdG9uZXMsIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkTGF5b3V0KG1pbGVzdG9uZXMsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogCiAg
ICAgaWYgKG1pbGVzdG9uZXMgJiBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpIHsKICAg
ICAgICAgaWYgKG1fZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgIW1fZGlkQ29tcGxldGVQYWdlVHJh
bnNpdGlvbiAmJiAhd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5zdXBwcmVzc2VzSW5j
cmVtZW50YWxSZW5kZXJpbmcoKSkgewpAQCAtNjA0LDcgKzYwNCw3IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTGF5b3V0KExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25l
cykKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjb25zaWRlciByZW1vdmluZyB0aGUgb2xk
IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lIEFQSSBzaW5jZSB0aGlzIGlz
IGRvaW5nCiAgICAgICAgIC8vIGRvdWJsZSBkdXR5IHdpdGggdGhlIG5ldyBkaWRMYXlvdXQgQVBJ
LgogICAgICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpcnN0
VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRh
KTsKLSAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJz
dFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1lKG1fZnJhbWUt
PmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgfQogfQogCkBAIC02
ODYsNyArNjg2LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnMKICAgICB1bnNpZ25lZCBzeW5j
U2VuZEZsYWdzID0gSVBDOjpJbmZvcm1QbGF0Zm9ybVByb2Nlc3NXaWxsU3VzcGVuZDsKICAgICBp
ZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAg
ICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5
OwotICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UsIHJl
cXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6
c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkp
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jOjpS
ZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9uLCBkb3dubG9hZElEKSwgc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQorICAgIGlmICgh
d2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9y
UmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UsIHJlcXVlc3QsIGNhblNo
b3dNSU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jOjpSZXBseShyZWNl
aXZlZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9uLCBkb3dubG9hZElEKSwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBXZSBjYWxsIHRoaXMgc3luY2hyb25vdXNseSBiZWNhdXNlIENGTmV0d29yayBjYW4g
b25seSBjb252ZXJ0IGEgbG9hZGluZyBjb25uZWN0aW9uIHRvIGEgZG93bmxvYWQgZnJvbSBpdHMg
ZGlkUmVjZWl2ZVJlc3BvbnNlIGNhbGxiYWNrLgpAQCAtNzIxLDcgKzcyMSw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9u
KGNvbnN0IE5hdmlnYXRpCiAgICAgbmF2aWdhdGlvbkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNl
ckdlc3R1cmUgPSBuYXZpZ2F0aW9uQWN0aW9uLnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAg
IG5hdmlnYXRpb25BY3Rpb25EYXRhLmNhbkhhbmRsZVJlcXVlc3QgPSB3ZWJQYWdlLT5jYW5IYW5k
bGVSZXF1ZXN0KHJlcXVlc3QpOwogCi0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgp
LCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgcmVxdWVzdCwgZnJhbWVOYW1lLCBsaXN0ZW5lcklELCBV
c2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVz
ZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihtX2ZyYW1lLT5mcmFtZUlE
KCksIG5hdmlnYXRpb25BY3Rpb25EYXRhLCByZXF1ZXN0LCBmcmFtZU5hbWUsIGxpc3RlbmVySUQs
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oY29uc3QgTmF2aWdh
dGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJwRm9ybVN0YXRlLCBGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uKQpAQCAtNzg4LDcgKzc4OCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihjb25zdCBOYXZpZ2F0
CiAgICAgICAgIGRvY3VtZW50TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXIq
Pihjb3JlRnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwogCiAgICAgLy8gTm90aWZ5
IHRoZSBVSVByb2Nlc3MuCi0gICAgaWYgKCF3ZWJQYWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKG1fZnJhbWUtPmZyYW1l
SUQoKSwgZG9jdW1lbnRMb2FkZXItPm5hdmlnYXRpb25JRCgpLCBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSwgb3JpZ2luYXRpbmdGcmFtZSA/IG9yaWdpbmF0aW5nRnJhbWUtPmZyYW1lSUQoKSA6IDAsIG5h
dmlnYXRpb25BY3Rpb24ucmVzb3VyY2VSZXF1ZXN0KCksIHJlcXVlc3QsIGxpc3RlbmVySUQsIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNl
ckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGlj
eUZvck5hdmlnYXRpb25BY3Rpb246OlJlcGx5KHJlY2VpdmVkUG9saWN5QWN0aW9uLCBuZXdOYXZp
Z2F0aW9uSUQsIHBvbGljeUFjdGlvbiwgZG93bmxvYWRJRCkpKQorICAgIGlmICghd2ViUGFnZS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLT5uYXZpZ2F0aW9uSUQo
KSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIG9yaWdpbmF0aW5nRnJhbWUgPyBvcmlnaW5hdGluZ0Zy
YW1lLT5mcmFtZUlEKCkgOiAwLCBuYXZpZ2F0aW9uQWN0aW9uLnJlc291cmNlUmVxdWVzdCgpLCBy
ZXF1ZXN0LCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uOjpSZXBseShyZWNl
aXZlZFBvbGljeUFjdGlvbiwgbmV3TmF2aWdhdGlvbklELCBwb2xpY3lBY3Rpb24sIGRvd25sb2Fk
SUQpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgY2FsbCB0aGlzIHN5bmNocm9ub3Vz
bHkgYmVjYXVzZSBXZWJDb3JlIGNhbm5vdCBncmFjZWZ1bGx5IGhhbmRsZSBhIGZyYW1lIGxvYWQg
d2l0aG91dCBhIHN5bmNocm9ub3VzIG5hdmlnYXRpb24gcG9saWN5IHJlcGx5LgpAQCAtODEzLDcg
KzgxMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBs
ZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1
bmRsZVBvbGljeUNsaWVudCgpLnVuYWJsZVRvSW1wbGVtZW50UG9saWN5KHdlYlBhZ2UsIG1fZnJh
bWUsIGVycm9yLCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAg
ICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVuYWJsZVRvSW1wbGVtZW50
UG9saWN5KG1fZnJhbWUtPmZyYW1lSUQoKSwgZXJyb3IsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW5hYmxlVG9JbXBs
ZW1lbnRQb2xpY3kobV9mcmFtZS0+ZnJhbWVJRCgpLCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNl
bmRTdWJtaXRFdmVudChQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJwRm9ybVN0YXRlKQpAQCAtODUz
LDcgKzg1Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1p
dEZvcm0oUGFzc1JlZlB0cjxGb3JtU3RhdGU+IHBycEZvcm1TCiAKICAgICB1aW50NjRfdCBsaXN0
ZW5lcklEID0gbV9mcmFtZS0+c2V0VXBQb2xpY3lMaXN0ZW5lcihXVEY6Om1vdmUoZnVuY3Rpb24p
KTsKIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2lsbFN1Ym1p
dEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3VyY2VGcmFtZS0+ZnJhbWVJRCgpLCB2YWx1ZXMs
IGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVj
dHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2lsbFN1Ym1pdEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgp
LCBzb3VyY2VGcmFtZS0+ZnJhbWVJRCgpLCB2YWx1ZXMsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpyZXZlcnRU
b1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2FkZXIqKQpAQCAtMTAwOSw3ICsxMDA5LDcgQEAg
Ym9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJ
dGVtKiBpdGVtKSBjb25zdAogICAgIGlmICghc2hvdWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0p
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6V2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtKGl0ZW1JRCwgVXNlckRhdGEo
V2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5n
ZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpXaWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0oaXRlbUlELCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTAyMyw3ICsxMDIzLDcgQEAgdm9p
ZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpCiAKICAg
ICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNsaWVudCgpLmRpZERpc3BsYXlJbnNlY3Vy
ZUNvbnRlbnRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKLSAgICB3ZWJQ
YWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZERpc3BsYXlJbnNlY3VyZUNvbnRl
bnRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwor
ICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRGlzcGxheUluc2Vj
dXJlQ29udGVudEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZFJ1bkluc2VjdXJl
Q29udGVudChTZWN1cml0eU9yaWdpbiosIGNvbnN0IFVSTCYpCkBAIC0xMDM2LDcgKzEwMzYsNyBA
QCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2VjdXJp
dHlPcmlnaW4qLCBjb25zdCBVUkwmKQogCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2Fk
ZXJDbGllbnQoKS5kaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1l
LCB1c2VyRGF0YSk7CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OkRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRh
dGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0
YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVz
ZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50
OjpkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9vbCkKQEAgLTEwNDksNyArMTA0OSw3IEBAIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZERldGVjdFhTUyhjb25zdCBVUkwmLCBib29sKQog
CiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWREZXRlY3RYU1NG
b3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKLSAgICB3ZWJQYWdlLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZERldGVjdFhTU0ZvckZyYW1lKG1fZnJhbWUtPmZy
YW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1Rv
SGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWREZXRlY3RYU1NGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlE
KCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hh
bmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCmluZGV4IGMyMjExMDM4Mzg0
OGMzNmJmNjQxZjY4ZmZhOGQ1ZjdiOWEwYWNlMDUuLmNmMTZiYzY4ZWFkMmRmNDU3MGQ3YzVjNjJm
ODM3NmFiMTA1OWE0MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGllbnQuY3BwCkBAIC00
NCwyMyArNDQsMjMgQEAgV2ViR2VvbG9jYXRpb25DbGllbnQ6On5XZWJHZW9sb2NhdGlvbkNsaWVu
dCgpCiAKIHZvaWQgV2ViR2VvbG9jYXRpb25DbGllbnQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKCkK
IHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFu
YWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3Rlcldl
YlBhZ2UobV9wYWdlKTsKICAgICBkZWxldGUgdGhpczsKIH0KIAogdm9pZCBXZWJHZW9sb2NhdGlv
bkNsaWVudDo6c3RhcnRVcGRhdGluZygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3Vw
cGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+KCktPnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2Up
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25N
YW5hZ2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKIH0KIAogdm9pZCBXZWJHZW9sb2Nh
dGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5z
dXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9w
YWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0
aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKIH0KIAogdm9pZCBXZWJH
ZW9sb2NhdGlvbkNsaWVudDo6c2V0RW5hYmxlSGlnaEFjY3VyYWN5KGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
cj4oKS0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5Rm9yUGFnZShtX3BhZ2UsIGVuYWJsZWQpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2Vy
PigpLT5zZXRFbmFibGVIaWdoQWNjdXJhY3lGb3JQYWdlKG1fcGFnZSwgZW5hYmxlZCk7CiB9CiAK
IEdlb2xvY2F0aW9uUG9zaXRpb24qIFdlYkdlb2xvY2F0aW9uQ2xpZW50OjpsYXN0UG9zaXRpb24o
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJOb3RpZmljYXRpb25DbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwCmluZGV4IDYyZmY4ZmJhMmI1YjUy
YTQyYTYzNmY0MTg3ZDc0M2EzMTdiODdhNzAuLjZjZTY1ZjI2MTQ4YWJmY2MxODBkOTVjMzRmMjEx
N2ZhZmRlMjMyYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5vdGlmaWNhdGlvbkNsaWVudC5jcHAKQEAgLTQ5
LDIyICs0OSwyMiBAQCBXZWJOb3RpZmljYXRpb25DbGllbnQ6On5XZWJOb3RpZmljYXRpb25DbGll
bnQoKQogCiBib29sIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVu
dDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5zaG93KG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsK
KyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyPigpLT5zaG93KG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsKIH0KIAogdm9pZCBX
ZWJOb3RpZmljYXRpb25DbGllbnQ6OmNhbmNlbChOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikK
IHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1h
bmFnZXI+KCktPmNhbmNlbChub3RpZmljYXRpb24sIG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5jYW5jZWwo
bm90aWZpY2F0aW9uLCBtX3BhZ2UpOwogfQogCiB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6
Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
PigpLT5jbGVhck5vdGlmaWNhdGlvbnMoY29udGV4dCwgbV9wYWdlKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmNsZWFy
Tm90aWZpY2F0aW9ucyhjb250ZXh0LCBtX3BhZ2UpOwogfQogCiB2b2lkIFdlYk5vdGlmaWNhdGlv
bkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVzdHJveWVkKE5vdGlmaWNhdGlvbiogbm90aWZp
Y2F0aW9uKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZp
Y2F0aW9uTWFuYWdlcj4oKS0+ZGlkRGVzdHJveU5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIG1f
cGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmlj
YXRpb25NYW5hZ2VyPigpLT5kaWREZXN0cm95Tm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbV9w
YWdlKTsKIH0KIAogdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6Om5vdGlmaWNhdGlvbkNvbnRy
b2xsZXJEZXN0cm95ZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4
IGIyNzlkZDJjNjZkMjI4YzFkYzk1ODI0ZmRjNjJmZWMyNmVkMzFlZmMuLjU0ZWJlNDQ0NmIyMjZm
YmUwYjU3MzY3Njc3YmRhMzMyZjE4OTliODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxhdGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRl
Z2llcy5jcHAKQEAgLTExMCw5ICsxMTAsOSBAQCBQbHVnaW5TdHJhdGVneSogV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpjcmVhdGVQbHVnaW5TdHJhdGVneSgpCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lv
biwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKICNpZiBFTkFCTEUo
TkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgeworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29y
a1Byb2Nlc3MoKSkgewogICAgICAgICBTdHJpbmcgcmVzdWx0OwotICAgICAgICBpZiAoIVdlYlBy
b2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9N
KFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVw
bHkocmVzdWx0KSwgMCkpCisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0
d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oU2Vzc2lvblRyYWNrZXI6OnNl
c3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkKICAg
ICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CkBAIC0xMjQsOCArMTI0LDggQEAgU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2ll
c0ZvckRPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24KIHZvaWQgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llU3RyaW5nKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1Mp
Ci0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0g
ICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENv
b2tpZXNGcm9tRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFy
dHksIHVybCwgY29va2llU3RyaW5nKSwgMCk7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENvb2tpZXNGcm9tRE9NKFNlc3Npb25UcmFj
a2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCwgY29va2llU3RyaW5nKSwg
MCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTEzNiw5ICsxMzYsOSBAQCB2
b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaQogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvb2tp
ZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJM
JiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9D
RVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkg
eworICAgIGlmIChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkg
ewogICAgICAgICBib29sIHJlc3VsdDsKLSAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQoU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZDo6UmVwbHkocmVzdWx0KSwg
MCkpCisgICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rp
b24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkNvb2tpZXNFbmFibGVkKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vz
c2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q29va2llc0VuYWJsZWQ6OlJlcGx5KHJlc3VsdCksIDApKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE1MCw5ICsx
NTAsOSBAQCBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQoY29uc3Qg
TmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLAogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQog
ewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAgIFN0cmluZyByZXN1bHQ7Ci0gICAg
ICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQo
c2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWU6OlJlcGx5KHJlc3VsdCks
IDApKQorICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0
aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShTZXNzaW9uVHJhY2tl
cjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlOjpS
ZXBseShyZXN1bHQpLCAwKSkKICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNjQsOCArMTY0LDggQEAgU3RyaW5nIFdlYlBsYXRm
b3JtU3RyYXRlZ2llczo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29y
a1N0b3JhZ2UKIGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKGNvbnN0
IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBj
b25zdCBVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdv
cmtQcm9jZXNzKCkpIHsKLSAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llcyhTZXNzaW9uVHJhY2tlcjo6c2Vzc2lv
bklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXM6OlJlcGx5KHJhd0Nvb2tpZXMpLCAwKSkKKyAg
ICBpZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAg
ICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5j
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6R2V0UmF3Q29va2llcyhTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBm
aXJzdFBhcnR5LCB1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkdldFJhd0Nvb2tpZXM6OlJlcGx5KHJhd0Nvb2tpZXMpLCAwKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTc3LDggKzE3Nyw4IEBA
IGJvb2wgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRSYXdDb29raWVzKGNvbnN0IE5ldHdvcmtT
dG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpkZWxl
dGVDb29raWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BS
T0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2Vzcygp
KSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkRlbGV0ZUNvb2tpZShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCB1cmwsIGNv
b2tpZU5hbWUpLCAwKTsKKyAgICBpZiAoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdv
cmtQcm9jZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vz
c2lvbiksIHVybCwgY29va2llTmFtZSksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmCkBAIC0xOTMsOCArMTkzLDggQEAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7CiAgICAgc3RhdGljIFJlc291
cmNlTG9hZFNjaGVkdWxlciogc2NoZWR1bGVyOwogICAgIGlmICghc2NoZWR1bGVyKSB7Ci0gICAg
ICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAg
ICAgICAgIHNjaGVkdWxlciA9ICZXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJSZXNvdXJjZUxvYWRT
Y2hlZHVsZXIoKTsKKyAgICAgICAgaWYgKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3
b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgc2NoZWR1bGVyID0gJldlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigpOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBzY2hlZHVsZXIgPSBXZWJDb3JlOjpyZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKICAgICB9
CkBAIC0yMDQsNyArMjA0LDcgQEAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250
ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlhbHMgc3RvcmVkQ3JlZGVudGlhbHMsIENs
aWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVudGlhbFBvbGljeSwgUmVzb3VyY2VFcnJv
ciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
CiB7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkg
eworICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkp
IHsKICAgICAgICAgTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29u
dGV4dCwgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlhbHMs
IGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0yMzAsNyArMjMwLDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0
ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNvbnRl
eHQKIAogICAgIGRhdGEucmVzaXplKDApOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChsb2Fk
UGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVy
Zm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkpIHsK
KyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpQZXJmb3JtU3luY2hyb25vdXNMb2FkOjpSZXBs
eShlcnJvciwgcmVzcG9uc2UsIGRhdGEpLCAwKSkgewogICAgICAgICByZXNwb25zZSA9IFJlc291
cmNlUmVzcG9uc2UoKTsKICAgICAgICAgZXJyb3IgPSBpbnRlcm5hbEVycm9yKHJlcXVlc3QudXJs
KCkpOwogICAgIH0KQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShOZXR3b3JraW5nQ29udGV4dCogY29udGV4dAog
CiBCbG9iUmVnaXN0cnkqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlQmxvYlJlZ2lzdHJ5
KCkKIHsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2Vzcygp
KQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkp
CiAgICAgICAgIHJldHVybiBMb2FkZXJTdHJhdGVneTo6Y3JlYXRlQmxvYlJlZ2lzdHJ5KCk7CiAg
ICAgcmV0dXJuIG5ldyBCbG9iUmVnaXN0cnlQcm94eTsgICAgCiB9CkBAIC0yODEsNyArMjgxLDcg
QEAgdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnBvcHVsYXRlUGx1Z2luQ2FjaGUoKQogICAg
IEFTU0VSVChtX2NhY2hlZFBsdWdpbnMuaXNFbXB0eSgpKTsKICAgICAKICAgICAvLyBGSVhNRTog
U2hvdWxkIHdlIGRvIHNvbWV0aGluZyBpbiBjYXNlIG9mIGVycm9yIGhlcmU/Ci0gICAgaWYgKCFX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5zKG1fc2hvdWxkUmVmcmVzaFBsdWdp
bnMpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5zOjpSZXBseShtX2NhY2hl
ZFBsdWdpbnMsIG1fY2FjaGVkQXBwbGljYXRpb25QbHVnaW5zKSwgMCkpCisgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5zKG1fc2hvdWxkUmVmcmVzaFBsdWdp
bnMpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpHZXRQbHVnaW5zOjpSZXBseShtX2NhY2hl
ZFBsdWdpbnMsIG1fY2FjaGVkQXBwbGljYXRpb25QbHVnaW5zKSwgMCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIG1fc2hvdWxkUmVmcmVzaFBsdWdpbnMgPSBmYWxzZTsKQEAgLTMwMSw3ICszMDEs
NyBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Z2V0VHlwZXMoVmVjdG9yPFN0cmluZz4m
IHR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYgogICAgIGlmICghdHlwZXMuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwgMCk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFR5cGVzKHBhc3RlYm9hcmROYW1l
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFR5cGVzOjpSZXBs
eSh0eXBlcyksIDApOwogfQogCiBQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2Vi
UGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JUeXBlKGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCkBAIC0zMTQsNyArMzE0LDcgQEAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6
YnVmZmVyRm9yVHlwZShjb25zdCBTdHIKICAgICAvLyBGYWxsYmFjayB0byBtZXNzYWdpbmcgdGhl
IFVJIHByb2Nlc3MgZm9yIG5hdGl2ZSBwYXN0ZWJvYXJkIGNvbnRlbnQuCiAgICAgU2hhcmVkTWVt
b3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6Okdl
dFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpHZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkoaGFuZGxlLCBzaXplKSwg
MCk7CiAgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgUmVm
UHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5QnVmZmVyID0gU2hhcmVkTWVtb3J5OjpjcmVh
dGUoaGFuZGxlLCBTaGFyZWRNZW1vcnk6OlJlYWRPbmx5KTsKQEAgLTMyMyw2MiArMzIzLDYyIEBA
IFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyCiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpn
ZXRQYXRobmFtZXNGb3JUeXBlKFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5
cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KHBhdGhuYW1lcyks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRQ
YXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBs
eShwYXRobmFtZXMpLCAwKTsKIH0KIAogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c3Ry
aW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlLCBjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewogICAgIFN0cmluZyB2YWx1ZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwg
cGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJv
YXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkodmFsdWUpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFt
ZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0
ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkodmFsdWUpLCAwKTsKICAgICByZXR1cm4gdmFsdWU7
CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb3B5KGNvbnN0IFN0cmluZyYgZnJv
bVBhc3RlYm9hcmQsIGNvbnN0IFN0cmluZyYgdG9QYXN0ZWJvYXJkKQogewogICAgIHVpbnQ2NF90
IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3Rl
Ym9hcmRDb3B5KGZyb21QYXN0ZWJvYXJkLCB0b1Bhc3RlYm9hcmQpLCBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQ29weTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJkQ29weShmcm9t
UGFzdGVib2FyZCwgdG9QYXN0ZWJvYXJkKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
UGFzdGVib2FyZENvcHk6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIG5l
d0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291
bnQoY29uc3QgV1RGOjpTdHJpbmcgJnBhc3RlYm9hcmROYW1lKQogewogICAgIHVpbnQ2NF90IGNo
YW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9h
cmRDaGFuZ2VDb3VudChwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291
bnQocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0
ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIGNo
YW5nZUNvdW50OwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp1bmlxdWVOYW1l
KCkKIHsKICAgICBTdHJpbmcgcGFzdGVib2FyZE5hbWU7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVuaXF1ZU5hbWUoKSwgTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVuaXF1ZU5hbWU6OlJlcGx5KHBhc3RlYm9hcmROYW1l
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2Fy
ZFVuaXF1ZU5hbWUoKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2Fy
ZFVuaXF1ZU5hbWU6OlJlcGx5KHBhc3RlYm9hcmROYW1lKSwgMCk7CiAgICAgcmV0dXJuIHBhc3Rl
Ym9hcmROYW1lOwogfQogCiBDb2xvciBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvbG9yKGNvbnN0
IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgQ29sb3IgY29sb3I7Ci0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9yKHBhc3RlYm9hcmROYW1l
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENvbG9yOjpSZXBs
eShjb2xvciksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRDb2xvcihwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OkdldFBhc3RlYm9hcmRDb2xvcjo6UmVwbHkoY29sb3IpLCAwKTsKICAgICByZXR1cm4gY29s
b3I7CiB9CiAKIFVSTCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVybChjb25zdCBTdHJpbmcmIHBh
c3RlYm9hcmROYW1lKQogewogICAgIFN0cmluZyB1cmxTdHJpbmc7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTChwYXN0ZWJvYXJkTmFtZSksIE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRVUkw6OlJlcGx5KHVybFN0cmlu
ZyksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9h
cmRVUkwocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkVVJMOjpSZXBseSh1cmxTdHJpbmcpLCAwKTsKICAgICByZXR1cm4gVVJMKFBhcnNl
ZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKIH0KIAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6
OmFkZFR5cGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXN0ZWJvYXJkVHlwZXMsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6QWRkUGFzdGVib2FyZFR5cGVzKHBhc3Rl
Ym9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpBZGRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6QWRkUGFzdGVib2FyZFR5cGVzKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpB
ZGRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJu
IG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0VHlw
ZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5h
bWUsIHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBh
c3RlYm9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUs
IHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3Rl
Ym9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hh
bmdlQ291bnQ7CiB9CiAKQEAgLTM5NSw0NCArMzk1LDQ0IEBAIGxvbmcgV2ViUGxhdGZvcm1TdHJh
dGVnaWVzOjpzZXRCdWZmZXJGb3JUeXBlKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIs
IGNvCiAgICAgICAgIH0KICAgICB9CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUo
cGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBoYW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+
c2l6ZSgpIDogMCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRC
dWZmZXJGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgaGFuZGxlLCBidWZmZXIgPyBidWZmZXItPnNpemUoKSA6
IDApLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9y
VHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291
bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRQYXRobmFtZXNGb3JUeXBl
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRobmFtZXMsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgbmV3
Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVi
b2FyZFBhdGhuYW1lc0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlLCBwYXRo
bmFtZXMpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJv
YXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VD
b3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogbG9uZyBXZWJQbGF0
Zm9ybVN0cmF0ZWdpZXM6OnNldFN0cmluZ0ZvclR5cGUoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
CiB7CiAgICAgdWludDY0X3QgbmV3Q2hhbmdlQ291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlLCBzdHJpbmcpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQ
YXN0ZWJvYXJkU3RyaW5nRm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlw
ZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHN0cmluZyksIE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFu
Z2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAogI2lmIFBMQVRG
T1JNKElPUykKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRvUGFzdGVib2FyZChj
b25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKIHsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlV2ViQ29udGVudFRvUGFzdGVib2FyZChjb250ZW50
KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVdlYkNvbnRlbnRU
b1Bhc3RlYm9hcmQoY29udGVudCksIDApOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6d3JpdGVUb1Bhc3RlYm9hcmQoY29uc3QgV2ViQ29yZTo6UGFzdGVib2FyZEltYWdlJiBpbWFn
ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlSW1hZ2VUb1Bhc3RlYm9h
cmQoaW1hZ2UpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlSW1h
Z2VUb1Bhc3RlYm9hcmQoaW1hZ2UpLCAwKTsKIH0KIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdp
ZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0
IFN0cmluZyYgdGV4dCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlU3Ry
aW5nVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KSwgMCk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpXcml0ZVN0cmluZ1RvUGFzdGVib2FyZChwYXN0ZWJvYXJkVHlw
ZSwgdGV4dCksIDApOwogfQogCiBpbnQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRQYXN0ZWJv
YXJkSXRlbXNDb3VudCgpCiB7CiAgICAgdWludDY0X3QgaXRlbXNDb3VudDsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudCgpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkSXRlbXNDb3VudDo6UmVwbHkoaXRl
bXNDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRJdGVtc0NvdW50KCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRJdGVtc0NvdW50OjpSZXBseShpdGVtc0NvdW50KSwgMCk7CiAgICAgcmV0dXJuIGl0
ZW1zQ291bnQ7CiB9CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkQnVmZmVyRnJvbVBhc3RlYm9h
cgogewogICAgIFNoYXJlZE1lbW9yeTo6SGFuZGxlIGhhbmRsZTsKICAgICB1aW50NjRfdCBzaXpl
ID0gMDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVmZmVyRnJvbVBh
c3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVmZmVyRnJvbVBhc3Rl
Ym9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94
eTo6UmVhZEJ1ZmZlckZyb21QYXN0ZWJvYXJkOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKICAg
ICBpZiAoaGFuZGxlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U2hh
cmVkTWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5k
bGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwpAQCAtNDUwLDIxICs0NTAsMjEgQEAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZEJ1
ZmZlckZyb21QYXN0ZWJvYXIKIFdlYkNvcmU6OlVSTCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJl
YWRVUkxGcm9tUGFzdGVib2FyZChpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5
cGUpCiB7CiAgICAgU3RyaW5nIHVybFN0cmluZzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFVSTEZyb21QYXN0ZWJvYXJkOjpSZXBseSh1
cmxTdHJpbmcpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFk
VVJMRnJvbVBhc3RlYm9hcmQoaW5kZXgsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6UmVhZFVSTEZyb21QYXN0ZWJvYXJkOjpSZXBseSh1cmxTdHJpbmcpLCAw
KTsKICAgICByZXR1cm4gVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsU3RyaW5nKTsKIH0KIAogU3Ry
aW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKGludCBp
bmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsKICAgICBTdHJpbmcgdmFsdWU7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFN0cmluZ0Zyb21QYXN0ZWJv
YXJkKGluZGV4LCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6
OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZDo6UmVwbHkodmFsdWUpLCAwKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW5kZXgs
IHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFN0cmlu
Z0Zyb21QYXN0ZWJvYXJkOjpSZXBseSh2YWx1ZSksIDApOwogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAogbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNoYW5nZUNvdW50KCkKIHsKICAgICB1aW50
NjRfdCBjaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQ
YXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5nKCkpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNv
dW50KFN0cmluZygpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2Fy
ZENoYW5nZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBjaGFuZ2VD
b3VudDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJQbHVnSW5DbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJQbHVnSW5DbGllbnQuY3BwCmluZGV4IDYxNDFlZWZjMjFlMDQ4OTE4
ZGEwY2FhZjg2NzNlNTBiZDJjYTA3ZjguLjBmZjVmYzJjNzUwYmU0MDVjMzViYTc1ZjlkYmNiNTgz
MTIzZjUzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYlBsdWdJbkNsaWVudC5jcHAKQEAgLTUwLDEyICs1MCwxMiBAQCB2
b2lkIFdlYlBsdWdJbkNsaWVudDo6cGFnZURlc3Ryb3llZCgpCiAKIGJvb2wgV2ViUGx1Z0luQ2xp
ZW50OjpzaG91bGRBdXRvU3RhcnRGcm9tT3JpZ2luKGNvbnN0IFN0cmluZyYgcGFnZU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBwbHVnaW5PcmlnaW4sIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0g
ICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNob3VsZFBsdWdJbkF1dG9TdGFydEZyb21P
cmlnaW4obV93ZWJQYWdlLCBwYWdlT3JpZ2luLCBwbHVnaW5PcmlnaW4sIG1pbWVUeXBlKTsKKyAg
ICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2hvdWxkUGx1Z0luQXV0b1N0YXJ0RnJv
bU9yaWdpbihtX3dlYlBhZ2UsIHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUpOwog
fQogCiB2b2lkIFdlYlBsdWdJbkNsaWVudDo6ZGlkU3RhcnRGcm9tT3JpZ2luKGNvbnN0IFN0cmlu
ZyYgcGFnZU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwbHVnaW5PcmlnaW4sIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGx1Z0luRGlkU3RhcnRGcm9tT3JpZ2luKHBhZ2VPcmlnaW4sIHBsdWdpbk9y
aWdpbiwgbWltZVR5cGUsIHNlc3Npb25JRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGx1Z0luRGlkU3RhcnRGcm9tT3JpZ2luKHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5
cGUsIHNlc3Npb25JRCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUu
Y3BwCmluZGV4IGI2MmQ4ZDI0OWYxMjA5MzAyZmU0MDVmYTE3ZWJmNGM0YmZhMzdkYjguLmM4ZWY5
YmQxYjAwZGUwODYwZTJlMTZlMDM5ZjllMDQ2ZTI1Y2IyMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAK
QEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIFdlYlBvcHVwTWVudTo6c2hvdyhjb25zdCBJbnRSZWN0
JiByZWN0LCBGcmFtZVZpZXcqIHZpZXcsIGludCBpbmRleCkKICAgICBQbGF0Zm9ybVBvcHVwTWVu
dURhdGEgcGxhdGZvcm1EYXRhOwogICAgIHNldFVwUGxhdGZvcm1EYXRhKHBhZ2VDb29yZGluYXRl
cywgcGxhdGZvcm1EYXRhKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd1BvcHVwTWVu
dShwYWdlQ29vcmRpbmF0ZXMsIG1fcG9wdXBDbGllbnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rp
b24oKSwgaXRlbXMsIGluZGV4LCBwbGF0Zm9ybURhdGEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dQb3B1cE1lbnUocGFnZUNvb3JkaW5hdGVzLCBt
X3BvcHVwQ2xpZW50LT5tZW51U3R5bGUoKS50ZXh0RGlyZWN0aW9uKCksIGl0ZW1zLCBpbmRleCwg
cGxhdGZvcm1EYXRhKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViUG9wdXBNZW51
OjpoaWRlKCkKQEAgLTEyMCw3ICsxMjAsNyBAQCB2b2lkIFdlYlBvcHVwTWVudTo6aGlkZSgpCiAg
ICAgaWYgKCFtX3BhZ2UgfHwgIW1fcG9wdXBDbGllbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6SGlkZVBvcHVwTWVudSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkhpZGVQb3B1cE1lbnUoKSwgbV9wYWdlLT5wYWdl
SUQoKSk7CiAgICAgbV9wYWdlLT5zZXRBY3RpdmVQb3B1cE1lbnUoMCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU2VhcmNoUG9w
dXBNZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
U2VhcmNoUG9wdXBNZW51LmNwcAppbmRleCAxZjhmOGIzMDQ4ZmVkZDkxZGQ3ZDllMmRkYzkyZTMz
Y2ZkYTZkMjYwLi4wMjU4NDZlYzE3ZmI2YWMyZDQwYTQ5ZmNiZDU0NjBhNDk0ZDJlOTJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNlYXJj
aFBvcHVwTWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuY3BwCkBAIC01Niw3ICs1Niw3IEBAIHZvaWQgV2ViU2Vh
cmNoUG9wdXBNZW51OjpzYXZlUmVjZW50U2VhcmNoZXMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBWZWN0CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlNhdmVSZWNlbnRTZWFyY2hlcyhuYW1lLCBzZWFyY2hJdGVtcyksIHBh
Z2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNhdmVSZWNlbnRTZWFy
Y2hlcyhuYW1lLCBzZWFyY2hJdGVtcyksIHBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJT
ZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWUsIFZlY3RvcjxTdHJpbmc+JiByZXN1bHRJdGVtcykKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBX
ZWJTZWFyY2hQb3B1cE1lbnU6OmxvYWRSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIFZlY3RvcjxTdHIKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRSZWNlbnRTZWFyY2hlcyhuYW1lKSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6TG9hZFJlY2VudFNlYXJjaGVzOjpSZXBseShyZXN1bHRJdGVtcyks
IHBhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpMb2FkUmVj
ZW50U2VhcmNoZXMobmFtZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRSZWNlbnRTZWFy
Y2hlczo6UmVwbHkocmVzdWx0SXRlbXMpLCBwYWdlLT5wYWdlSUQoKSk7CiB9CiAKIGJvb2wgV2Vi
U2VhcmNoUG9wdXBNZW51OjplbmFibGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlicmF0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlicmF0aW9uQ2xpZW50LmNwcApp
bmRleCBlNDFkZWQyODU4MDUwNDY1NTM3N2YwNGIxZGY3NTg0NTAzYjVmNjk5Li5lZWFjNmVjZWQy
ZGNmNTY5ZjJkMWJmMWJjYTkwYWMyM2I4ZWY1YjI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJWaWJyYXRpb25DbGll
bnQuY3BwCkBAIC0zOCwxMiArMzgsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIHZvaWQgV2Vi
VmlicmF0aW9uQ2xpZW50Ojp2aWJyYXRlKGNvbnN0IHVuc2lnbmVkJiB2aWJyYXRpb25UaW1lKQog
ewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYlZpYnJhdGlvblByb3h5OjpWaWJyYXRlKHZpYnJhdGlvblRpbWUpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWJyYXRpb25Qcm94eTo6VmlicmF0
ZSh2aWJyYXRpb25UaW1lKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViVmlicmF0
aW9uQ2xpZW50OjpjYW5jZWxWaWJyYXRpb24oKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlZpYnJhdGlvblBy
b3h5OjpDYW5jZWxWaWJyYXRpb24oKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViVmlicmF0aW9uUHJveHk6OkNhbmNlbFZpYnJhdGlvbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsK
IH0KIAogdm9pZCBXZWJWaWJyYXRpb25DbGllbnQ6OnZpYnJhdGlvbkRlc3Ryb3llZCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJF
ZGl0b3JDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcAppbmRleCBiY2E4M2U5OWMxNmQxNDlkMzli
YzI4ZGNhMjc1MWI1OTYzZTViNTNkLi43NjlkNzhjNmQ0MjM1YTEyYzU1NThlMWUwMzQ5YWVhODlk
NTIxYzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAKQEAgLTQ0LDcg
KzQ0LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OmdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZl
bnQoY29uc3QgS2V5Ym9hcmRFdmVudCogZXZlbnQsIFYKIAogICAgIC8qIEZpcnN0IHRyeSB0byBp
bnRlcnByZXQgdGhlIGNvbW1hbmQgaW4gdGhlIFVJIGFuZCBnZXQgdGhlIGNvbW1hbmRzLgogICAg
ICAgIFVJIG5lZWRzIHRvIHJlY2VpdmUgZXZlbnQgdHlwZSBiZWNhdXNlIG9ubHkga25vd3MgY3Vy
cmVudCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50LiovCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6R2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChldmVudC0+dHlwZSgpKSwKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGV2ZW50
LT50eXBlKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudDo6
UmVwbHkocGVuZGluZ0VkaXRvckNvbW1hbmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Om1heCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYlF1aWNrTG9va0hhbmRsZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJRdWlja0xvb2tIYW5k
bGVDbGllbnQuY3BwCmluZGV4IGMzYTcyNzQ1YjM4ZDE3Y2M2NTQxMDk3YjA1MWI1ZDAxZTZhZTgz
NmMuLjE3Yjk4OWYyYTM5YmExMTIxMmE4NjkzZTlkYzU4NTk3OTNhNzc1M2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYlF1aWNrTG9v
a0hhbmRsZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9pb3MvV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50LmNwcApAQCAtMzksNyArMzksNyBA
QCBXZWJRdWlja0xvb2tIYW5kbGVDbGllbnQ6OldlYlF1aWNrTG9va0hhbmRsZUNsaWVudChjb25z
dCBXZWJDb3JlOjpRdWlja0xvb2tIYW5kbAogICAgICwgbV91dGkoaGFuZGxlLnByZXZpZXdVVEko
KSkKICAgICAsIG1fcGFnZUlEKHBhZ2VJRCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0TG9hZEZvclF1aWNrTG9va0RvY3Vt
ZW50SW5NYWluRnJhbWUobV9maWxlTmFtZSwgbV91dGkpLCBtX3BhZ2VJRCk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTdGFydExv
YWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKG1fZmlsZU5hbWUsIG1fdXRpKSwgbV9w
YWdlSUQpOwogfQogCiB2b2lkIFdlYlF1aWNrTG9va0hhbmRsZUNsaWVudDo6ZGlkUmVjZWl2ZURh
dGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBXZWJR
dWlja0xvb2tIYW5kbGVDbGllbnQ6OmRpZFJlY2VpdmVEYXRhQXJyYXkoQ0ZBcnJheVJlZiBkYXRh
QXJyYXkpCiAKIHZvaWQgV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5n
KCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1lKG1fZGF0YSks
IG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkZyYW1l
KG1fZGF0YSksIG1fcGFnZUlEKTsKICAgICBtX2RhdGEuY2xlYXIoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9y
Q2xpZW50TWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9t
YWMvV2ViRWRpdG9yQ2xpZW50TWFjLm1tCmluZGV4IDQ5ZDU5YmUzYmMzNTQ4OWZlOTIzZTA2YWM2
ZmE0OWU5OGZkYTA0NWIuLmMwNjllMDg1ZDRkNjI5NzBiNDVmMGVmNGJlNjZmZDFkNjQwNTgyYTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFj
L1dlYkVkaXRvckNsaWVudE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMubW0KQEAgLTE4NSw3ICsxODUsNyBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlU21hcnRJbnNlcnREZWxldGUoKQogCiBib29s
IFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQog
ewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNB
dXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0
aW9uRW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uKCkKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVu
dDo6dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb24oKQogCiBib29sIFdlYkVkaXRvckNs
aWVudDo6aXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50ZXh0Q2hl
Y2tlclN0YXRlKCkuaXNBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZDsKIH0KIAogdm9pZCBX
ZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKQpAQCAtMjA3LDcg
KzIwNyw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bkVuYWJsZWQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hlY2tl
clN0YXRlKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZDsKKyAgICByZXR1cm4g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljRGFz
aFN1YnN0aXR1dGlvbkVuYWJsZWQ7CiB9CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVB
dXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uKCkKQEAgLTIxOCw3ICsyMTgsNyBAQCB2b2lkIFdlYkVk
aXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbigpCiAKIGJvb2wgV2Vi
RWRpdG9yQ2xpZW50Ojppc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQogewotICAg
IHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0
aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVk
OwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljVGV4dFJlcGxhY2Vt
ZW50KCkKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0
b21hdGljVGV4dFJlcGxhY2VtZW50KCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzQXV0b21h
dGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlv
bkVuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2Vy
U3RhdGUoKS5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQ7CiB9CiAKIHZvaWQg
V2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2Vi
RnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRleHQubW0KaW5kZXggYjAyNzI5
NGI2Y2M5ZjRlMWU1ODlmZjAwNDQ4NzE5NTQyY2QwZjcyMi4uN2ZlNDlmNTUyYjExZGI1MzdmMzJi
NTYzY2IzNGE1NWU1OTJmYTdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Lm1tCkBAIC04OCw3ICs4OCw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFdl
YkZyYW1lTmV0d29ya2luZ0NvbnRleHQ6OnNvdXJjZUFwcGxpY2F0aW9uQXVkaXREYXRhKCkgY29u
CiB7CiAjaWYgUExBVEZPUk0oSU9TKQogICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKLSAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPmdl
dEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2VuKGF1ZGl0VG9rZW4pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gYWRvcHRDRihDRkRhdGFDcmVhdGUo
MCwgKGNvbnN0IFVJbnQ4KikmYXVkaXRUb2tlbiwgc2l6ZW9mKGF1ZGl0VG9rZW4pKSk7CiAjZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5j
cHAKaW5kZXggZTZjZWQ5ZTIzNTIxZWNiOThkMjdhY2ZmMzAyYjdkNjc5MjY0ZmQ1ZS4uMTJhMzY0
NDc0Mjg0MTM0ODlkZTJkZGE0ZjFiYjk4Y2U3Nzk1MjQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCkBAIC04MSwxMiArODEsMTIg
QEAgRHJhd2luZ0FyZWE6OkRyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSB0eXBlLCBXZWJQYWdl
JiB3ZWJQYWdlKQogICAgICwgbV9uYXRpdmVTdXJmYWNlSGFuZGxlRm9yQ29tcG9zaXRpbmcoMCkK
ICNlbmRpZgogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBh
Z2VJRCgpLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dl
YlBhZ2UucGFnZUlEKCksICp0aGlzKTsKIH0KIAogRHJhd2luZ0FyZWE6On5EcmF3aW5nQXJlYSgp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3Nh
Z2VzOjpEcmF3aW5nQXJlYTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlE
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6RHJhd2luZ0FyZWE6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBh
Z2VJRCgpKTsKIH0KIAogdm9pZCBEcmF3aW5nQXJlYTo6ZGlzcGF0Y2hBZnRlckVuc3VyaW5nVXBk
YXRlZFNjcm9sbFBvc2l0aW9uKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIu
Y3BwCmluZGV4IGI3OTJhMTE0MDNkNjg5ZmFlYjY0NjBjYTI1M2FlZjQ5N2ZhMTkyYzcuLjcxYzMz
ZjQ4MmViZTFmNjVmNmE2NWZhZmEwYTA1MDA1YTc3YTcxYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0yMDUs
NyArMjA1LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoVG91Y2hFdmVudHMoKQog
ICAgIH0KIAogICAgIGZvciAoYXV0byYgc2xvdCA6IGxvY2FsQ29weSkgewotICAgICAgICBpZiAo
V2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2Uoc2xvdC5rZXkp
KQorICAgICAgICBpZiAoV2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYlBhZ2Uoc2xvdC5rZXkpKQogICAgICAgICAgICAgd2ViUGFnZS0+ZGlzcGF0Y2hBc3luY2hy
b25vdXNUb3VjaEV2ZW50cyhzbG90LnZhbHVlKTsKICAgICB9CiB9CkBAIC0yMTUsNyArMjE1LDcg
QEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudCh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHcKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwogCi0gICAgV2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBh
Z2UocGFnZUlEKTsKKyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkud2ViUGFnZShwYWdlSUQpOwogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwog
CkBAIC0yMjUsNyArMjI1LDcgQEAgdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxF
dmVudCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdlYldoZWVsRXZlbnQmIHcKICNpZiBFTkFCTEUo
QVNZTkNfU0NST0xMSU5HKQogdm9pZCBFdmVudERpc3BhdGNoZXI6OnNlbmREaWRSZWNlaXZlRXZl
bnQodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJFdmVudCYgZXZlbnQsIGJvb2wgZGlkSGFuZGxl
RXZlbnQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlRXZlbnQoc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KGV2ZW50LnR5cGUoKSksIGRpZEhhbmRsZUV2ZW50KSwgcGFnZUlEKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2FzdDx1
aW50MzJfdD4oZXZlbnQudHlwZSgpKSwgZGlkSGFuZGxlRXZlbnQpLCBwYWdlSUQpOwogfQogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRleCA4MGNkZTYyYzg5
OTNlOTY1NmMwYzMwZmM0NDk3NGJiMzM1NzdhM2M0Li5kZjcwMTNkMmZmNmYxYzA0NmIyMzdjZjNl
MWJlODcxNGM3NjU1N2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCkBA
IC01NywxMiArNTcsMTIgQEAgVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Vmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3RvcihXZWJQYWdlJiB3ZWJQYWdlKQogICAgICwgbV9yZW5kZXJUcmVl
U2l6ZU5vdGlmaWNhdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJlZpZXdHZXN0dXJl
R2VvbWV0cnlDb2xsZWN0b3I6OnJlbmRlclRyZWVTaXplTm90aWZpY2F0aW9uVGltZXJGaXJlZCkK
ICNlbmRpZgogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xs
ZWN0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgpLCAqdGhpcyk7
CiB9CiAKIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6On5WaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpZXdHZXN0dXJlR2VvbWV0cnlD
b2xsZWN0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV93ZWJQYWdlLnBhZ2VJRCgpKTsKIH0K
IAogdm9pZCBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpkaXNwYXRjaERpZENvbGxlY3RH
ZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoRmxvYXRQb2ludCBvcmlnaW4sIEZs
b2F0UmVjdCB0YXJnZXRSZWN0LCBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBib29sIGlz
UmVwbGFjZWRFbGVtZW50LCBkb3VibGUgdmlld3BvcnRNaW5pbXVtU2NhbGUsIGRvdWJsZSB2aWV3
cG9ydE1heGltdW1TY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCmluZGV4IDlhNDA3NzlkNTgwZjFj
YTMxMmE1NjFkYjY1ZGE5MjYyNWJjZDBlZmYuLmM5ODcwNDMzM2U2ODA1MDI1ODJmZTA4MWVlYWMy
ZTcwNjA0NmVkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcApAQCAtODQsNyArODQsNyBAQCB2b2lk
IFZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSgp
CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBzbG90IDogdXBkYXRlKSB7Ci0gICAgICAgIGlmIChX
ZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShzbG90LmtleSkp
CisgICAgICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
d2ViUGFnZShzbG90LmtleSkpCiAgICAgICAgICAgICB3ZWJQYWdlLT51cGRhdGVWaXNpYmxlQ29u
dGVudFJlY3RzKHNsb3QudmFsdWUudmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbywgc2xvdC52
YWx1ZS5vbGRlc3RUaW1lc3RhbXApOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXIuY3BwCmluZGV4IGJhMTg3MWZiNDAwNGI3MDM1MDE2OWM2MTViOGU1ZDY2NWM3MGMwN2EuLmQz
NTliMTllMDgyMWI0NTMxNjQwMTcyZDhmYWE5NTViY2I0ZWM4OTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyLmNwcApAQCAtNTksMTQgKzU5LDE0IEBAIFBhc3NSZWZQdHI8VmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0
ZSh1CiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXIodWludDY0X3QgaWRlbnRpZmllcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQog
ewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVu
dGlmaWVyLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2lkZW50aWZpZXIsICp0aGlzKTsKIH0KIAogVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXI6On5WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcigpCiB7CiAgICAgQVNTRVJUKHZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVycygpLmNvbnRhaW5zKG1faWRlbnRpZmllcikpOwogCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpW
aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50
aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVycygp
LnJlbW92ZShtX2lkZW50aWZpZXIpOwogfQpAQCAtODUsNyArODUsNyBAQCB2b2lkIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyOjphZGRWaXNpdGVkTGluayhQYWdlJiBwYWdlLCBMaW5rSGFzaCBs
aW5rSGFzaCkKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OlZpc2l0ZWRMaW5rUHJvdmlkZXI6OkFkZFZpc2l0ZWRMaW5rSGFzaEZyb21QYWdlKHdlYlBhZ2Ut
PnBhZ2VJRCgpLCBsaW5rSGFzaCksIG1faWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VmlzaXRl
ZExpbmtQcm92aWRlcjo6QWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2Uod2ViUGFnZS0+cGFnZUlE
KCksIGxpbmtIYXNoKSwgbV9pZGVudGlmaWVyKTsKIH0KIAogdm9pZCBWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcjo6c2V0VmlzaXRlZExpbmtUYWJsZShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSYgaGFuZGxlKQpAQCAtOTcsMjAgKzk3LDIwIEBAIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXI6OnNldFZpc2l0ZWRMaW5rVGFibGUoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmCiAg
ICAgbV92aXNpdGVkTGlua1RhYmxlLnNldFNoYXJlZE1lbW9yeShzaGFyZWRNZW1vcnkucmVsZWFz
ZSgpKTsKIAogICAgIGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBh
Z2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygp
OwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjp2aXNpdGVkTGlua1N0YXRl
Q2hhbmdlZChjb25zdCBWZWN0b3I8V2ViQ29yZTo6TGlua0hhc2g+JiBsaW5rSGFzaGVzKQogewog
ICAgIGZvciAoYXV0byBsaW5rSGFzaCA6IGxpbmtIYXNoZXMpCiAgICAgICAgIGludmFsaWRhdGVT
dHlsZXNGb3JMaW5rKGxpbmtIYXNoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdl
c0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigp
Lm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogdm9pZCBWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlcjo6YWxsVmlzaXRlZExpbmtTdGF0ZUNoYW5nZWQoKQogewogICAg
IGludmFsaWRhdGVTdHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
bWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lk
IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQpAQCAt
MTE4LDcgKzExOCw3IEBAIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnJlbW92ZUFs
bFZpc2l0ZWRMaW5rcygpCiAgICAgbV92aXNpdGVkTGlua1RhYmxlLmNsZWFyKCk7CiAKICAgICBp
bnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1h
cmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmds
ZXRvbigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCA3NWUyN2JhNTEw
YTJkNGE0MzY1MTkxMjQ5NTA3Y2MyNDEwNjUyMTBlLi5hOWM2Nzc5MDU2YjkyZDYwZDQ5NGI1MTU4
OWYzNGQ1MzE0NTg4Y2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTkxLDcgKzkx
LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21V
SVByb2Nlc3ModWludDY0X3QgaXRlbUlEKQogCiBzdGF0aWMgdm9pZCB1cGRhdGVCYWNrRm9yd2Fy
ZEl0ZW0odWludDY0X3QgaXRlbUlELCB1aW50NjRfdCBwYWdlSUQsIEhpc3RvcnlJdGVtKiBpdGVt
KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6QWRkQmFja0ZvcndhcmRJdGVtKGl0ZW1J
RCwgcGFnZUlELCB0b1BhZ2VTdGF0ZSgqaXRlbSkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9j
ZXNzUHJveHk6OkFkZEJhY2tGb3J3YXJkSXRlbShpdGVtSUQsIHBhZ2VJRCwgdG9QYWdlU3RhdGUo
Kml0ZW0pKSwgMCk7CiB9CiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1G
cm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1JRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5
SXRlbT4gcHJwSXRlbSwgdWludDY0X3QgcGFnZUlEKQpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogICAg
IGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUo
Kml0ZW0pOwogICAgIFdlYkNvcmU6OlBhZ2U6OmNsZWFyUHJldmlvdXNJdGVtRnJvbUFsbFBhZ2Vz
KGl0ZW0uZ2V0KCkpOwogICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnJlbW92ZShpdGVtKTsKIH0K
QEAgLTE4MSw3ICsxODEsNyBAQCBIaXN0b3J5SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6
Oml0ZW1BdEluZGV4KGludCBpdGVtSW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgdWlu
dDY0X3QgaXRlbUlEID0gMDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tG
b3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFj
a0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwgbV9wYWdlLT5wYWdlSUQoKSkpCisg
ICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0ZW1BdEluZGV4
KGl0ZW1JbmRleCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5k
ZXg6OlJlcGx5KGl0ZW1JRCksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gMDsK
IAogICAgIGlmICghaXRlbUlEKQpAQCAtMTk2LDcgKzE5Niw3IEBAIGludCBXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6YmFja0xpc3RDb3VudCgpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaW50
IGJhY2tMaXN0Q291bnQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFj
a0ZvcndhcmRCYWNrTGlzdENvdW50KCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3
YXJkQmFja0xpc3RDb3VudDo6UmVwbHkoYmFja0xpc3RDb3VudCksIG1fcGFnZS0+cGFnZUlEKCkp
KQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlz
dENvdW50KCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkQmFja0xpc3RDb3Vu
dDo6UmVwbHkoYmFja0xpc3RDb3VudCksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1
cm4gMDsKIAogICAgIHJldHVybiBiYWNrTGlzdENvdW50OwpAQCAtMjA4LDcgKzIwOCw3IEBAIGlu
dCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6Zm9yd2FyZExpc3RDb3VudCgpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgaW50IGZvcndhcmRMaXN0Q291bnQgPSAwOwotICAgIGlmICghV2ViUHJv
Y2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudDo6UmVwbHkoZm9yd2Fy
ZExpc3RDb3VudCksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50KCksIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkJhY2tGb3J3YXJkRm9yd2FyZExpc3RDb3VudDo6UmVwbHkoZm9yd2FyZExpc3RD
b3VudCksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVy
biBmb3J3YXJkTGlzdENvdW50OwpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OmNsb3NlKCkKIHsKICAgICBmb3IgKGF1dG8mIGl0ZW1JRCA6IG1fYXNzb2Np
YXRlZEl0ZW1JRHMpIHsKICAgICAgICAgaWYgKEhpc3RvcnlJdGVtKiBpdGVtID0gaXRlbUZvcklE
KGl0ZW1JRCkpCi0gICAgICAgICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92
ZSgqaXRlbSk7CisgICAgICAgICAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJl
bW92ZSgqaXRlbSk7CiAgICAgfQogCiAgICAgbV9hc3NvY2lhdGVkSXRlbUlEcy5jbGVhcigpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRN
ZW51LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVu
dS5jcHAKaW5kZXggNTgxZWMyNjczNjJkZjRlOGQ1MTkyODg0MTFkMjY2ZWFmMDgxMGM3Ny4uZTA5
NzJiNTNiNjRjM2UxYjg2NDdmNDEyZTYwMDUwMDk3OTExYWM0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCkBAIC02Nyw3
ICs2Nyw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnU6OnNob3coKQogCiAgICAgLy8gTWFyayB0aGUg
V2ViUGFnZSBoYXMgaGF2aW5nIGEgc2hvd24gY29udGV4dCBtZW51IHRoZW4gbm90aWZ5IHRoZSBV
SVByb2Nlc3MuCiAgICAgbV9wYWdlLT5jb250ZXh0TWVudVNob3dpbmcoKTsKLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRl
bnRzVG9XaW5kb3coY29udHJvbGxlci5oaXRUZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5l
ck5vZGVGcmFtZSgpKSwgY29udGV4dE1lbnVDb250ZXh0RGF0YSwgbWVudUl0ZW1zLCBVc2VyRGF0
YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6U2hvd0NvbnRleHRNZW51KHZpZXctPmNvbnRlbnRzVG9XaW5kb3coY29udHJvbGxlci5oaXRU
ZXN0UmVzdWx0KCkucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgpKSwgY29udGV4dE1lbnVD
b250ZXh0RGF0YSwgbWVudUl0ZW1zLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAog
dm9pZCBXZWJDb250ZXh0TWVudTo6aXRlbVNlbGVjdGVkKGNvbnN0IFdlYkNvbnRleHRNZW51SXRl
bURhdGEmIGl0ZW0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZy
YW1lLmNwcAppbmRleCBiMDU0NjBhOTgzNzE2ODEzOWU4YjU5N2ZjZjIyMGY1ZjRlOTY3ZTlhLi4z
ZmYwMDU3NTY5YmQ0YmUwODViMmIxZmMxODVhOGNhMjExNTAzN2E2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAgLTE1NCw3ICsxNTQsNyBA
QCBXZWJGcmFtZTo6V2ViRnJhbWUoc3RkOjp1bmlxdWVfcHRyPFdlYkZyYW1lTG9hZGVyQ2xpZW50
PiBmcmFtZUxvYWRlckNsaWVudCkKICAgICAsIG1fZnJhbWVJRChnZW5lcmF0ZUZyYW1lSUQoKSkK
IHsKICAgICBtX2ZyYW1lTG9hZGVyQ2xpZW50LT5zZXRXZWJGcmFtZSh0aGlzKTsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5hZGRXZWJGcmFtZShtX2ZyYW1lSUQsIHRoaXMpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmFkZFdlYkZyYW1lKG1fZnJhbWVJRCwgdGhpcyk7CiAKICNpZm5k
ZWYgTkRFQlVHCiAgICAgd2ViRnJhbWVDb3VudGVyLmluY3JlbWVudCgpOwpAQCAtMTkyLDcgKzE5
Miw3IEBAIFdlYkZyYW1lKiBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZShGcmFtZSYgZnJhbWUpCiAK
IHZvaWQgV2ViRnJhbWU6OmludmFsaWRhdGUoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnJlbW92ZVdlYkZyYW1lKG1fZnJhbWVJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cmVtb3ZlV2ViRnJhbWUobV9mcmFtZUlEKTsKICAgICBtX2NvcmVGcmFtZSA9IDA7CiB9CiAKQEAg
LTI1MSwxMyArMjUxLDEzIEBAIHZvaWQgV2ViRnJhbWU6OnN0YXJ0RG93bmxvYWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogICAgIG1fcG9saWN5RG93bmxvYWRJRCA9
IDA7CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpz
aGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTdGFydERvd25sb2FkKHBhZ2UoKS0+c2Vzc2lv
bklEKCksIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QpLCAwKTsKKyAgICBpZiAoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3RhcnREb3dubG9hZChwYWdl
KCktPnNlc3Npb25JRCgpLCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmRvd25s
b2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuc3RhcnREb3dubG9h
ZChwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KTsKIH0KIAogdm9pZCBXZWJGcmFtZTo6Y29udmVy
dE1haW5SZXNvdXJjZUxvYWRUb0Rvd25sb2FkKERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExvYWRl
ciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSkKQEAgLTI3MCw3ICsyNzAsNyBAQCB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFp
blJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLAog
ICAgIFJlc291cmNlTG9hZGVyKiBtYWluUmVzb3VyY2VMb2FkZXIgPSBkb2N1bWVudExvYWRlci0+
bWFpblJlc291cmNlTG9hZGVyKCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAg
IGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGlm
IChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewogICAgICAg
ICAvLyBVc2UgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIG1haW4gcmVzb3VyY2UgbG9h
ZGVyLgogICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIG1haW4gcmVzb3VyY2UgaXMg
aW4gdGhlIFdlYkNvcmUgbWVtb3J5IGNhY2hlLgogICAgICAgICB1aW50NjRfdCBtYWluUmVzb3Vy
Y2VMb2FkSWRlbnRpZmllcjsKQEAgLTI3OSwxOCArMjc5LDE4IEBAIHZvaWQgV2ViRnJhbWU6OmNv
bnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRM
b2FkZXIsCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1haW5SZXNvdXJjZUxvYWRJZGVudGlm
aWVyID0gMDsKIAotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlv
bigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpDb252ZXJ0TWFpblJlc291cmNlTG9hZFRvRG93bmxvYWQobWFpblJlc291cmNlTG9h
ZElkZW50aWZpZXIsIHBvbGljeURvd25sb2FkSUQsIHJlcXVlc3QsIHJlc3BvbnNlKSwgMCk7Cisg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNv
bnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmll
ciwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9uc2UpLCAwKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKCFtYWluUmVzb3VyY2VMb2FkZXIpIHsKICAg
ICAgICAgLy8gVGhlIG1haW4gcmVzb3VyY2UgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQuIFN0YXJ0
IGEgbmV3IGRvd25sb2FkIGluc3RlYWQuCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmRv
d25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7
CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0
RG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5jb252ZXJ0
SGFuZGxlVG9Eb3dubG9hZChwb2xpY3lEb3dubG9hZElELCBkb2N1bWVudExvYWRlci0+bWFpblJl
c291cmNlTG9hZGVyKCktPmhhbmRsZSgpLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRsZVRvRG93bmxv
YWQocG9saWN5RG93bmxvYWRJRCwgZG9jdW1lbnRMb2FkZXItPm1haW5SZXNvdXJjZUxvYWRlcigp
LT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9uc2UpOwogfQogCiBTdHJpbmcgV2ViRnJhbWU6OnNv
dXJjZSgpIGNvbnN0IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkluc3BlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViSW5zcGVjdG9yLmNwcAppbmRleCBmNDI0ZGI2ZDkzNmQ0MjMzYmZhMzIwN2MzNjBlM2M0ZTNi
NWRhMDZkLi40NTcwZjkxMzQ3Y2ZlMDU4MTM5ZTA3NThjNjIwYTkzODUwODYwOTk1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmNwcApA
QCAtOTIsMTIgKzkyLDEyIEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpjcmVhdGVJbnNwZWN0b3JQYWdl
KGJvb2wgdW5kZXJUZXN0KQogICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uID0gSVBDOjpDb25uZWN0
aW9uOjpjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKGNvbm5lY3Rpb25JZGVudGlmaWVyLCAqdGhpcywg
UnVuTG9vcDo6bWFpbigpKTsKICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+b3BlbigpOwogCi0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkNyZWF0ZUluc3BlY3RvclBhZ2UoY29ubmVjdGlv
bkNsaWVudFBvcnQsIGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6Q3JlYXRlSW5zcGVjdG9yUGFn
ZShjb25uZWN0aW9uQ2xpZW50UG9ydCwgY2FuQXR0YWNoV2luZG93KCksIHVuZGVyVGVzdCksIG1f
cGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZCgp
CiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3Bh
Z2UtPnBhZ2VJRCgpKTsKIAogICAgIG1fZnJvbnRlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7
CiAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24gPSBudWxscHRyOwpAQCAtMTA4LDcgKzEwOCw3IEBA
IHZvaWQgV2ViSW5zcGVjdG9yOjpjbG9zZUZyb250ZW5kKCkKIAogdm9pZCBXZWJJbnNwZWN0b3I6
OmJyaW5nVG9Gcm9udCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9G
cm9udCgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6QnJpbmdUb0Zyb250KCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiAvLyBDYWxsZWQgYnkg
V2ViSW5zcGVjdG9yIG1lc3NhZ2VzCkBAIC0xNzIsNyArMTcyLDcgQEAgdm9pZCBXZWJJbnNwZWN0
b3I6OnNob3dSZXNvdXJjZXMoKQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6c2hvd01haW5SZXNvdXJj
ZUZvckZyYW1lKHVpbnQ2NF90IGZyYW1lSWRlbnRpZmllcikKIHsKLSAgICBXZWJGcmFtZSogZnJh
bWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlkZW50aWZpZXIpOworICAg
IFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1l
SWRlbnRpZmllcik7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzQs
NyArMjM0LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3I6OnVwZGF0ZURvY2tpbmdBdmFpbGFiaWxpdHko
KQogCiAgICAgbV9wcmV2aW91c0NhbkF0dGFjaCA9IGNhbkF0dGFjaFdpbmRvdzsKIAotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFj
aFdpbmRvdyksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclBy
b3h5OjpBdHRhY2hBdmFpbGFiaWxpdHlDaGFuZ2VkKGNhbkF0dGFjaFdpbmRvdyksIG1fcGFnZS0+
cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb0JhY2tlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIGJvb2wgV2ViSW5zcGVj
dG9yOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQogICAgIGlmIChtX3JlbW90ZUZyb250ZW5kQ29ubmVj
dGVkKQotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlv
bigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6U2VuZE1lc3NhZ2VUb1JlbW90
ZUZyb250ZW5kKG1lc3NhZ2UpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9SZW1vdGVGcm9udGVuZChtZXNzYWdlKSwg
bV9wYWdlLT5wYWdlSUQoKSk7CiAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgIG1fZnJvbnRlbmRD
b25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6U2VuZE1lc3NhZ2VUb0Zy
b250ZW5kKG1lc3NhZ2UpLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJJbnNwZWN0b3JVSS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwCmluZGV4IDdjOWNlNmQ2ZDA0N2VmZjY5OWIxNzdi
ZTQ4NjQ1MGE5MTViNzllYWYuLjM4NzY5Y2Y5ZTkwOTAwOWZlYzExMmEzMWZmZjQ3ZDQ4MmEzMDRh
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNw
ZWN0b3JVSS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3RvclVJLmNwcApAQCAtMTExLDEyICsxMTEsMTIgQEAgdm9pZCBXZWJJbnNwZWN0b3JVSTo6
bW92ZVdpbmRvd0J5KGZsb2F0IHgsIGZsb2F0IHkpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmJy
aW5nVG9Gcm9udCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJyaW5nVG9Gcm9u
dCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3JQcm94eTo6QnJpbmdUb0Zyb250KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQog
CiB2b2lkIFdlYkluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkRpZENsb3NlKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKIAogICAgIG1fYmFja2VuZENvbm5lY3Rpb24tPmludmFsaWRhdGUoKTsKICAg
ICBtX2JhY2tlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKQEAgLTEyOSwxNSArMTI5LDE1IEBAIHZv
aWQgV2ViSW5zcGVjdG9yVUk6OnJlcXVlc3RTZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQogewog
ICAgIHN3aXRjaCAoc2lkZSkgewogICAgIGNhc2UgRG9ja1NpZGU6OlVuZG9ja2VkOgotICAgICAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50
aWZpZXIpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGV0YWNoKCksIG1f
aW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRG9j
a1NpZGU6OlJpZ2h0OgotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoUmln
aHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpBdHRhY2hSaWdodCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERvY2tTaWRlOjpCb3R0b206Ci0gICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0b20oKSwgbV9pbnNwZWN0ZWRQYWdlSWRl
bnRpZmllcik7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpBdHRhY2hCb3R0
b20oKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IH0KQEAgLTE2NywxNyArMTY3LDE3IEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldERvY2tTaWRl
KERvY2tTaWRlIHNpZGUpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OmNoYW5nZUF0dGFjaGVkV2lu
ZG93SGVpZ2h0KHVuc2lnbmVkIGhlaWdodCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6U2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93
SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdl
Ykluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQog
ewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd1dpZHRoKHdp
ZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVj
dG9yUHJveHk6OlNldEF0dGFjaGVkV2luZG93V2lkdGgod2lkdGgpLCBtX2luc3BlY3RlZFBhZ2VJ
ZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6c2V0VG9vbGJhckhlaWdodCh1
bnNpZ25lZCBoZWlnaHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFRvb2xi
YXJIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OlNldFRvb2xiYXJIZWlnaHQoaGVpZ2h0KSwgbV9pbnNwZWN0
ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6Om9wZW5Jbk5ld1Rh
Yihjb25zdCBTdHJpbmcmIHVybCkKQEAgLTE4OCwxNyArMTg4LDE3IEBAIHZvaWQgV2ViSW5zcGVj
dG9yVUk6Om9wZW5Jbk5ld1RhYihjb25zdCBTdHJpbmcmIHVybCkKIAogdm9pZCBXZWJJbnNwZWN0
b3JVSTo6c2F2ZShjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFdURjo6U3RyaW5n
JiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGJvb2wgZm9yY2VTYXZlQXMpCiB7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVu
Y29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNhdmUoZmlsZW5hbWUsIGNvbnRlbnQsIGJhc2U2NEVu
Y29kZWQsIGZvcmNlU2F2ZUFzKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZv
aWQgV2ViSW5zcGVjdG9yVUk6OmFwcGVuZChjb25zdCBXVEY6OlN0cmluZyYgZmlsZW5hbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBjb250ZW50KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5
OjpBcHBlbmQoZmlsZW5hbWUsIGNvbnRlbnQpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsK
KyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVuYW1lLCBjb250ZW50
KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6
Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwgbV9p
bnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6
Okluc3BlY3RlZFVSTENoYW5nZWQodXJsU3RyaW5nKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmll
cik7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNob3dDb25zb2xlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCBkODZkNzI2NmM4MzIz
MWI4MWI3YTJmZGMxN2NmZTdjMWJiMjY3ZDk4Li5lMjg2ZGQ3ZDJmYzM0YjZmYjkwNDE0ZWUxNGYz
Y2E0MDkwMDEwZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCkBAIC0yNDAsOCArMjQwLDggQEAgUGFzc1JlZlB0cjxXZWJQYWdlPiBXZWJQYWdl
OjpjcmVhdGUodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWUKIHsK
ICAgICBSZWZQdHI8V2ViUGFnZT4gcGFnZSA9IGFkb3B0UmVmKG5ldyBXZWJQYWdlKHBhZ2VJRCwg
cGFyYW1ldGVycykpOwogCi0gICAgaWYgKHBhZ2UtPnBhZ2VHcm91cCgpLT5pc1Zpc2libGVUb0lu
amVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKSkK
LSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+ZGlkQ3JlYXRl
UGFnZShwYWdlLmdldCgpKTsKKyAgICBpZiAocGFnZS0+cGFnZUdyb3VwKCktPmlzVmlzaWJsZVRv
SW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRs
ZSgpKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5k
aWRDcmVhdGVQYWdlKHBhZ2UuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHBhZ2UucmVsZWFzZSgpOwog
fQpAQCAtMzQ3LDcgKzM0Nyw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBj
b25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIC8vIDRtcyBz
aG91bGQgYmUgYWRvcHRlZCBwcm9qZWN0LXdpZGUgbm93LCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjEyMTQKICAgICBTZXR0aW5nczo6c2V0RGVmYXVsdE1pbkRPTVRp
bWVySW50ZXJ2YWwoMC4wMDQpOwogCi0gICAgbV9wYWdlR3JvdXAgPSBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS53ZWJQYWdlR3JvdXAocGFyYW1ldGVycy5wYWdlR3JvdXBEYXRhKTsKKyAgICBtX3BhZ2VH
cm91cCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2VHcm91cChwYXJhbWV0ZXJzLnBh
Z2VHcm91cERhdGEpOwogCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIFNldHRpbmdzOjpzZXRTaG91
bGRNYW5hZ2VBdWRpb1Nlc3Npb25DYXRlZ29yeSh0cnVlKTsKQEAgLTQ3NCwxNiArNDc0LDE2IEBA
IFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25Q
YXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIC8vIFdlIHVzZSB0aGUgRGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0IG1pbGVzdG9uZSB0byBkZXRlcm1pbmUgd2hlbiB0byB1bmZyZWV6ZSB0
aGUgbGF5ZXIgdHJlZS4KICAgICBtX3BhZ2UtPmFkZExheW91dE1pbGVzdG9uZXMoRGlkRmlyc3RM
YXlvdXQgfCBEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQpOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQYWdlOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQYWdlOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgZG9uZSBpbiB0aGUgb2JqZWN0IGNvbnN0cnVjdG9ycywgYW5kIHRoZSBvYmplY3RzIHRoZW1z
ZWx2ZXMgc2hvdWxkIGJlIG1lc3NhZ2UgcmVjZWl2ZXJzLgogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19NVUxUSVBST0NFU1MpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpDb29yZGluYXRlZExheWVyVHJlZUhvc3Q6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9wYWdlSUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwogI2VuZGlmCi0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0
b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQsICp0aGlzKTsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclVJ
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CiAjaWYgRU5BQkxFKEZV
TExTQ1JFRU5fQVBJKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZl
cihNZXNzYWdlczo6V2ViRnVsbFNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
bV9wYWdlSUQsICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CiAjZW5kaWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTQ5
Miw3ICs0OTIsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2Vi
UGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKIAogI2lmIEVOQUJMRShBU1lOQ19T
Q1JPTExJTkcpCiAgICAgaWYgKG1fdXNlQXN5bmNTY3JvbGxpbmcpCi0gICAgICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigpLmFkZFNjcm9sbGluZ1RyZWVGb3JQYWdlKHRo
aXMpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5ldmVudERpc3BhdGNoZXIoKS5h
ZGRTY3JvbGxpbmdUcmVlRm9yUGFnZSh0aGlzKTsKICNlbmRpZgogCiAgICAgZm9yIChhdXRvJiBt
aW1lVHlwZSA6IHBhcmFtZXRlcnMubWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMp
CkBAIC01MDAsNyArNTAwLDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNv
bnN0IFdlYlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAKIAogI2lmIEVOQUJM
RShFTkNSWVBURURfTUVESUFfVjIpCi0gICAgaWYgKFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIq
IG1hbmFnZXIgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYk1lZGlhS2V5U3Rv
cmFnZU1hbmFnZXI+KCkpCisgICAgaWYgKFdlYk1lZGlhS2V5U3RvcmFnZU1hbmFnZXIqIG1hbmFn
ZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk1lZGlhS2V5U3RvcmFn
ZU1hbmFnZXI+KCkpCiAgICAgICAgIG1fcGFnZS0+c2V0dGluZ3MoKS5zZXRNZWRpYUtleXNTdG9y
YWdlRGlyZWN0b3J5KG1hbmFnZXItPm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeSgpKTsKICNlbmRp
ZgogfQpAQCAtNTQxLDcgKzU0MSw3IEBAIFdlYlBhZ2U6On5XZWJQYWdlKCkKIAogI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCiAgICAgaWYgKG1fdXNlQXN5bmNTY3JvbGxpbmcpCi0gICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigpLnJlbW92ZVNjcm9sbGluZ1Ry
ZWVGb3JQYWdlKHRoaXMpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5ldmVudERp
c3BhdGNoZXIoKS5yZW1vdmVTY3JvbGxpbmdUcmVlRm9yUGFnZSh0aGlzKTsKICNlbmRpZgogCiAg
ICAgcGxhdGZvcm1EZXRhY2goKTsKQEAgLTU1OCwxNiArNTU4LDE2IEBAIFdlYlBhZ2U6On5XZWJQ
YWdlKCkKICAgICAgICAgbV9mb290ZXJCYW5uZXItPmRldGFjaEZyb21QYWdlKCk7CiAjZW5kaWYg
Ly8gIVBMQVRGT1JNKElPUykKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3Bh
Z2VJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpXZWJQYWdlOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKIAog
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBkb25lIGluIHRoZSBvYmplY3QgZGVzdHJ1Y3Rv
cnMsIGFuZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHNob3VsZCBiZSBtZXNzYWdlIHJlY2VpdmVy
cy4KICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNv
b3JkaW5hdGVkTGF5ZXJUcmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7
CiAjZW5kaWYKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JVSTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5z
cGVjdG9yVUk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQpOwogI2lmIEVOQUJMRShG
VUxMU0NSRUVOX0FQSSkKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1fcGFnZUlEKTsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTgxLDcgKzU4
MSw3IEBAIHZvaWQgV2ViUGFnZTo6ZHVtbXkoYm9vbCYpCiAKIElQQzo6Q29ubmVjdGlvbiogV2Vi
UGFnZTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIHJldHVybiBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpOwogfQogCiB1aW50NjRf
dCBXZWJQYWdlOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpCkBAIC05NzQsOCArOTc0LDgg
QEAgdm9pZCBXZWJQYWdlOjpjbG9zZSgpCiAgICAgaWYgKCFtYWluV2ViRnJhbWUoKS0+dXJsKCku
aXNFbXB0eSgpKQogICAgICAgICByZXBvcnRVc2VkRmVhdHVyZXMoKTsKIAotICAgIGlmIChwYWdl
R3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmluamVjdGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVj
dGVkQnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlzKTsKKyAgICBpZiAocGFnZUdyb3VwKCkt
PmlzVmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5p
bmplY3RlZEJ1bmRsZSgpKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3Rl
ZEJ1bmRsZSgpLT53aWxsRGVzdHJveVBhZ2UodGhpcyk7CiAKICAgICBpZiAobV9pbnNwZWN0b3Ip
IHsKICAgICAgICAgbV9pbnNwZWN0b3ItPmRpc2Nvbm5lY3RGcm9tUGFnZSgpOwpAQCAtMTAzOSw3
ICsxMDM5LDcgQEAgdm9pZCBXZWJQYWdlOjpjbG9zZSgpCiAgICAgbV9pc1J1bm5pbmdNb2RhbCA9
IGZhbHNlOwogCiAgICAgLy8gVGhlIFdlYlBhZ2UgY2FuIGJlIGRlc3Ryb3llZCBieSB0aGlzIGNh
bGwuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlV2ViUGFnZShtX3BhZ2VJRCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlV2ViUGFnZShtX3BhZ2VJRCk7CiAKICAg
ICBpZiAoaXNSdW5uaW5nTW9kYWwpCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5zdG9wKCk7CkBA
IC0xMDY0LDcgKzEwNjQsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDbG9zZSgpCiAKIHZvaWQgV2Vi
UGFnZTo6bG9hZFVSTEluRnJhbWUoY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGZyYW1lSUQp
CiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUo
ZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
d2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xMDgxLDcgKzEwODEsNyBAQCB2b2lkIFdlYlBhZ2U6OmxvYWRSZXF1ZXN0KHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAogCiAgICAgLy8gTGV0
IHRoZSBJbmplY3RlZEJ1bmRsZSBrbm93IHdlIGFyZSBhYm91dCB0byBzdGFydCB0aGUgbG9hZCwg
cGFzc2luZyB0aGUgdXNlciBkYXRhIGZyb20gdGhlIFVJUHJvY2VzcwogICAgIC8vIHRvIGFsbCB0
aGUgY2xpZW50IHRvIHNldCB1cCBhbnkgbmVlZGVkIHN0YXRlLgotICAgIG1fbG9hZGVyQ2xpZW50
LndpbGxMb2FkVVJMUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAg
bV9sb2FkZXJDbGllbnQud2lsbExvYWRVUkxSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0
KCkpLmdldCgpKTsKIAogICAgIC8vIEluaXRhdGUgdGhlIGxvYWQgaW4gV2ViQ29yZS4KICAgICBj
b3JlUGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5sb2FkUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0
KG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgcmVxdWVzdCkpOwpAQCAtMTEwMCw3ICsxMTAwLDcg
QEAgdm9pZCBXZWJQYWdlOjpsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdhdGlvbklELCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmUKIAogICAgIC8vIExldCB0aGUgSW5qZWN0ZWRCdW5k
bGUga25vdyB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgdGhlIGxvYWQsIHBhc3NpbmcgdGhlIHVzZXIg
ZGF0YSBmcm9tIHRoZSBVSVByb2Nlc3MKICAgICAvLyB0byBhbGwgdGhlIGNsaWVudCB0byBzZXQg
dXAgYW55IG5lZWRlZCBzdGF0ZS4KLSAgICBtX2xvYWRlckNsaWVudC53aWxsTG9hZERhdGFSZXF1
ZXN0KHRoaXMsIHJlcXVlc3QsIGNvbnN0X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oc3Vic3RpdHV0ZURh
dGEuY29udGVudCgpKSwgc3Vic3RpdHV0ZURhdGEubWltZVR5cGUoKSwgc3Vic3RpdHV0ZURhdGEu
dGV4dEVuY29kaW5nKCksIHN1YnN0aXR1dGVEYXRhLmZhaWxpbmdVUkwoKSwgV2ViUHJvY2Vzczo6
c2hhcmVkKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0
KCkpOworICAgIG1fbG9hZGVyQ2xpZW50LndpbGxMb2FkRGF0YVJlcXVlc3QodGhpcywgcmVxdWVz
dCwgY29uc3RfY2FzdDxTaGFyZWRCdWZmZXIqPihzdWJzdGl0dXRlRGF0YS5jb250ZW50KCkpLCBz
dWJzdGl0dXRlRGF0YS5taW1lVHlwZSgpLCBzdWJzdGl0dXRlRGF0YS50ZXh0RW5jb2RpbmcoKSwg
c3Vic3RpdHV0ZURhdGEuZmFpbGluZ1VSTCgpLCBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFu
c2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKICAgICAv
LyBJbml0YXRlIHRoZSBsb2FkIGluIFdlYkNvcmUuCiAgICAgbV9tYWluRnJhbWUtPmNvcmVGcmFt
ZSgpLT5sb2FkZXIoKS5sb2FkKEZyYW1lTG9hZFJlcXVlc3QobV9tYWluRnJhbWUtPmNvcmVGcmFt
ZSgpLCByZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSkpOwpAQCAtMTE2Miw3ICsxMTYyLDcgQEAgdm9p
ZCBXZWJQYWdlOjpuYXZpZ2F0ZVRvVVJMV2l0aFNpbXVsYXRlZENsaWNrKGNvbnN0IFN0cmluZyYg
dXJsLCBJbnRQb2ludCBkb2N1bWUKIAogdm9pZCBXZWJQYWdlOjpzdG9wTG9hZGluZ0ZyYW1lKHVp
bnQ2NF90IGZyYW1lSUQpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hh
cmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0xNjE2LDExICsxNjE2LDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0R2Fw
QmV0d2VlblBhZ2VzKGRvdWJsZSBnYXApCiAKIHZvaWQgV2ViUGFnZTo6cG9zdEluamVjdGVkQnVu
ZGxlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgdXNl
ckRhdGEpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vz
czo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKTsKKyAgICBJbmplY3RlZEJ1bmRsZSogaW5qZWN0
ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpOwogICAg
IGlmICghaW5qZWN0ZWRCdW5kbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGluamVjdGVkQnVu
ZGxlLT5kaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgV2ViUHJvY2Vz
czo6c2hhcmVkKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSku
Z2V0KCkpOworICAgIGluamVjdGVkQnVuZGxlLT5kaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSh0aGlz
LCBtZXNzYWdlTmFtZSwgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtSGFuZGxlc1Rv
T2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOwogfQogCiAjaWYgIVBMQVRGT1JNKElP
UykKQEAgLTIxNTQsNyArMjE1NCw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlzcGF0Y2hUb3VjaEV2ZW50
KGNvbnN0IFdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIGJvb2wmIGhhbmRsZWQpCiB2b2lkIFdl
YlBhZ2U6OnRvdWNoRXZlbnRTeW5jKGNvbnN0IFdlYlRvdWNoRXZlbnQmIHRvdWNoRXZlbnQsIGJv
b2wmIGhhbmRsZWQpCiB7CiAgICAgRXZlbnREaXNwYXRjaGVyOjpUb3VjaEV2ZW50UXVldWUgcXVl
dWVkRXZlbnRzOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigpLmdl
dFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSgqdGhpcywgcXVldWVkRXZlbnRzKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5ldmVudERpc3BhdGNoZXIoKS5nZXRRdWV1ZWRUb3VjaEV2ZW50
c0ZvclBhZ2UoKnRoaXMsIHF1ZXVlZEV2ZW50cyk7CiAgICAgZGlzcGF0Y2hBc3luY2hyb25vdXNU
b3VjaEV2ZW50cyhxdWV1ZWRFdmVudHMpOwogCiAgICAgZGlzcGF0Y2hUb3VjaEV2ZW50KHRvdWNo
RXZlbnQsIGhhbmRsZWQpOwpAQCAtMjMzMSw3ICsyMzMxLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRh
dGVJc0luV2luZG93KGJvb2wgaXNJbml0aWFsU3RhdGUpCiAgICAgICAgIAogICAgICAgICAvLyBU
aGUgV2ViUHJvY2VzcyBkb2VzIG5vdCB5ZXQga25vdyBhYm91dCB0aGlzIHBhZ2U7IG5vIG5lZWQg
dG8gdGVsbCBpdCB3ZSdyZSBsZWF2aW5nIHRoZSB3aW5kb3cuCiAgICAgICAgIGlmICghaXNJbml0
aWFsU3RhdGUpCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYWdlV2lsbExlYXZl
V2luZG93KG1fcGFnZUlEKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
Z2VXaWxsTGVhdmVXaW5kb3cobV9wYWdlSUQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERl
ZmVyIHRoZSBjYWxsIHRvIFBhZ2U6OnNldENhblN0YXJ0TWVkaWEoKSBzaW5jZSBpdCBlbmRzIHVw
IHNlbmRpbmcgYSBzeW5jaHJvbm91cyBtZXNzYWdlIHRvIHRoZSBVSSBwcm9jZXNzCiAgICAgICAg
IC8vIGluIG9yZGVyIHRvIGdldCBwbHVnLWluIGNvbm5lY3Rpb25zLCBhbmQgdGhlIFVJIHByb2Nl
c3Mgd2lsbCBiZSB3YWl0aW5nIGZvciB0aGUgV2ViIHByb2Nlc3MgdG8gdXBkYXRlIHRoZSBiYWNr
aW5nCkBAIC0yMzM5LDcgKzIzMzksNyBAQCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZUlzSW5XaW5kb3co
Ym9vbCBpc0luaXRpYWxTdGF0ZSkKICAgICAgICAgaWYgKG1fbWF5U3RhcnRNZWRpYVdoZW5Jbldp
bmRvdykKICAgICAgICAgICAgIG1fc2V0Q2FuU3RhcnRNZWRpYVRpbWVyLnN0YXJ0T25lU2hvdCgw
KTsKIAotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYWdlRGlkRW50ZXJXaW5kb3cobV9w
YWdlSUQpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYWdlRGlkRW50ZXJXaW5k
b3cobV9wYWdlSUQpOwogICAgIH0KIAogICAgIGlmIChpc0luV2luZG93KQpAQCAtMjM3NywxMyAr
MjM3NywxMyBAQCB2b2lkIFdlYlBhZ2U6OnNldExheWVySG9zdGluZ01vZGUodW5zaWduZWQgbGF5
ZXJIb3N0aW5nTW9kZSkKIHZvaWQgV2ViUGFnZTo6c2V0U2Vzc2lvbklEKFNlc3Npb25JRCBzZXNz
aW9uSUQpCiB7CiAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5lbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKHNlc3Npb25JRCk7
CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZVByaXZhdGVCcm93c2luZ1Nl
c3Npb24oc2Vzc2lvbklEKTsKICAgICBtX3BhZ2UtPnNldFNlc3Npb25JRChzZXNzaW9uSUQpOwog
fQogCiB2b2lkIFdlYlBhZ2U6OmRpZFJlY2VpdmVQb2xpY3lEZWNpc2lvbih1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCBsaXN0ZW5lcklELCB1aW50MzJfdCBwb2xpY3lBY3Rpb24sIHVpbnQ2NF90
IG5hdmlnYXRpb25JRCwgdWludDY0X3QgZG93bmxvYWRJRCkKIHsKLSAgICBXZWJGcmFtZSogZnJh
bWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBXZWJGcmFt
ZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsKICAg
ICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAgICAgZnJhbWUtPmRpZFJlY2VpdmVQb2xp
Y3lEZWNpc2lvbihsaXN0ZW5lcklELCBzdGF0aWNfY2FzdDxQb2xpY3lBY3Rpb24+KHBvbGljeUFj
dGlvbiksIG5hdmlnYXRpb25JRCwgZG93bmxvYWRJRCk7CkBAIC0yNDk1LDcgKzI0OTUsNyBAQCBJ
bnRSZWN0IFdlYlBhZ2U6OndpbmRvd1Jlc2l6ZXJSZWN0KCkgY29uc3QKIAogS2V5Ym9hcmRVSU1v
ZGUgV2ViUGFnZTo6a2V5Ym9hcmRVSU1vZGUoKQogewotICAgIGJvb2wgZnVsbEtleWJvYXJkQWNj
ZXNzRW5hYmxlZCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLmZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJs
ZWQoKTsKKyAgICBib29sIGZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5mdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkKCk7CiAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEtleWJvYXJkVUlNb2RlPigoZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxlZCA/IEtleWJv
YXJkQWNjZXNzRnVsbCA6IEtleWJvYXJkQWNjZXNzRGVmYXVsdCkgfCAobV90YWJUb0xpbmtzID8g
S2V5Ym9hcmRBY2Nlc3NUYWJzVG9MaW5rcyA6IDApKTsKIH0KIApAQCAtMjU4MSw3ICsyNTgxLDcg
QEAgdm9pZCBXZWJQYWdlOjpnZXRTZWxlY3Rpb25PckNvbnRlbnRzQXNTdHJpbmcodWludDY0X3Qg
Y2FsbGJhY2tJRCkKIHZvaWQgV2ViUGFnZTo6Z2V0U291cmNlRm9yRnJhbWUodWludDY0X3QgZnJh
bWVJRCwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwot
ICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShm
cmFtZUlEKSkKKyAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkud2ViRnJhbWUoZnJhbWVJRCkpCiAgICAgICAgcmVzdWx0U3RyaW5nID0gZnJhbWUtPnNvdXJj
ZSgpOwogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdHJpbmdDYWxsYmFjayhy
ZXN1bHRTdHJpbmcsIGNhbGxiYWNrSUQpKTsKQEAgLTI1OTAsNyArMjU5MCw3IEBAIHZvaWQgV2Vi
UGFnZTo6Z2V0U291cmNlRm9yRnJhbWUodWludDY0X3QgZnJhbWVJRCwgdWludDY0X3QgY2FsbGJh
Y2tJRCkKIHZvaWQgV2ViUGFnZTo6Z2V0TWFpblJlc291cmNlRGF0YU9mRnJhbWUodWludDY0X3Qg
ZnJhbWVJRCwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXI7Ci0gICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgp
LndlYkZyYW1lKGZyYW1lSUQpKSB7CisgICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpKSB7CiAgICAgICAgIGlmIChQbHVnaW5W
aWV3KiBwbHVnaW5WaWV3ID0gcGx1Z2luVmlld0ZvckZyYW1lKGZyYW1lLT5jb3JlRnJhbWUoKSkp
CiAgICAgICAgICAgICBidWZmZXIgPSBwbHVnaW5WaWV3LT5saXZlUmVzb3VyY2VEYXRhKCk7CiAg
ICAgICAgIGlmICghYnVmZmVyKSB7CkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRCdWZmZXI+IHJlc291cmNlRGF0YUZvckZyYW1lKEZyYW1lKiBmcmFtZSwgY29u
c3QgVVJMJiByZQogdm9pZCBXZWJQYWdlOjpnZXRSZXNvdXJjZURhdGFGcm9tRnJhbWUodWludDY0
X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiByZXNvdXJjZVVSTFN0cmluZywgdWludDY0X3QgY2Fs
bGJhY2tJRCkKIHsKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7Ci0gICAgaWYgKFdl
YkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpKSB7
CisgICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZy
YW1lKGZyYW1lSUQpKSB7CiAgICAgICAgIFVSTCByZXNvdXJjZVVSTChVUkwoKSwgcmVzb3VyY2VV
UkxTdHJpbmcpOwogICAgICAgICBidWZmZXIgPSByZXNvdXJjZURhdGFGb3JGcmFtZShmcmFtZS0+
Y29yZUZyYW1lKCksIHJlc291cmNlVVJMKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsKQEAgLTI2
NDIsNyArMjY0Miw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0V2ViQXJjaGl2ZU9mRnJhbWUodWludDY0
X3QgZnJhbWVJRCwgdWludDY0X3QgY2FsbGJhY2tJRCkKIHsKICNpZiBQTEFURk9STShDT0NPQSkK
ICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhOwotICAgIGlmIChXZWJGcmFtZSogZnJhbWUg
PSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKSkKKyAgICBpZiAoV2ViRnJh
bWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCkpCiAg
ICAgICAgIGRhdGEgPSBmcmFtZS0+d2ViQXJjaGl2ZURhdGEobnVsbHB0ciwgbnVsbHB0cik7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZUlEKTsKQEAgLTM3NjgsNyArMzc2OCw3IEBAIFJl
dGFpblB0cjxQREZEb2N1bWVudD4gV2ViUGFnZTo6cGRmRG9jdW1lbnRGb3JQcmludGluZ0ZyYW1l
KEZyYW1lKiBjb3JlRnJhbWUpCiAKIHZvaWQgV2ViUGFnZTo6YmVnaW5QcmludGluZyh1aW50NjRf
dCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbykKIHsKLSAgICBXZWJGcmFtZSog
ZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsK
ICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTM4MzMsNyArMzgzMyw3IEBA
IHZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdJbXBsKHVpbnQ2NF90IGZyYW1l
SUQsIGNvbnN0IFByaW50SW5mbyYgcHJpCiAjaWYgUExBVEZPUk0oQ09DT0EpCiB2b2lkIFdlYlBh
Z2U6OmRyYXdSZWN0VG9JbWFnZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHBy
aW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW1h
Z2VTaXplLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdl
YlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFt
ZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIEZyYW1l
KiBjb3JlRnJhbWUgPSBmcmFtZSA/IGZyYW1lLT5jb3JlRnJhbWUoKSA6IDA7CiAKICAgICBSZWZQ
dHI8V2ViSW1hZ2U+IGltYWdlOwpAQCAtMzg4NSw3ICszODg1LDcgQEAgdm9pZCBXZWJQYWdlOjpk
cmF3UGFnZXNUb1BERih1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5m
bywgdWludDMKIAogdm9pZCBXZWJQYWdlOjpkcmF3UGFnZXNUb1BERkltcGwodWludDY0X3QgZnJh
bWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmludEluZm8sIHVpbnQzMl90IGZpcnN0LCB1aW50MzJf
dCBjb3VudCwgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+JiBwZGZQYWdlRGF0YSkKIHsKLSAg
ICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlE
KTsKKyAgICBXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFt
ZShmcmFtZUlEKTsKICAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUgPyBmcmFtZS0+Y29yZUZy
YW1lKCkgOiAwOwogCiAgICAgcGRmUGFnZURhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoMCwgMCkpOwpAQCAtNDU0OSw3ICs0NTQ5LDcgQEAgdm9pZCBXZWJQYWdlOjpkaWRDb21taXRM
b2FkKFdlYkZyYW1lKiBmcmFtZSkKICAgICBjYW5jZWxQb3RlbnRpYWxUYXAoKTsKIAogI2lmIEVO
QUJMRShJT1NfVE9VQ0hfRVZFTlRTKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlz
cGF0Y2hlcigpLmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlzKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5ldmVudERpc3BhdGNoZXIoKS5jbGVhclF1ZXVlZFRvdWNoRXZl
bnRzRm9yUGFnZSgqdGhpcyk7CiAjZW5kaWYKIAogICAgIHJlc2V0Vmlld3BvcnREZWZhdWx0Q29u
ZmlndXJhdGlvbihmcmFtZSk7CkBAIC00NTYzLDcgKzQ1NjMsNyBAQCB2b2lkIFdlYlBhZ2U6OmRp
ZENvbW1pdExvYWQoV2ViRnJhbWUqIGZyYW1lKQogICAgIHJlc2V0UHJpbWFyeVNuYXBzaG90dGVk
UGx1Z0luKCk7CiAjZW5kaWYKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVwZGF0ZUFjdGl2
ZVBhZ2VzKCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudXBkYXRlQWN0aXZlUGFnZXMo
KTsKIAogICAgIHVwZGF0ZU1haW5GcmFtZVNjcm9sbE9mZnNldFBpbm5pbmcoKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuY3BwCmluZGV4IDY0MDUyZWM5MzRlZjU5MDA2OGM1MTk5ZDJjZGZlYzQ3MDZhZmU3MzUuLmVl
MjIzNWEyOGNlZmJmMjQ0MDFmMjdkYTkyYzkxZjlkNTYwMzE0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcApA
QCAtMzgsOCArMzgsOCBAQCBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiBXZWJQYWdlR3Jv
dXBQcm94eTo6Y3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmCiB7CiAgICAgUmVmUHRyPFdl
YlBhZ2VHcm91cFByb3h5PiBwYWdlR3JvdXAgPSBhZG9wdFJlZihuZXcgV2ViUGFnZUdyb3VwUHJv
eHkoZGF0YSkpOwogICAgIAotICAgIGlmIChwYWdlR3JvdXAtPmlzVmlzaWJsZVRvSW5qZWN0ZWRC
dW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpKQotICAgICAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5kaWRJbml0aWFsaXplUGFn
ZUdyb3VwKHBhZ2VHcm91cC5nZXQoKSk7CisgICAgaWYgKHBhZ2VHcm91cC0+aXNWaXNpYmxlVG9J
bmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxl
KCkpCisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPmRp
ZEluaXRpYWxpemVQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKIAogICAgIHJldHVybiBwYWdl
R3JvdXAucmVsZWFzZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcAppbmRleCBjM2UzNjRiNjRlODJmMDJi
NTQ5YTllZGUxOTM0OTg3YTIwNTAzOTVlLi45YjM5YWY3MjQ0NmJjOWRiZTMyZjdmZTRjMGQyY2Vh
NzRkNzVlN2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1ByaW50ZXJMaXN0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcApAQCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogUHJpbnRlckxpc3RHdGsqIFByaW50ZXJMaXN0R3RrOjpzX3NoYXJlZFByaW50
ZXJMaXN0ID0gbnVsbHB0cjsKIAotUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBQcmludGVyTGlzdEd0
azo6c2hhcmVkKCkKK1JlZlB0cjxQcmludGVyTGlzdEd0az4gUHJpbnRlckxpc3RHdGs6OnNpbmds
ZXRvbigpCiB7CiAgICAgaWYgKHNfc2hhcmVkUHJpbnRlckxpc3QpCiAgICAgICAgIHJldHVybiBz
X3NoYXJlZFByaW50ZXJMaXN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5oCmluZGV4IDVhNDY2ZjQ3ZDEwMGI0OWMwZWU1
YWE1OWQyNTg4ODg4NWU5MWZkYTEuLmZhYmE4MmNlZjc5OWFmNDFiMzYwMjU4M2M1MmVjYzcwZDU2
YTAwMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsv
UHJpbnRlckxpc3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Z3RrL1ByaW50ZXJMaXN0R3RrLmgKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGNsYXNzIFByaW50ZXJMaXN0R3RrOiBwdWJsaWMgUmVmQ291bnRlZDxQcmludGVyTGlzdEd0
az4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8UHJpbnRlckxpc3RHdGs+IHNoYXJlZCgp
OworICAgIHN0YXRpYyBSZWZQdHI8UHJpbnRlckxpc3RHdGs+IHNpbmdsZXRvbigpOwogICAgIH5Q
cmludGVyTGlzdEd0aygpOwogCiAgICAgR3RrUHJpbnRlciogZmluZFByaW50ZXIoY29uc3QgY2hh
ciopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2d0ay9XZWJQcmludE9wZXJhdGlvbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAppbmRleCAyMzMyNmI0MGM1N2Zl
ZTkzMTRiNTU4YjQ3YmRkOThhNDIxOTMwMGZlLi45ODU5Mjk4ZWYzODg1MzFhNjM3ODVkN2M2YjNj
MGI0NzUzYTZjOTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcApAQCAtNjcsNyArNjcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHJpbnRDb250ZXh0ID0gcHJpbnRDb250ZXh0OwogICAg
ICAgICBtX2NhbGxiYWNrSUQgPSBjYWxsYmFja0lEOwogCi0gICAgICAgIFJlZlB0cjxQcmludGVy
TGlzdEd0az4gcHJpbnRlckxpc3QgPSBQcmludGVyTGlzdEd0azo6c2hhcmVkKCk7CisgICAgICAg
IFJlZlB0cjxQcmludGVyTGlzdEd0az4gcHJpbnRlckxpc3QgPSBQcmludGVyTGlzdEd0azo6c2lu
Z2xldG9uKCk7CiAgICAgICAgIGNvbnN0IGNoYXIqIHByaW50ZXJOYW1lID0gZ3RrX3ByaW50X3Nl
dHRpbmdzX2dldF9wcmludGVyKG1fcHJpbnRTZXR0aW5ncy5nZXQoKSk7CiAgICAgICAgIEd0a1By
aW50ZXIqIHByaW50ZXIgPSBwcmludGVyTmFtZSA/IHByaW50ZXJMaXN0LT5maW5kUHJpbnRlcihw
cmludGVyTmFtZSkgOiBwcmludGVyTGlzdC0+ZGVmYXVsdFByaW50ZXIoKTsKICAgICAgICAgaWYg
KCFwcmludGVyKSB7CkBAIC0xNDksMTMgKzE0OSwxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgcHJpbnRKb2JGaW5pc2hlZChXZWJQcmludE9wZXJhdGlvbkd0a1VuaXgqIHByaW50T3BlcmF0
aW9uKQogICAgIHsKICAgICAgICAgcHJpbnRPcGVyYXRpb24tPmRlcmVmKCk7Ci0gICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmVuYWJsZVRlcm1pbmF0aW9uKCk7CisgICAgICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuYWJsZVRlcm1pbmF0aW9uKCk7CiAgICAgfQogCiAgICAgdm9pZCBl
bmRQcmludCgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICAvLyBEaXNhYmxlIHdlYiBwcm9jZXNz
IHRlcm1pbmF0aW9uIHVudGlsIHRoZSBwcmludCBqb2IgZmluaXNoZXMuCi0gICAgICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmRpc2FibGVUZXJtaW5hdGlvbigpOworICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5kaXNhYmxlVGVybWluYXRpb24oKTsKIAogICAgICAgICBjYWlyb19zdXJm
YWNlX2ZpbmlzaChndGtfcHJpbnRfam9iX2dldF9zdXJmYWNlKG1fcHJpbnRKb2IuZ2V0KCksIDAp
KTsKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBvcGVyYXRpb24gaXMgYWxpdmUgdW50aWwgdGhl
IGpvYiBpcyBzZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGE4OTViYzVkNjk0Njc4YzBjMDQ0ZjgxN2Y2MTMyMjBl
Mzk2ZTdjNGIuLmI5ODc5YWJiN2E0MzU0ZDVlNGRkNmEyYWY3YWJkOWUwZTA1YmI0ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTI4MSw3ICsyODEsNyBAQCBib29sIFdlYlBhZ2U6OmhhbmRsZUVkaXRpbmdLZXlib2Fy
ZEV2ZW50KEtleWJvYXJkRXZlbnQqIGV2ZW50KQogCiAgICAgLy8gRklYTUU6IEludGVycHJldCB0
aGUgZXZlbnQgaW1tZWRpYXRlbHkgdXBvbiByZWNlaXZpbmcgaXQgaW4gVUkgcHJvY2Vzcywgd2l0
aG91dCBzZW5kaW5nIHRvIFdlYlByb2Nlc3MgZmlyc3QuCiAgICAgYm9vbCBldmVudFdhc0hhbmRs
ZWQgPSBmYWxzZTsKLSAgICBib29sIHNlbmRSZXN1bHQgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpJbnRlcnByZXRLZXlFdmVudChlZGl0b3JTdGF0ZSgpLCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkg
PT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSwKKyAgICBib29sIHNlbmRSZXN1bHQgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3lu
YyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRLZXlFdmVudChlZGl0b3JTdGF0ZSgp
LCBwbGF0Zm9ybUV2ZW50LT50eXBlKCkgPT0gUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpDaGFyKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpJbnRlcnByZXRL
ZXlFdmVudDo6UmVwbHkoZXZlbnRXYXNIYW5kbGVkKSwgbV9wYWdlSUQpOwogICAgIGlmICghc2Vu
ZFJlc3VsdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjI3Nyw3ICsyMjc3LDcgQEAgdm9p
ZCBXZWJQYWdlOjplbGVtZW50RGlkRm9jdXMoV2ViQ29yZTo6Tm9kZSogbm9kZSkKICAgICAgICAg
aWYgKG1fdXNlcklzSW50ZXJhY3RpbmcpCiAgICAgICAgICAgICBtX2Zvcm1DbGllbnQtPndpbGxC
ZWdpbklucHV0U2Vzc2lvbih0aGlzLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgV2ViRnJhbWU6
OmZyb21Db3JlRnJhbWUoKm5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKSksIHVzZXJEYXRhKTsKIAot
ICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0QXNzaXN0aW5nTm9kZShp
bmZvcm1hdGlvbiwgbV91c2VySXNJbnRlcmFjdGluZywgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNh
dGlvbiwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U3RhcnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0aW9uLCBtX3VzZXJJc0ludGVy
YWN0aW5nLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBVc2VyRGF0YShXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5n
ZXQoKSkpKTsKICAgICAgICAgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbiA9IGZhbHNlOwog
ICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0KaW5kZXggZDA0
ZTNjNzRiNzQwOTQwNDdlMWI1MDZkNjcwMWMwOTA4YjA4YTUyYS4uMWVmOWE5OTExMTc5ZjM5MTU1
M2U5YjZiNzE4MDZmYTk1NjBjNWM3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b20ubW0KQEAgLTU5LDcgKzU5LDcgQEAgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGwKIHsKICAg
ICBzd2l0Y2ggKGNvbnRleHQubGF5ZXJIb3N0aW5nTW9kZSgpKSB7CiAgICAgY2FzZSBMYXllckhv
c3RpbmdNb2RlOjpJblByb2Nlc3M6Ci0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExh
eWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQoV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29t
cG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkpOworICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRl
eHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKICAgICAgICAgYnJlYWs7CiAj
aWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQogICAgIGNhc2UgTGF5ZXJIb3N0
aW5nTW9kZTo6T3V0T2ZQcm9jZXNzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
bW0KaW5kZXggZjEzMWQ1ZTJmMDgyNGJiNTI0ODMzNTE5NmYwYmNjYzYyNjYwMWVhYy4uYTc1NDkw
N2ZhOTQwN2ZlMmE0ZTJhMmZhYjBkMTRlMThjNDllNWQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLm1tCkBAIC0zOTMsMTQgKzM5MywxNCBAQCB2b2lkIFJlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhOjpmbHVzaExheWVycygpCiAgICAgaWYgKGhhZEFueUNoYW5nZWRCYWNr
aW5nU3RvcmUpCiAgICAgICAgIGJhY2tpbmdTdG9yZUNvbGxlY3Rpb24uc2NoZWR1bGVWb2xhdGls
aXR5VGltZXIoKTsKIAotICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVzaGVyPiBiYWNraW5nU3Rv
cmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCksIFdURjo6bW92ZShjb21taXRFbmNvZGVyKSwg
V1RGOjptb3ZlKGNvbnRleHRzVG9GbHVzaCkpOworICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVz
aGVyPiBiYWNraW5nU3RvcmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCksIFdURjo6bW92
ZShjb21taXRFbmNvZGVyKSwgV1RGOjptb3ZlKGNvbnRleHRzVG9GbHVzaCkpOwogICAgIG1fcGVu
ZGluZ0JhY2tpbmdTdG9yZUZsdXNoZXIgPSBiYWNraW5nU3RvcmVGbHVzaGVyOwogCiAgICAgdWlu
dDY0X3QgcGFnZUlEID0gbV93ZWJQYWdlLnBhZ2VJRCgpOwogICAgIGRpc3BhdGNoX2FzeW5jKG1f
Y29tbWl0UXVldWUsIFtiYWNraW5nU3RvcmVGbHVzaGVyLCBwYWdlSURdIHsKICAgICAgICAgYmFj
a2luZ1N0b3JlRmx1c2hlci0+Zmx1c2goKTsKIAotICAgICAgICBpZiAoV2ViUGFnZSAqd2ViUGFn
ZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlBhZ2UocGFnZUlEKSkgeworICAgICAgICBpZiAo
V2ViUGFnZSAqd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UocGFnZUlE
KSkgewogICAgICAgICAgICAgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcyB0aW1lc3RhbXAgPSBz
dGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzKHN0YXRpY19jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNl
Y29uZHM6OnJlcD4obW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkgKiAxMDAwKSk7CiAgICAg
ICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeewogICAg
ICAgICAgICAgICAgIHdlYlBhZ2UtPmRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKHRpbWVzdGFtcCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQppbmRleCAyZjQ1YjJm
NGI1OTVjNTA1Yjg0NmNlYWY4MmYzODE2NjAxZDA0MGVkLi42NzgzNzk3NzRhYTdjN2VlOGUzMDY5
YjM1NmRmYjJkMDc0OWFhMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEubW0KQEAgLTQ4Miw3ICs0ODIsNyBAQCB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhOjp1cGRhdGVMYXllckhvc3RpbmdDb250ZXh0KCkKICAgICAvLyBDcmVhdGUgYSBuZXcg
Y29udGV4dCBhbmQgc2V0IGl0IHVwLgogICAgIHN3aXRjaCAobV93ZWJQYWdlLmxheWVySG9zdGlu
Z01vZGUoKSkgewogICAgIGNhc2UgTGF5ZXJIb3N0aW5nTW9kZTo6SW5Qcm9jZXNzOgotICAgICAg
ICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQ
b3J0KFdlYlByb2Nlc3M6OnNoYXJlZCgpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsK
KyAgICAgICAgbV9sYXllckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3Jl
YXRlRm9yUG9ydChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5jb21wb3NpdGluZ1JlbmRlclNlcnZl
clBvcnQoKSk7CiAgICAgICAgIGJyZWFrOwogI2lmIEhBVkUoT1VUX09GX1BST0NFU1NfTEFZRVJf
SE9TVElORykKICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2VzczoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQpp
bmRleCA0ZGI2YWI3NzE3ZGRiY2M1MzI0MWY3M2MwOGQ3Y2I5NTA2MWJiYzVmLi5lMmY2Njc1YjEz
YWVhMjVmYjY3MDA3OWZkZDA4ZTkxMzdlMzQ4OGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0xMDIsNyArMTAyLDcg
QEAgdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUluaXRpYWxpemUoKQogICAgIFdLQWNjZXNzaWJpbGl0
eVdlYlBhZ2VPYmplY3QqIG1vY2tBY2Nlc3NpYmlsaXR5RWxlbWVudCA9IFtbW1dLQWNjZXNzaWJp
bGl0eVdlYlBhZ2VPYmplY3QgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKIAogICAgIC8vIEdl
dCB0aGUgcGlkIGZvciB0aGUgc3RhcnRpbmcgcHJvY2Vzcy4KLSAgICBwaWRfdCBwaWQgPSBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgpOyAgICAKKyAgICBwaWRf
dCBwaWQgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgp
OwogICAgIFdLQVhJbml0aWFsaXplRWxlbWVudFdpdGhQcmVzZW50ZXJQaWQobW9ja0FjY2Vzc2li
aWxpdHlFbGVtZW50LCBwaWQpOwogICAgIFttb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQgc2V0V2Vi
UGFnZTp0aGlzXTsKICAgICAKQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIFdlYlBhZ2U6OmV4ZWN1
dGVLZXlwcmVzc0NvbW1hbmRzSW50ZXJuYWwoY29uc3QgVmVjdG9yPFdlYkNvcmU6OktleXByZXNz
Q29tbQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgYm9vbCBjb21tYW5kV2FzSGFuZGxlZEJ5VUlQcm9jZXNzID0gZmFsc2U7Ci0gICAgICAg
ICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2Vs
ZWN0b3IoY29tbWFuZHNbaV0uY29tbWFuZE5hbWUpLCAKKyAgICAgICAgICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpFeGVjdXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb21tYW5k
c1tpXS5jb21tYW5kTmFtZSksCiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkV4ZWN1dGVTYXZlZENvbW1hbmRCeVNlbGVjdG9yOjpSZXBseShjb21tYW5kV2FzSGFu
ZGxlZEJ5VUlQcm9jZXNzKSwgbV9wYWdlSUQpOwogICAgICAgICAgICAgICAgIGV2ZW50V2FzSGFu
ZGxlZCB8PSBjb21tYW5kV2FzSGFuZGxlZEJ5VUlQcm9jZXNzOwogICAgICAgICAgICAgfQpAQCAt
ODE1LDcgKzgxNSw3IEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlSGVhZGVyQW5kRm9vdGVyTGF5ZXJz
Rm9yRGV2aWNlU2NhbGVDaGFuZ2UoZmxvYXQgc2NhbGVGYWN0b3IpCiB2b2lkIFdlYlBhZ2U6OmNv
bXB1dGVQYWdlc0ZvclByaW50aW5nUERGRG9jdW1lbnQodWludDY0X3QgZnJhbWVJRCwgY29uc3Qg
UHJpbnRJbmZvJiBwcmludEluZm8sIFZlY3RvcjxJbnRSZWN0PiYgcmVzdWx0UGFnZVJlY3RzKQog
ewogICAgIEFTU0VSVChyZXN1bHRQYWdlUmVjdHMuaXNFbXB0eSgpKTsKLSAgICBXZWJGcmFtZSog
ZnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShmcmFtZUlEKTsKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKTsK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gZnJhbWUgPyBmcmFtZS0+Y29yZUZyYW1lKCkgOiAwOwog
ICAgIFJldGFpblB0cjxQREZEb2N1bWVudD4gcGRmRG9jdW1lbnQgPSBjb3JlRnJhbWUgPyBwZGZE
b2N1bWVudEZvclByaW50aW5nRnJhbWUoY29yZUZyYW1lKSA6IDA7CiAgICAgaWYgKFtwZGZEb2N1
bWVudCBhbGxvd3NQcmludGluZ10pIHsKQEAgLTEwODEsNyArMTA4MSw3IEBAIHZvaWQgV2ViUGFn
ZTo6cGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50
IGxvY2F0aW9uSW5WCiAgICAgUmVmUHRyPEFQSTo6T2JqZWN0PiB1c2VyRGF0YTsKICAgICBpbmpl
Y3RlZEJ1bmRsZUNvbnRleHRNZW51Q2xpZW50KCkucHJlcGFyZUZvckFjdGlvbk1lbnUoKnRoaXMs
IGhpdFRlc3RSZXN1bHQsIHVzZXJEYXRhKTsKIAotICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkUGVyZm9ybUFjdGlvbk1lbnVIaXRUZXN0KGFjdGlvbk1lbnVSZXN1bHQsIGZvcklt
bWVkaWF0ZUFjdGlvbiwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgc2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtQWN0aW9uTWVudUhpdFRlc3QoYWN0aW9uTWVudVJl
c3VsdCwgZm9ySW1tZWRpYXRlQWN0aW9uLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0K
IAogUGFzc1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gV2ViUGFnZTo6bG9va3VwVGV4dEF0TG9jYXRp
b24oRmxvYXRQb2ludCBsb2NhdGlvbkluVmlld0Nvb29yZGluYXRlcywgTlNEaWN0aW9uYXJ5ICoq
b3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCmluZGV4IDk2
MTZiMDBkOWY2NjEyMDAyOGM3MzM3OTk0MDBhOTRlZGRhMzAzZDkuLmY1YTk3M2Q4ZThiYjA0Y2Zl
YjdhMTJiMjRlOGQ5OTAwZTg4NTg5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
cm9jZXNzLmNwcApAQCAtMTQzLDcgKzE0Myw3IEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbm9uVmlz
aWJsZVByb2Nlc3NDbGVhbnVwRGVsYXkgPSAxMDsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdl
YlByb2Nlc3MmIFdlYlByb2Nlc3M6OnNoYXJlZCgpCitXZWJQcm9jZXNzJiBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKQogewogICAgIHN0YXRpYyBXZWJQcm9jZXNzJiBwcm9jZXNzID0gKm5ldyBXZWJQ
cm9jZXNzOwogICAgIHJldHVybiBwcm9jZXNzOwpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgV2Vi
UHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9u
KQogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hpbTo6
c2hhcmVkKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CisgICAgU2VjSXRlbVNo
aW06OnNpbmdsZXRvbigpLmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogI2VuZGlm
CiAgICAgCiAgICAgV2ViUHJvY2Vzc1N1cHBsZW1lbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9zdXBwbGVtZW50cy5iZWdpbigpOwpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgV2ViUHJvY2Vz
czo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYmIHBh
cmFtZXRlcnMpCiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBpZiAodXNlc05ldHdvcmtQcm9j
ZXNzKCkpCi0gICAgICAgIENvb2tpZVN0b3JhZ2VTaGltOjpzaGFyZWQoKS5pbml0aWFsaXplKCk7
CisgICAgICAgIENvb2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKCk7CiAj
ZW5kaWYKICNlbmRpZgogICAgIHNldFRlcm1pbmF0aW9uVGltZW91dChwYXJhbWV0ZXJzLnRlcm1p
bmF0aW9uVGltZW91dCk7CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0
aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVy
cykKICAgICBhdWRpdF90b2tlbl90IGF1ZGl0VG9rZW47CiAgICAgaWYgKHBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpIHsKICAgICAgICAgUmV0YWlu
UHRyPENGRGF0YVJlZj4gYXVkaXREYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGUobnVsbHB0ciwg
KGNvbnN0IFVJbnQ4KikmYXVkaXRUb2tlbiwgc2l6ZW9mKGF1ZGl0VG9rZW4pKSk7Ci0gICAgICAg
IEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zZXRQYXJlbnRQcm9jZXNzSW5m
b3JtYXRpb24ocHJlc2VudGVyQXBwbGljYXRpb25QaWQoKSwgYXVkaXREYXRhKTsKKyAgICAgICAg
SW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnNldFBhcmVudFByb2Nlc3NJ
bmZvcm1hdGlvbihwcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgpLCBhdWRpdERhdGEpOwogICAgIH0K
ICNlbmRpZgogfQpAQCAtNzA4LDcgKzcwOCw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6Y2xlYXJSZXNv
dXJjZUNhY2hlcyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgcmVzb3VyY2VDYWNoZXNUb0NsZWFyCiAg
ICAgbWVtb3J5Q2FjaGUoKS5ldmljdFJlc291cmNlcygpOwogCiAgICAgLy8gRW1wdHkgdGhlIGNy
b3NzLW9yaWdpbiBwcmVmbGlnaHQgY2FjaGUuCi0gICAgQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1
bHRDYWNoZTo6c2hhcmVkKCkuZW1wdHkoKTsKKyAgICBDcm9zc09yaWdpblByZWZsaWdodFJlc3Vs
dENhY2hlOjpzaW5nbGV0b24oKS5lbXB0eSgpOwogfQogCiB2b2lkIFdlYlByb2Nlc3M6OmNsZWFy
QXBwbGljYXRpb25DYWNoZSgpCkBAIC05NTEsNyArOTUxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpz
ZXRKYXZhU2NyaXB0R2FyYmFnZUNvbGxlY3RvclRpbWVyRW5hYmxlZChib29sIGZsYWcpCiAKIHZv
aWQgV2ViUHJvY2Vzczo6aGFuZGxlSW5qZWN0ZWRCdW5kbGVNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSkKIHsKLSAgICBJbmplY3Rl
ZEJ1bmRsZSogaW5qZWN0ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1
bmRsZSgpOworICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCk7CiAgICAgaWYgKCFpbmplY3RlZEJ1bmRsZSkK
ICAgICAgICAgcmV0dXJuOwogCkBAIC05NjAsNyArOTYwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpo
YW5kbGVJbmplY3RlZEJ1bmRsZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29u
c3QgVXMKIAogdm9pZCBXZWJQcm9jZXNzOjpzZXRJbmplY3RlZEJ1bmRsZVBhcmFtZXRlcihjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiB2YWx1ZSkKIHsKLSAgICBJ
bmplY3RlZEJ1bmRsZSogaW5qZWN0ZWRCdW5kbGUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmpl
Y3RlZEJ1bmRsZSgpOworICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCk7CiAgICAgaWYgKCFpbmplY3RlZEJ1
bmRsZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMDc5LDcgKzEwNzksNyBAQCB2b2lkIFdlYlBy
b2Nlc3M6OnNldEVuaGFuY2VkQWNjZXNzaWJpbGl0eShib29sIGZsYWcpCiB2b2lkIFdlYlByb2Nl
c3M6OnN0YXJ0TWVtb3J5U2FtcGxlcihjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmIHNh
bXBsZUxvZ0ZpbGVIYW5kbGUsIGNvbnN0IFN0cmluZyYgc2FtcGxlTG9nRmlsZVBhdGgsIGNvbnN0
IGRvdWJsZSBpbnRlcnZhbCkKIHsKICNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpICAgIAotICAg
IFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgpLT5zdGFydChzYW1wbGVMb2dGaWxlSGFuZGxlLCBz
YW1wbGVMb2dGaWxlUGF0aCwgaW50ZXJ2YWwpOworICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNpbmds
ZXRvbigpLT5zdGFydChzYW1wbGVMb2dGaWxlSGFuZGxlLCBzYW1wbGVMb2dGaWxlUGF0aCwgaW50
ZXJ2YWwpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc2FtcGxlTG9nRmlsZUhhbmRsZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHNhbXBsZUxvZ0ZpbGVQYXRoKTsKQEAgLTEwOTAsNyArMTA5MCw3IEBA
IHZvaWQgV2ViUHJvY2Vzczo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRib3hFeHRlbnNp
b246OkhhbmRsZSYgc2FtcGxlTG9nRmlsCiB2b2lkIFdlYlByb2Nlc3M6OnN0b3BNZW1vcnlTYW1w
bGVyKCkKIHsKICNpZiBFTkFCTEUoTUVNT1JZX1NBTVBMRVIpCi0gICAgV2ViTWVtb3J5U2FtcGxl
cjo6c2hhcmVkKCktPnN0b3AoKTsKKyAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaW5nbGV0b24oKS0+
c3RvcCgpOwogI2VuZGlmCiB9CiAKQEAgLTExMTYsNyArMTExNiw3IEBAIHZvaWQgV2ViUHJvY2Vz
czo6c2V0VGV4dENoZWNrZXJTdGF0ZShjb25zdCBUZXh0Q2hlY2tlclN0YXRlJiB0ZXh0Q2hlY2tl
clN0YXRlKQogCiB2b2lkIFdlYlByb2Nlc3M6OnJlbGVhc2VQYWdlQ2FjaGUoKQogewotICAgIFBh
Z2VDYWNoZTo6c2hhcmVkKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5
UHJlc3N1cmUpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwg
UHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogfQogCiAjaWYgIVBMQVRGT1JNKENPQ09B
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmggYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaAppbmRleCBmOWNmMzdjYWFiODMz
MjcwZjliMmNjMmQ2YjZjMzNiZjdiMDE5MzBkLi41YmFmMDcyMTM3ZGU2YWU3ZGY1YzczZjU0YjVk
Mzg5OWY4ZmQzMjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuaApAQCAt
OTMsNyArOTMsNyBAQCBjbGFzcyBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb247CiBjbGFz
cyBXZWJQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHVibGljIFdlYk9yaWdpbkRhdGFN
YW5hZ2VyU3VwcGxlbWVudCwgcHJpdmF0ZSBEb3dubG9hZE1hbmFnZXI6OkNsaWVudCB7CiAgICAg
ZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPERvd25sb2FkTWFuYWdlcj47CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFdlYlByb2Nlc3MmIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJQcm9jZXNzJiBz
aW5nbGV0b24oKTsKIAogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgIFQqIHN1cHBsZW1l
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9j
ZXNzQ29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3ND
b2NvYS5tbQppbmRleCBiYzQ4NmU3M2VlN2YzYjFmM2FlZWIzNmVjOGQ1OWJhZTAyNDQzNTkxLi4w
ZDhhM2NmMTU1ODhjZDA3YWZmYjM1NDExYjBhM2E0ZDFlZWEzZjQ2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQpAQCAtMTE1LDcg
KzExNSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6cGxhdGZvcm1TZXRDYWNoZU1vZGVsKENhY2hlTW9k
ZWwgY2FjaGVNb2RlbCkKIAogICAgIG1lbW9yeUNhY2hlKCkuc2V0Q2FwYWNpdGllcyhjYWNoZU1p
bkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHksIGNhY2hlVG90YWxDYXBhY2l0eSk7
CiAgICAgbWVtb3J5Q2FjaGUoKS5zZXREZWFkRGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRl
YWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCku
c2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNl
dE1heFNpemUocGFnZUNhY2hlU2l6ZSk7CiAKICAgICBOU1VSTENhY2hlICpuc3VybENhY2hlID0g
W05TVVJMQ2FjaGUgc2hhcmVkVVJMQ2FjaGVdOwogCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjpwbGF0Zm9ybUNsZWFyUmVzb3VyY2VDYWNoZXMoUmVzb3VyY2VDYWNoZXNUb0Ns
ZWFyIGNhY2hlc1RvQ2xlYXIKICNpZiBVU0UoQVBQS0lUKQogc3RhdGljIGlkIE5TQXBwbGljYXRp
b25BY2Nlc3NpYmlsaXR5Rm9jdXNlZFVJRWxlbWVudChOU0FwcGxpY2F0aW9uKiwgU0VMKQogewot
ICAgIFdlYlBhZ2UqIHBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS5mb2N1c2VkV2ViUGFnZSgp
OworICAgIFdlYlBhZ2UqIHBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5mb2N1c2VkV2Vi
UGFnZSgpOwogICAgIGlmICghcGFnZSB8fCAhcGFnZS0+YWNjZXNzaWJpbGl0eVJlbW90ZU9iamVj
dCgpKQogICAgICAgICByZXR1cm4gMDsKIApAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgV2ViUHJv
Y2Vzczo6cGxhdGZvcm1Jbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0aWFs
aXphdGlvblBhcmFtCiAgICAgV0tBWFJlZ2lzdGVyUmVtb3RlQXBwKCk7CiAKICNpZiBFTkFCTEUo
U0VDX0lURU1fU0hJTSkKLSAgICBTZWNJdGVtU2hpbTo6c2hhcmVkKCkuaW5pdGlhbGl6ZSh0aGlz
KTsKKyAgICBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZSh0aGlzKTsKICNlbmRp
ZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNp
b25NYW5hZ2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lv
bk1hbmFnZXJFZmwuY3BwCmluZGV4IGIzM2UyODZhZTQ2ZTgyYzg2MzUxYzhjZDdkNjIwMTExOTlm
NzRlOWEuLmYwYjk2M2ViMjY3NDk5Y2I2YmRkZjI5ZDU0OGVkNGRlNTRlZGU4NzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwu
Y3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1FeHRlbnNpb25N
YW5hZ2VyRWZsJiBFeHRlbnNpb25NYW5hZ2VyRWZsOjpzaGFyZWQoKQorRXh0ZW5zaW9uTWFuYWdl
ckVmbCYgRXh0ZW5zaW9uTWFuYWdlckVmbDo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8RXh0ZW5zaW9uTWFuYWdlckVmbD4gZXh0ZW5zaW9uTWFuYWdlcjsKICAgICBy
ZXR1cm4gZXh0ZW5zaW9uTWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuaAppbmRleCA5YmE1M2I2OTg4ZDQwNGQ0Yzc3ODI0
YWMwOTdiZTBjMjY0Y2NhYWI4Li4yMmU1ZWE4NjhmMGUyN2FmMDk1MzE0NDFiNTc4ZjA1OGY1M2Y5
ZDQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25N
YW5hZ2VyRWZsLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9u
TWFuYWdlckVmbC5oCkBAIC00MCw3ICs0MCw3IEBAIGNsYXNzIE1vZHVsZTsKIGNsYXNzIEV4dGVu
c2lvbk1hbmFnZXJFZmwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEV4dGVuc2lvbk1hbmFn
ZXJFZmwpOwogcHVibGljOgotICAgIFdLX0VYUE9SVCBzdGF0aWMgRXh0ZW5zaW9uTWFuYWdlckVm
bCYgc2hhcmVkKCk7CisgICAgV0tfRVhQT1JUIHN0YXRpYyBFeHRlbnNpb25NYW5hZ2VyRWZsJiBz
aW5nbGV0b24oKTsKICAgICBXS19FWFBPUlQgdm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUmVmLCBX
S1R5cGVSZWYpOwogcHJpdmF0ZToKICAgICBFeHRlbnNpb25NYW5hZ2VyRWZsKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJJbmplY3RlZEJ1bmRsZU1haW5F
ZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvV2ViSW5qZWN0ZWRCdW5kbGVN
YWluRWZsLmNwcAppbmRleCA5ZTUwYThjYzFiZmQ2ZThlNWJmYmRiMjcyNDVkNmRmODQ1YzAwYWVm
Li44MjA1OWY5OTk4OTEwNzc5Y2E2MmRjZGE5ZTc4NmRmYWZiMWY2MzkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9XZWJJbmplY3RlZEJ1bmRsZU1haW5FZmwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYkluamVjdGVkQnVuZGxlTWFp
bkVmbC5jcHAKQEAgLTMyLDUgKzMyLDUgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogZXh0
ZXJuICJDIiB2b2lkIFdLQnVuZGxlSW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlw
ZVJlZiB1c2VyRGF0YSkKIHsKLSAgICBFeHRlbnNpb25NYW5hZ2VyRWZsOjpzaGFyZWQoKS5pbml0
aWFsaXplKGJ1bmRsZSwgdXNlckRhdGEpOworICAgIEV4dGVuc2lvbk1hbmFnZXJFZmw6OnNpbmds
ZXRvbigpLmluaXRpYWxpemUoYnVuZGxlLCB1c2VyRGF0YSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuY3BwCmlu
ZGV4IDU4Y2M3NWQyMGM1MWQ0YmZhMjhmNDEwNmU3MDIxNmM5ZTRjYWE2MmIuLmRlMjVlM2RiYzE2
MGFlNDg4MzcyYTE4ODMwMWIwZGQ2MmM4NGRjMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuY3BwCkBAIC0zMiw3
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1XZWJHdGtFeHRlbnNpb25NYW5hZ2Vy
JiBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyOjpzaGFyZWQoKQorV2ViR3RrRXh0ZW5zaW9uTWFuYWdl
ciYgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8V2ViR3RrRXh0ZW5zaW9uTWFuYWdlcj4gZXh0ZW5zaW9uTWFuYWdlcjsKICAg
ICByZXR1cm4gZXh0ZW5zaW9uTWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuaAppbmRleCBmY2M4NjZiNDdhODEw
MDZjN2I1ZjEyNTdjNzA0OWQwNmQ3Y2Q5ZTdiLi4zN2M1ZTY2NzY1OTFkZTM1MjYwY2FmMzBhNTll
M2E0NDEyMDNlZGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9X
ZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9n
dGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFdlYkd0
a0V4dGVuc2lvbk1hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkd0a0V4dGVu
c2lvbk1hbmFnZXIpOwogCiBwdWJsaWM6Ci0gICAgV0tfRVhQT1JUIHN0YXRpYyBXZWJHdGtFeHRl
bnNpb25NYW5hZ2VyJiBzaGFyZWQoKTsKKyAgICBXS19FWFBPUlQgc3RhdGljIFdlYkd0a0V4dGVu
c2lvbk1hbmFnZXImIHNpbmdsZXRvbigpOwogCiAgICAgV0tfRVhQT1JUIHZvaWQgaW5pdGlhbGl6
ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9ndGsvV2ViR3RrSW5qZWN0ZWRCdW5kbGVNYWluLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0luamVjdGVkQnVuZGxlTWFpbi5jcHAKaW5kZXggZjE5
MmZhYTM5NjVlOWMxZGI4ZDBhMmEzZTRiZGMwNjlmNzRkNTEzYi4uMDAzN2NkNDc2OTRhNzYyOTk4
OGYxYmJiMjNhOTQ2OTI0ODg4YmJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9ndGsvV2ViR3RrSW5qZWN0ZWRCdW5kbGVNYWluLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtJbmplY3RlZEJ1bmRsZU1haW4uY3BwCkBAIC0zMSw1ICsz
MSw1IEBAIGV4dGVybiAiQyIKICNlbmRpZgogdm9pZCBXS0J1bmRsZUluaXRpYWxpemUoV0tCdW5k
bGVSZWYgYnVuZGxlLCBXS1R5cGVSZWYgdXNlckRhdGEpCiB7Ci0gICAgV2ViR3RrRXh0ZW5zaW9u
TWFuYWdlcjo6c2hhcmVkKCkuaW5pdGlhbGl6ZShidW5kbGUsIHVzZXJEYXRhKTsKKyAgICBXZWJH
dGtFeHRlbnNpb25NYW5hZ2VyOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKGJ1bmRsZSwgdXNlckRh
dGEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlk
ZW9GdWxsc2NyZWVuTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvaW9zL1dl
YlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KaW5kZXggZmZiMDRiZDVlM2E0YzYyZDk0YjcxN2Zi
NDg5YWU2NGYwODE2NDc0Yy4uNzQyZTlkYjViZjljZmE0Mjg5NmJkODUwNTJhNmEyMmQzODA3MWNj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2lvcy9XZWJW
aWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCkBAIC03MywxMiArNzMsMTIgQEAgV2ViVmlkZW9GdWxs
c2NyZWVuTWFuYWdlcjo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcihQYXNzUmVmUHRyPFdlYlBh
Z2U+IHBhZ2UpCiAgICAgLCBtX2lzRnVsbHNjcmVlbihmYWxzZSkKIHsKICAgICBzZXRXZWJWaWRl
b0Z1bGxzY3JlZW5JbnRlcmZhY2UodGhpcyk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UtPnBhZ2VJRCgpLCAqdGhpcyk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxz
Y3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHBhZ2UtPnBhZ2VJRCgpLCAqdGhp
cyk7CiB9CiAKIFdlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6On5XZWJWaWRlb0Z1bGxzY3JlZW5N
YW5hZ2VyKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiBib29sIFdlYlZp
ZGVvRnVsbHNjcmVlbk1hbmFnZXI6OnN1cHBvcnRzVmlkZW9GdWxsc2NyZWVuKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCmlu
ZGV4IDExOGM3MjJmNzYyNDlhNWUyZmVhNGFhZWYwNTVmODQ5ZmFjMDljMDYuLjlhMjg3MDg0NTdm
NGEyYzUxY2RmMDNjZDM5ZTNmNWI4MjMyNGM5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3Mvc291cC9XZWJQcm9jZXNzU291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcApAQCAtMTA0LDEwICsxMDQsMTAgQEAg
dm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1v
ZGVsKQogICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCkuc2V0RGlzYWJsZWQoY2FjaGVNb2RlbCA9
PSBDYWNoZU1vZGVsRG9jdW1lbnRWaWV3ZXIpOwogICAgIFdlYkNvcmU6Om1lbW9yeUNhY2hlKCku
c2V0Q2FwYWNpdGllcyhjYWNoZU1pbkRlYWRDYXBhY2l0eSwgY2FjaGVNYXhEZWFkQ2FwYWNpdHks
IGNhY2hlVG90YWxDYXBhY2l0eSk7CiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXREZWFk
RGVjb2RlZERhdGFEZWxldGlvbkludGVydmFsKGRlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2
YWwpOwotICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkuc2V0TWF4U2l6ZShwYWdlQ2Fj
aGVTaXplKTsKKyAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNldE1heFNpemUo
cGFnZUNhY2hlU2l6ZSk7CiAKICNpZiBQTEFURk9STShHVEspCi0gICAgV2ViQ29yZTo6UGFnZUNh
Y2hlOjpzaGFyZWQoKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1ZSk7CisgICAgV2Vi
Q29yZTo6UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMo
dHJ1ZSk7CiAjZW5kaWYKIAogICAgIGlmICghdXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwMWQ4NzUyZDEz
ZDcyNTZkYzA5ZDg5Y2NjOGU5ZTZkYzcwN2MxMmMyLi5hMDEzMjIxNmZjN2M3NmU0MjJjODRmNzA1
ZmVhNjM3YzExNzM0N2UwIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0
YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAg
ICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1
LTAxLTI5ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1
aWx0IHJlc3VsdCB0YWtlcyB0b28gbG9uZyB0byBiZSBjb21wcmVzc2VkIG9uIGJvdHMKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXggNDVmYjk3YWQ3MTYxZjBhMWYyZjc1NGRmMGVi
N2JmODRjYWYyZTMxNS4uM2FmYzBjMmUzYzYxY2M3NmVkZTM2MGM2NDdhMzU1ZjlkY2QwODBlNCAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKQEAgLTIxNDQsMzcgKzIxNDQsMzcgQEAg
SlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKIAogdm9pZCBU
ZXN0UnVubmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwpCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExv
YWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMKSk7CisgICAgV29ya1F1ZXVlOjpzaW5n
bGV0b24oKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBiYXNlVVJMKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkQWx0ZXJuYXRlSFRNTFN0cmluZyhKU1N0
cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1bnJlYWNo
YWJsZVVSTCkKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEhUTUxT
dHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwsIHVucmVhY2hhYmxlVVJMKSk7CisgICAgV29ya1F1
ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShjb250ZW50LCBi
YXNlVVJMLCB1bnJlYWNoYWJsZVVSTCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlQmFj
a05hdmlnYXRpb24oaW50IGhvd0ZhckJhY2spCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+
cXVldWUobmV3IEJhY2tJdGVtKGhvd0ZhckJhY2spKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRv
bigpLT5xdWV1ZShuZXcgQmFja0l0ZW0oaG93RmFyQmFjaykpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24oaW50IGhvd0ZhckZvcndhcmQpCiB7Ci0gICAgV29y
a1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IEZvcndhcmRJdGVtKGhvd0ZhckZvcndhcmQpKTsK
KyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgRm9yd2FyZEl0ZW0oaG93RmFy
Rm9yd2FyZCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0
cmluZ1JlZiBzY3JpcHQpCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExv
YWRpbmdTY3JpcHRJdGVtKHNjcmlwdCkpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1
ZXVlKG5ldyBMb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewotICAgIFdvcmtR
dWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBOb25Mb2FkaW5nU2NyaXB0SXRlbShzY3JpcHQpKTsK
KyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgTm9uTG9hZGluZ1NjcmlwdEl0
ZW0oc2NyaXB0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogewotICAg
IFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBSZWxvYWRJdGVtKTsKKyAgICBXb3JrUXVl
dWU6OnNpbmdsZXRvbigpLT5xdWV1ZShuZXcgUmVsb2FkSXRlbSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6aWdub3JlTGVnYWN5V2ViTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RzKCkKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9Xb3JrUXVldWUuY3BwCmluZGV4IGMyZmMwNGYxMzZjNzUxMTczNDY2MTc0YzBm
NzI0OGQ0MGM0NTg2NzguLmQyNmU0MDNkZGQ4NmMwYmFkZWEwMDIzNWE5NDQ0ZjM3Njc4ZTVkNWIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmNwcApAQCAtMzgsNyArMzgsNyBAQCBzdGF0aWMg
V29ya1F1ZXVlSXRlbSogdGhlUXVldWVbcXVldWVMZW5ndGhdOwogc3RhdGljIHVuc2lnbmVkIHN0
YXJ0T2ZRdWV1ZTsKIHN0YXRpYyB1bnNpZ25lZCBlbmRPZlF1ZXVlOwogCi1Xb3JrUXVldWUqIFdv
cmtRdWV1ZTo6c2hhcmVkKCkKK1dvcmtRdWV1ZSogV29ya1F1ZXVlOjpzaW5nbGV0b24oKQogewog
ICAgIHN0YXRpYyBXb3JrUXVldWUqIHNoYXJlZEluc3RhbmNlID0gbmV3IFdvcmtRdWV1ZTsKICAg
ICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9Xb3JrUXVldWUuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oCmluZGV4IDgz
NTg1ZWE2NzgzZmI3YzhiZTM0MGQ0OWUzMTA1NDVhZGM1ODFlNDkuLjQ0ZTc4NjQwMWYzZmQ4NGI4
YmZhY2QyYTU4Y2JmZDZlZThlODRkOGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1dvcmtRdWV1ZS5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oCkBAIC0z
Myw3ICszMyw3IEBAIGNsYXNzIFdvcmtRdWV1ZUl0ZW07CiAKIGNsYXNzIFdvcmtRdWV1ZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFdvcmtRdWV1ZSogc2hhcmVkKCk7CisgICAgc3RhdGljIFdvcmtR
dWV1ZSogc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHF1ZXVlKFdvcmtRdWV1ZUl0ZW0qKTsKICAg
ICBXb3JrUXVldWVJdGVtKiBkZXF1ZXVlKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KaW5kZXggZDI1ZTA3ODg0ZGU1YmEzYTJkZjU0NTBlNzU4M2E4OWNjZTc2
MzAxYS4uZTQ1NTMzOGE5YjFjZmNiYTM3ZmNiNDhiNWM5MDE3OTA3OWExZDFjNiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtMTg3MCw4ICsxODcwLDgg
QEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKICAgICBbcHJl
dlRlc3RCRkl0ZW0gcmVsZWFzZV07CiAgICAgcHJldlRlc3RCRkl0ZW0gPSBbW1tbbWFpbkZyYW1l
IHdlYlZpZXddIGJhY2tGb3J3YXJkTGlzdF0gY3VycmVudEl0ZW1dIHJldGFpbl07CiAKLSAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5jbGVhcigpOwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNl
dEZyb3plbihmYWxzZSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+Y2xlYXIoKTsKKyAg
ICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5zZXRGcm96ZW4oZmFsc2UpOwogCiAgICAgYm9vbCBp
Z25vcmVXZWJDb3JlTm9kZUxlYWtzID0gc2hvdWxkSWdub3JlV2ViQ29yZU5vZGVMZWFrcyh0ZXN0
VVJMKTsKICAgICBpZiAoaWdub3JlV2ViQ29yZU5vZGVMZWFrcykKQEAgLTE4OTUsNyArMTg5NSw3
IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgW0V2
ZW50U2VuZGluZ0NvbnRyb2xsZXIgY2xlYXJTYXZlZEV2ZW50c107CiAgICAgW1ttYWluRnJhbWUg
d2ViVmlld10gc2V0U2VsZWN0ZWRET01SYW5nZTpuaWwgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW1dOwogCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xlYXIoKTsKKyAg
ICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5jbGVhcigpOwogCiAgICAgaWYgKGdUZXN0UnVubmVy
LT5jbG9zZVJlbWFpbmluZ1dpbmRvd3NXaGVuQ29tcGxldGUoKSkgewogICAgICAgICBOU0FycmF5
KiBhcnJheSA9IFtEdW1wUmVuZGVyVHJlZVdpbmRvdyBvcGVuV2luZG93c107CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0gYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KaW5kZXggMDQ1NzI5MzUzNjIw
MTQ4MGQxOTEyNjU4MjZiZjUxM2QwY2YzYjc0ZC4uNDMwY2IwN2VlNjI1Mzk1Y2M2ZThkOWQ0YjNm
MDhkZGEzMzRkMDg3NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1l
TG9hZERlbGVnYXRlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWRE
ZWxlZ2F0ZS5tbQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAjZW5kaWYKIAogICAgIC8vIGlmIHdlIGZp
bmlzaCBhbGwgdGhlIGNvbW1hbmRzLCB3ZSdyZSByZWFkeSB0byBkdW1wIHN0YXRlCi0gICAgaWYg
KFdvcmtRdWV1ZTo6c2hhcmVkKCktPnByb2Nlc3NXb3JrKCkgJiYgIWdUZXN0UnVubmVyLT53YWl0
VG9EdW1wKCkpCisgICAgaWYgKFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnByb2Nlc3NXb3JrKCkg
JiYgIWdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIH0KIApAQCAt
MTU5LDkgKzE1OSw5IEBACiB7CiAgICAgaWYgKFtkYXRhU291cmNlIHdlYkZyYW1lXSA9PSB0b3BM
b2FkaW5nRnJhbWUpIHsKICAgICAgICAgdG9wTG9hZGluZ0ZyYW1lID0gbmlsOwotICAgICAgICBX
b3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRlIGxv
YWQgZnJlZXplcyB0aGUgcXVldWUgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdAorICAgICAgICBX
b3JrUXVldWU6OnNpbmdsZXRvbigpLT5zZXRGcm96ZW4odHJ1ZSk7IC8vIGZpcnN0IGNvbXBsZXRl
IGxvYWQgZnJlZXplcyB0aGUgcXVldWUgZm9yIHRoZSByZXN0IG9mIHRoaXMgdGVzdAogICAgICAg
ICBpZiAoIWdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkpIHsKLSAgICAgICAgICAgIGlmIChXb3Jr
UXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgICAgICAgICAgaWYgKFdvcmtRdWV1ZTo6c2lu
Z2xldG9uKCktPmNvdW50KCkpCiAgICAgICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3Rvcihwcm9jZXNzV29yazopIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZHVtcCgpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBkMzJkOTY0NjBkMmViNmI3OWQ4NzQ0Yzli
YTI2ODU2YjJmNzJkNzJhLi43N2NmMTFkNTA1NWY1ZjM2ZWQ5MzcxZjRiMzRlNWFlMjYxYmQ2ZDk0
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtMjYxLDcg
KzI2MSw3IEBAIHNpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIAogdm9p
ZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKIHsKLSAgICBpZiAobV93YWl0VG9EdW1wICYmICF0
b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCisgICAgaWYg
KG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6OnNpbmdsZXRv
bigpLT5jb3VudCgpKQogICAgICAgICBkdW1wKCk7CiAgICAgbV93YWl0VG9EdW1wID0gZmFsc2U7
CiB9CkBAIC0zMzksNyArMzM5LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJp
bmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCiAgICAgTlNTdHJpbmcgKm5zdXJsU3RyaW5n
ID0gW25zdXJsIGFic29sdXRlU3RyaW5nXTsKIAogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBhYnNvbHV0ZVVSTChBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoW25zdXJs
U3RyaW5nIFVURjhTdHJpbmddKSk7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3
IExvYWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsKKyAgICBXb3JrUXVldWU6OnNp
bmdsZXRvbigpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oYWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkp
OwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgbmV3QWNjZXB0
c0VkaXRpbmcpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRl
clRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcApp
bmRleCAzZGNlY2Y3NDNkYmU0OWViZWJjODAwNzBkMDE5MWNjYmFiMGNmMjgxLi5hZWJhMWJlMTU4
MzFmYTU0ODY3OGY2YjdkOGM3ZjY1YTIwNDZkZGY4IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTExMDcsOCArMTEwNyw4IEBAIHN0YXRpYyB2b2lk
IHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgaWYgKHdlYlZpZXcgJiYgU1VD
Q0VFREVEKHdlYlZpZXctPmJhY2tGb3J3YXJkTGlzdCgmYmZMaXN0KSkpCiAgICAgICAgIGJmTGlz
dC0+Y3VycmVudEl0ZW0oJnByZXZUZXN0QkZJdGVtKTsKIAotICAgIFdvcmtRdWV1ZTo6c2hhcmVk
KCktPmNsZWFyKCk7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKGZhbHNlKTsK
KyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLT5jbGVhcigpOworICAgIFdvcmtRdWV1ZTo6c2lu
Z2xldG9uKCktPnNldEZyb3plbihmYWxzZSk7CiAKICAgICBNU0cgbXNnID0geyAwIH07CiAgICAg
SFdORCBob3N0V2luZG93OwpAQCAtMTE0MCw3ICsxMTQwLDcgQEAgc3RhdGljIHZvaWQgcnVuVGVz
dChjb25zdCBzdHJpbmcmIGlucHV0TGluZSkKICAgICB9CiAKICAgICAvLyBFdmVudFNlbmRpbmdD
b250cm9sbGVyIGNsZWFyU2F2ZWRFdmVudHMKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5jbGVh
cigpOworICAgIFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPmNsZWFyKCk7CiAKICAgICBpZiAoOjpn
VGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKICAgICAg
ICAgVmVjdG9yPEhXTkQ+IHdpbmRvd3MgPSBvcGVuV2luZG93cygpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggYWJiYTRjODc0NmU2NzJi
MTE4MGQ2ZmU0MWY2NDg0YjNlNjY2MzcxNi4uYjVjZjg4NDA5NmNlMDI1MjVkMjdkMmM4N2I5ZTc1
YzNiNjlhYjc0MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9h
ZERlbGVnYXRlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2FkRGVs
ZWdhdGUuY3BwCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBGcmFtZUxvYWREZWxlZ2F0ZTo6cHJv
Y2Vzc1dvcmsoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxsIHRo
ZSBjb21tYW5kcywgd2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6
OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYmICE6OmdUZXN0UnVubmVyLT53YWl0VG9EdW1wKCkp
CisgICAgaWYgKFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnByb2Nlc3NXb3JrKCkgJiYgITo6Z1Rl
c3RSdW5uZXItPndhaXRUb0R1bXAoKSkKICAgICAgICAgZHVtcCgpOwogfQogCkBAIC0yMzQsMTIg
KzIzNCwxMiBAQCB2b2lkIEZyYW1lTG9hZERlbGVnYXRlOjpsb2NhdGlvbkNoYW5nZURvbmUoSVdl
YkVycm9yKiwgSVdlYkZyYW1lKiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdG9wTG9h
ZGluZ0ZyYW1lID0gMDsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5zZXRGcm96ZW4odHJ1ZSk7
CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+c2V0RnJvemVuKHRydWUpOwogCiAgICAgaWYg
KDo6Z1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpIHsKKyAgICBpZiAoV29ya1F1ZXVlOjpzaW5n
bGV0b24oKS0+Y291bnQoKSkgewogICAgICAgICBpZiAoIXByb2Nlc3NXb3JrVGltZXJJRCkKICAg
ICAgICAgICAgIHByb2Nlc3NXb3JrVGltZXJJRCA9IDo6U2V0VGltZXIoMCwgMCwgMCwgcHJvY2Vz
c1dvcmtUaW1lcik7CiAgICAgICAgIGRlbGVnYXRlc1dpdGhEZWxheWVkV29yaygpLmFwcGVuZCh0
aGlzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2lu
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBl
NDRkNTA4YTg0ODIwNmNkZGZkMzZmNGNiZjZiMGM0NWEzYzM1M2I4Li4zNWIwY2I1NjAxNjEzZjQ4
ZTZkMWFlZDBjZDk3ZmU5MTVjNTYwNTk1IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rl
c3RSdW5uZXJXaW4uY3BwCkBAIC0yNjUsNyArMjY1LDcgQEAgc2l6ZV90IFRlc3RSdW5uZXI6Ondl
Ykhpc3RvcnlJdGVtQ291bnQoKQogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKIHsKICAg
ICAvLyBTYW1lIGFzIG9uIG1hYy4gIFRoaXMgY2FuIGJlIHNoYXJlZC4KLSAgICBpZiAobV93YWl0
VG9EdW1wICYmICF0b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50
KCkpCisgICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVl
dWU6OnNpbmdsZXRvbigpLT5jb3VudCgpKQogICAgICAgICBkdW1wKCk7CiAgICAgbV93YWl0VG9E
dW1wID0gZmFsc2U7CiB9CkBAIC0zMTcsNyArMzE3LDcgQEAgdm9pZCBUZXN0UnVubmVyOjpxdWV1
ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCiAgICAgd3N0cmluZyB3
QWJzb2x1dGVVUkwgPSByZXNwb25zZVVSTCArIFRFWFQoIi8iKSArIHdVUkw7CiAgICAgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IGpzQWJzb2x1dGVVUkwoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMod0Fic29sdXRlVVJMLmRhdGEoKSwgd0Fic29sdXRlVVJMLmxlbmd0aCgpKSk7
CiAKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZEl0ZW0oanNBYnNvbHV0
ZVVSTC5nZXQoKSwgdGFyZ2V0KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+cXVldWUo
bmV3IExvYWRJdGVtKGpzQWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OnNldEFjY2VwdHNFZGl0aW5nKGJvb2wgYWNjZXB0c0VkaXRpbmcpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5
CmluZGV4IDQ1MzE5OTVhOWI0MmRmZjE4MjBlYjc4YWFiMGQxZTliZjdlZTg1ZTMuLjhmZTU2OTM5
YmNkNTE3YjlmMjg2MWUyYjdkNmI4NjJiZmJhZGIxYzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcnMvY3BwX3VuaXR0ZXN0LnB5CkBAIC00MDkzLDE0
ICs0MDkzLDE0IEBAIGNsYXNzIFdlYktpdFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAg
ICAgICAgICAgICd9XG4nLAogICAgICAgICAgICAgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211
bHRpX2xpbmVfbGludCgKLSAgICAgICAgICAgICcjZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Np
b24pIGRvIHsgaWYgKCEoZXhwcmVzc2lvbikpIHsgVGVzdHNDb250cm9sbGVyOjpzaGFyZWQoKS50
ZXN0RmFpbGVkKF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyByZXR1cm47IH0gfSB3
aGlsZSAoMClcbicsCisgICAgICAgICAgICAnI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9u
KSBkbyB7IGlmICghKGV4cHJlc3Npb24pKSB7IFRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCku
dGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0g
d2hpbGUgKDApXG4nLAogICAgICAgICAgICAgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0X211bHRp
X2xpbmVfbGludCgKLSAgICAgICAgICAgICcjZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24p
IGRvIHsgaWYgKCAhKGV4cHJlc3Npb24pKSB7IFRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkudGVz
dEZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0gd2hp
bGUgKDApXG4nLAorICAgICAgICAgICAgJyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikg
ZG8geyBpZiAoICEoZXhwcmVzc2lvbikpIHsgVGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS50
ZXN0RmFpbGVkKF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyByZXR1cm47IH0gfSB3
aGlsZSAoMClcbicsCiAgICAgICAgICAgICAnRXh0cmEgc3BhY2UgYWZ0ZXIgKCBpbiBpZiAgW3do
aXRlc3BhY2UvcGFyZW5zXSBbNV0nKQogICAgICAgICAjIEZJWE1FOiBjdXJyZW50bHkgd2Ugb25s
eSBjaGVjayBmaXJzdCBjb25kaXRpb25hbCwgc28gd2UgY2Fubm90IGRldGVjdCBlcnJvcnMgaW4g
bmV4dCBvbmVzLgogICAgICAgICAjIHNlbGYuYXNzZXJ0X211bHRpX2xpbmVfbGludCgKLSAgICAg
ICAgIyAgICAgJyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoIShleHBy
ZXNzaW9uKSkgeyBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnRlc3RGYWlsZWQoX19GSUxFX18s
IF9fTElORV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwIClcbicsCisgICAg
ICAgICMgICAgICcjZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCEoZXhw
cmVzc2lvbikpIHsgVGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS50ZXN0RmFpbGVkKF9fRklM
RV9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyByZXR1cm47IH0gfSB3aGlsZSAoMCApXG4nLAog
ICAgICAgICAjICAgICAnTWlzbWF0Y2hpbmcgc3BhY2VzIGluc2lkZSAoKSBpbiBpZiAgW3doaXRl
c3BhY2UvcGFyZW5zXSBbNV0nKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQo
CiAgICAgICAgICAgICAnV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xhc3NOYW1lKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7XG4nLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Jbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1
bmRsZUNvbnRyb2xsZXIuY3BwCmluZGV4IDcyZWZlZjFhYzg2YWE0NGY5ZjIxNzMyNzY4ZWIwMzg2
YjBiMTJiN2EuLjUzZjM5YTg3NDNjMzQzNTg4ZmRhZTExZjA5ZTQ1MGMzZGYxYzI4OTEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAKQEAg
LTM2LDcgKzM2LDcgQEAKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi1JbmplY3RlZEJ1
bmRsZUNvbnRyb2xsZXImIEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkKK0luamVj
dGVkQnVuZGxlQ29udHJvbGxlciYgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIHNoYXJlZCA9ICpuZXcg
SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOwogICAgIHJldHVybiBzaGFyZWQ7CmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5oIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaAppbmRleCA2MWEwOTZjNjAz
Y2I2OGQ4MDYzZjc1OGMzOGFhN2Q5YjEzNDY2NTk0Li5lYWE3ZjBkMTc4ZDQzNjgzNjZmNWQyNmUx
ZTkxNmJhYjVlODNlZjEzIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVk
QnVuZGxlQ29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyLmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGVUZXN0
OwogCiBjbGFzcyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBJbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBpbml0aWFsaXplKFdL
QnVuZGxlUmVmLCBXS1R5cGVSZWYpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L0luamVjdGVkQnVuZGxlTWFpbi5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVu
ZGxlTWFpbi5jcHAKaW5kZXggNjg0MDJjYTJhMTQ3NGQwYzkzZjkyZTA2ODFiNTBmODA5ZGMxOTUz
Ny4uYjI1MzdmNzM3ZDUxZTg5ZWU0YjFiNTVhYzVkNWQxNWY0MGRkZDhjZCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCisrKyBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcApAQCAtMzcsNyArMzcsNyBAQCBleHRl
cm4gIkMiCiAjZW5kaWYKIHZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRs
ZSwgV0tUeXBlUmVmIGluaXRpYWxpemF0aW9uVXNlckRhdGEpCiB7Ci0gICAgVGVzdFdlYktpdEFQ
STo6SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5pbml0aWFsaXplKGJ1bmRsZSwg
aW5pdGlhbGl6YXRpb25Vc2VyRGF0YSk7CisgICAgVGVzdFdlYktpdEFQSTo6SW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKGJ1bmRsZSwgaW5pdGlhbGl6YXRp
b25Vc2VyRGF0YSk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9JbmplY3RlZEJ1bmRsZVRlc3QuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5k
bGVUZXN0LmgKaW5kZXggZDBmOTk2YWZmZTkxZTc1ZjE4NzBkMTA1MDUzYWI5NTljZTAyODM0My4u
YWQyY2I5NTgxMTVmOWQwYzU5OGFjZDJhOGIzZjljZWM1MTNjMDBlYyAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRlc3QuaAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5oCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAg
ICBwdWJsaWM6CiAgICAgICAgIFJlZ2lzdGVyKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXN0KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLnJl
Z2lzdGVyQ3JlYXRlSW5qZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb24odGVzdCwgUmVnaXN0ZXI6OmNy
ZWF0ZSk7CisgICAgICAgICAgICBJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LnJlZ2lzdGVyQ3JlYXRlSW5qZWN0ZWRCdW5kbGVUZXN0RnVuY3Rpb24odGVzdCwgUmVnaXN0ZXI6
OmNyZWF0ZSk7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzX0J1bmRs
ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9y
bUNvbnRyb2xzX0J1bmRsZS5jcHAKaW5kZXggYzk1YjQ2OTI0OTM2NTkxZGVhMjQ1YWFkODllMmVi
NDI5YWQyOWY2OC4uNWRjZDkxZGE4NGFiYzUwMTJkY2VlMTk2YmE0NjIwN2ZlNjM2YzZmYiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZv
cm1Db250cm9sc19CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcApAQCAtNTcsNyArNTcsNyBA
QCBzdGF0aWMgdm9pZCBkaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UsIFdLQXJyYXlSZWYgZWxlbWVudEhhbgogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBu
dW1iZXJPZkVsZW1lbnRzID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShXS0FycmF5R2V0U2l6ZShl
bGVtZW50SGFuZGxlcykpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5Lmdl
dCgpLCBVdGlsOjp0b1dLKCJOdW1iZXJPZkNvbnRyb2xzIikuZ2V0KCksIG51bWJlck9mRWxlbWVu
dHMuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRy
b2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNlaXZlRGlkQXNzb2Np
YXRlRm9ybUNvbnRyb2xzIikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIFV0aWw6OnRvV0soIkRpZFJlY2VpdmVEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHMiKS5nZXQo
KSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiBEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0
OjpEaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlm
aWVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0hpdFRl
c3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcAppbmRleCBmYjk0YmY4
MmU5ZDFiYTQ0YzljMjI1YzM0ODIzNjdhNmRlMGE3NWU1Li5kNjhmZjIxOTNkNzhhMzdiNWUyZGQ3
MjhjMzU5ODViYmZjNDdhMDcxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdDIvSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxlLmNwcAorKysgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVfQnVuZGxl
LmNwcApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghbm9kZUhhbmRsZSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCi0gICAgICAgIFdLQnVuZGxlUG9zdE1lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwgVXRpbDo6dG9X
SygiSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVUZXN0RG9uZU1lc3NhZ2VOYW1lIikuZ2V0KCksIFV0
aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFuZGxlVGVzdERvbmVNZXNzYWdlQm9keSIpLmdl
dCgpKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJIaXRUZXN0UmVzdWx0Tm9kZUhh
bmRsZVRlc3REb25lTWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygiSGl0VGVzdFJlc3Vs
dE5vZGVIYW5kbGVUZXN0RG9uZU1lc3NhZ2VCb2R5IikuZ2V0KCkpOwogICAgIH0KIAogICAgIHZp
cnR1YWwgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmIGJ1bmRsZSwgV0tCdW5kbGVQYWdl
UmVmIHBhZ2UpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIv
UGFzdGVib2FyZE5vdGlmaWNhdGlvbnNfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9QYXN0ZWJvYXJkTm90aWZpY2F0aW9uc19CdW5kbGUuY3BwCmluZGV4IGM5
ODU1MjA0MTllY2RjMzcwMTAwYmY5N2EyZGU3ZDZjNzQxZWJiNjAuLjhjMTQwNGU3YTc5MWRlZmU5
ZTAyNzExYmQ3M2E5M2U0MTg0NmZmMGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mi9QYXN0ZWJvYXJkTm90aWZpY2F0aW9uc19CdW5kbGUuY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9QYXN0ZWJvYXJkTm90aWZpY2F0aW9uc19C
dW5kbGUuY3BwCkBAIC00OSw3ICs0OSw3IEBAIHN0YXRpYyBJbmplY3RlZEJ1bmRsZVRlc3Q6OlJl
Z2lzdGVyPFBhc3RlYm9hcmROb3RpZmljYXRpb25zVGVzdD4gcmVnaXN0cmFyKCJQYXN0CiBzdGF0
aWMgdm9pZCB3aWxsV3JpdGVUb1Bhc3RlYm9hcmQoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVu
ZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UsICBjb25zdCB2b2lkKikKIHsKICAgICBpZiAoIXJhbmdl
KQotICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6
c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0
RG9uZU1lc3NhZ2VOYW1lIikuZ2V0KCksIFV0aWw6OnRvV0soIndpbGxXcml0ZXRvUGFzdGVib2Fy
ZEZhaWwiKS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiUGFzdGVib2Fy
ZE5vdGlmaWNhdGlvblRlc3REb25lTWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygid2ls
bFdyaXRldG9QYXN0ZWJvYXJkRmFpbCIpLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgZ2V0UGFz
dGVib2FyZERhdGFGb3JSYW5nZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlUmFuZ2VIYW5kbGVS
ZWYgcmFuZ2UsIFdLQXJyYXlSZWYqIHBhc3RlYm9hcmRUeXBlcywgV0tBcnJheVJlZiogcGFzdGVi
b2FyZERhdGEsIGNvbnN0IHZvaWQqKQpAQCAtNjIsNyArNjIsNyBAQCBzdGF0aWMgdm9pZCBnZXRQ
YXN0ZWJvYXJkRGF0YUZvclJhbmdlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiByYQogCiBzdGF0aWMgdm9pZCBkaWRXcml0ZVRvUGFzdGVib2FyZChXS0J1bmRsZVBhZ2VS
ZWYsIGNvbnN0IHZvaWQqKQogewotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiUGFzdGVib2FyZE5v
dGlmaWNhdGlvblRlc3REb25lTWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygiZGlkV3Jp
dGVUb1Bhc3RlYm9hcmQiKS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJQYXN0
ZWJvYXJkTm90aWZpY2F0aW9uVGVzdERvbmVNZXNzYWdlTmFtZSIpLmdldCgpLCBVdGlsOjp0b1dL
KCJkaWRXcml0ZVRvUGFzdGVib2FyZCIpLmdldCgpKTsKIH0KIAogUGFzdGVib2FyZE5vdGlmaWNh
dGlvbnNUZXN0OjpQYXN0ZWJvYXJkTm90aWZpY2F0aW9uc1Rlc3QoY29uc3Qgc3RkOjpzdHJpbmcm
IGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDIvV2lsbExvYWRfQnVuZGxlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9XaWxsTG9hZF9CdW5kbGUuY3BwCmluZGV4IDJjYjA2ODZiYTk2OGQ0ZDQ3YTg4MDU4ZDJiMzA5
Mjc0MWZhYWU2NzMuLjA5MWU1YTk0MmExZTg5MWZkYTdjMTgzNmJkYmIyZWU4YWRhNjA0YjQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XaWxsTG9hZF9CdW5k
bGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XaWxsTG9hZF9C
dW5kbGUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFdLRGljdGlvbmFy
eVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIFV0aWw6OnRvV0soIlVSTFJlcXVlc3RSZXR1cm4i
KS5nZXQoKSwgcmVxdWVzdCk7CiAgICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJv
ZHkuZ2V0KCksIFV0aWw6OnRvV0soIlVzZXJEYXRhUmV0dXJuIikuZ2V0KCksIHVzZXJEYXRhKTsK
IAotICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6
c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIldpbGxMb2FkVVJMUmVxdWVzdFJldHVybiIp
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9X
SygiV2lsbExvYWRVUkxSZXF1ZXN0UmV0dXJuIikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsK
ICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCB3aWxsTG9hZERhdGFSZXF1ZXN0KFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tEYXRhUmVmIGRhdGEsIFdLU3Ry
aW5nUmVmIE1JTUVUeXBlLCBXS1N0cmluZ1JlZiBlbmNvZGluZ05hbWUsIFdLVVJMUmVmIHVucmVh
Y2hhYmxlVVJMLCBXS1R5cGVSZWYgdXNlckRhdGEsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCkBA
IC02NCw3ICs2NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFdLRGljdGlvbmFyeVNldEl0ZW0obWVz
c2FnZUJvZHkuZ2V0KCksIFV0aWw6OnRvV0soIlVucmVhY2hhYmxlVVJMUmV0dXJuIikuZ2V0KCks
IHVucmVhY2hhYmxlVVJMKTsKICAgICAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9k
eS5nZXQoKSwgVXRpbDo6dG9XSygiVXNlckRhdGFSZXR1cm4iKS5nZXQoKSwgdXNlckRhdGEpOwog
Ci0gICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpz
aGFyZWQoKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiV2lsbExvYWREYXRhUmVxdWVzdFJldHVybiIp
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2Uo
SW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9X
SygiV2lsbExvYWREYXRhUmVxdWVzdFJldHVybiIpLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7
CiAKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mi9XaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5kbGUuY3BwCmluZGV4IGZjN2NhOGFj
ZThhMzM5MmU1YmM2NjQyYTg5ZjY4M2RmZDhhMzFmNmUuLmZhN2QyYTlhN2Y4MDg0ZGZhZWRhMThj
YjgwNjViZmYwNmI4NzJiYjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViS2l0Mi9XaWxsU2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxTZW5kU3VibWl0RXZlbnRfQnVuZGxlLmNwcApAQCAt
NDUsNyArNDUsNyBAQCBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxXaWxsU2Vu
ZFN1Ym1pdEV2ZW50VGVzdD4gcmVnaXN0cmFyKCJXaWxsU2VuZAogCiBzdGF0aWMgdm9pZCB3aWxs
U2VuZFN1Ym1pdEV2ZW50KFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmLCBX
S0J1bmRsZUZyYW1lUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCBXS0RpY3Rpb25hcnlSZWYgdmFsdWVz
LCBjb25zdCB2b2lkKikKIHsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
Q29udHJvbGxlcjo6c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIkRpZFJlY2VpdmVXaWxs
U2VuZFN1Ym1pdEV2ZW50IikuZ2V0KCksIHZhbHVlcyk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0
b1dLKCJEaWRSZWNlaXZlV2lsbFNlbmRTdWJtaXRFdmVudCIpLmdldCgpLCB2YWx1ZXMpOwogfQog
CiBXaWxsU2VuZFN1Ym1pdEV2ZW50VGVzdDo6V2lsbFNlbmRTdWJtaXRFdmVudFRlc3QoY29uc3Qg
c3RkOjpzdHJpbmcmIGlkZW50aWZpZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzQ29udHJvbGxlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxl
ci5jcHAKaW5kZXggNWJiYmVlZWMyYTVjZDQ4M2RmNzM5Njc3ZDhhNzRhNjdlMzc4YmE0My4uOTEz
MzA1ZDdiZWYwODhhMTk4ZDE2ZGFhMWM5NmM2NWEyMzQzMTI0MCAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHNDb250cm9sbGVyLmNwcApAQCAtNTQsNyArNTQsNyBAQCBjbGFzcyBQcmludGVyIDog
cHVibGljIDo6dGVzdGluZzo6RW1wdHlUZXN0RXZlbnRMaXN0ZW5lciB7CiAgICAgc3RkOjpzdHJp
bmcgZmFpbHVyZXM7CiB9OwogCi1UZXN0c0NvbnRyb2xsZXImIFRlc3RzQ29udHJvbGxlcjo6c2hh
cmVkKCkKK1Rlc3RzQ29udHJvbGxlciYgVGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxUZXN0c0NvbnRyb2xsZXI+IHNoYXJlZDsKICAgICBy
ZXR1cm4gc2hhcmVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRy
b2xsZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmgKaW5kZXggZjU1
YWVhYWYzYmI2YzcyN2QwM2VjNzBhYWQ1YmI3ODE0MWI3N2I3OS4uZWE4NDk2ODUzYjlkNTQzY2U5
ZmQyNjEyMmVjYTk5MTQ4YjU2OWI5NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0c0NvbnRyb2xsZXIuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxl
ci5oCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogY2xhc3Mg
VGVzdHNDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgVGVzdHNDb250cm9sbGVyJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgVGVzdHNDb250cm9sbGVyJiBzaW5nbGV0b24oKTsKIAogICAg
IGJvb2wgcnVuKGludCBhcmdjLCBjaGFyKiogYXJndik7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZWZsL21haW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvbWFpbi5j
cHAKaW5kZXggZmMyOWIxZTBlMzliZjkzYmEyZWYwNTRkYjc4NTFkMjNhMzI2YzE2MS4uOTAwMmJj
N2I1ZjgxMWU0NDIxMjdkODJkYmQwZTgyNjcwN2E4MjE2YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9lZmwvbWFpbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9lZmwvbWFp
bi5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQog
CiAgICAgdXNlWDExV2luZG93ID0gY2hlY2tGb3JVc2VYMTFXaW5kb3dBcmd1bWVudChhcmdjLCBh
cmd2KTsKIAotICAgIGludCByZXR1cm5Db2RlID0gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9s
bGVyOjpzaGFyZWQoKS5ydW4oYXJnYywgYXJndikgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxV
UkU7CisgICAgaW50IHJldHVybkNvZGUgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnJ1bihhcmdjLCBhcmd2KSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVS
RTsKIAogICAgIGV3a19zaHV0ZG93bigpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL2d0ay9tYWluLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL21haW4uY3BwCmluZGV4
IDFiN2ZlZjY0ZmQwNDIwYjk4NmVlZWM4ZmE4YWYyN2NmOTVmZWI1ZTQuLjJjNjg1NjU5NWFlMzI3
Yzk4YWUwMDJlMjM1NjVkZTZhMDNhNzk0YWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvZ3RrL21haW4uY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL21haW4uY3BwCkBA
IC0zMiw1ICszMiw1IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKICAgICBn
dGtfaW5pdCgmYXJnYywgJmFyZ3YpOwogCi0gICAgcmV0dXJuIFRlc3RXZWJLaXRBUEk6OlRlc3Rz
Q29udHJvbGxlcjo6c2hhcmVkKCkucnVuKGFyZ2MsIGFyZ3YpID8gRVhJVF9TVUNDRVNTIDogRVhJ
VF9GQUlMVVJFOworICAgIHJldHVybiBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLnJ1bihhcmdjLCBhcmd2KSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsK
IH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL21haW5JT1MubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2lvcy9tYWluSU9TLm1tCmluZGV4IGViMWNkZjRlM2Q4MjU4ZDdlNzMw
YTBiYTZjY2Y0Y2QwODhjMGJlNTMuLmZhMmJlMmVhYzI1Y2E0NWJiMTQxZjI2MDk4YzVmNjJmOWRh
MjY0ODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL21haW5JT1MubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvbWFpbklPUy5tbQpAQCAtMzEsNyArMzEsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgTlNBdXRvcmVsZWFzZVBvb2wgKnBv
b2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKIAogICAgIFtbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdIHJlbW92ZVBlcnNpc3RlbnREb21haW5Gb3JOYW1l
OkAiVGVzdFdlYktpdEFQSSJdOwotICAgIGJvb2wgcGFzc2VkID0gVGVzdFdlYktpdEFQSTo6VGVz
dHNDb250cm9sbGVyOjpzaGFyZWQoKS5ydW4oYXJnYywgYXJndik7CisgICAgYm9vbCBwYXNzZWQg
PSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1bihhcmdjLCBh
cmd2KTsKIAogICAgIFtwb29sIGRyYWluXTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9tYWMvbWFpbk1hYy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0K
aW5kZXggMDk4MDRjZTgwNDdiNmY5ZWZmNDUzYjc1YWM3ZGVjZTQ2Njc5ZDQ4MS4uMGYwZmY4ZGU3
ZTBhZGFlM2EwZGJlZjdiYzA1ZjU2NjQzZTJlMjVlMCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9tYWMvbWFpbk1hYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9tYWlu
TWFjLm1tCkBAIC0zMyw3ICszMyw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikK
ICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSByZW1vdmVQZXJzaXN0
ZW50RG9tYWluRm9yTmFtZTpAIlRlc3RXZWJLaXRBUEkiXTsKICAgICBbTlNBcHBsaWNhdGlvbiBz
aGFyZWRBcHBsaWNhdGlvbl07CiAKLSAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRl
c3RzQ29udHJvbGxlcjo6c2hhcmVkKCkucnVuKGFyZ2MsIGFyZ3YpOworICAgIGJvb2wgcGFzc2Vk
ID0gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywg
YXJndik7CiAKICAgICBbcG9vbCBkcmFpbl07CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvd2luL21haW4uY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vbWFpbi5jcHAKaW5k
ZXggZDk0OTljNTI0YzMzZGE2Zjg2NWYyNTE4ZGRiN2ZkMzA1MzNhNjY0OS4uNzBiNmEwOTg3OWNj
OGNhNTVmZDYwNjMwOWE5MzQ5NGM2MzhhNGE4OCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS93aW4vbWFpbi5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS93aW4vbWFpbi5jcHAK
QEAgLTUwLDcgKzUwLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBsaW5lIG9uY2UgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzI4Njc+
IGlzIGZpeGVkLgogICAgIDo6T2xlSW5pdGlhbGl6ZSgwKTsKIAotICAgIGJvb2wgcGFzc2VkID0g
VGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaGFyZWQoKS5ydW4oYXJnYywgYXJndik7
CisgICAgYm9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLnJ1bihhcmdjLCBhcmd2KTsKIAogICAgIHJldHVybiBwYXNzZWQgPyBFWElUX1NVQ0NF
U1MgOiBFWElUX0ZBSUxVUkU7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDM0OGQ2OTE3MmY1MjEwNTMwZmMxNWZiMjBkMWFiZmY2MDQ0MTAyY2IuLjhiMjIzZmU0Yzk5
MGIzMzFlODJkYjM0Y2Q4YmQ1OGExMjk1ZjUyYmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuY3BwCisrKyBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuY3BwCkBAIC03NCw3ICs3NCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6
OmVuaGFuY2VkQWNjZXNzaWJpbGl0eUVuYWJsZWQoKQogI2lmICFQTEFURk9STShHVEspICYmICFQ
TEFURk9STShFRkwpCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBh
Z2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5k
bGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCk7CiAgICAgdm9pZCogcm9vdCA9IFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSk7CiAg
ICAgCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2Fz
dDxQbGF0Zm9ybVVJRWxlbWVudD4ocm9vdCkpOyAgICAKQEAgLTgyLDcgKzgyLDcgQEAgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9v
dEVsZW1lbnQoKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2li
aWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxlbWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CiAgICAgdm9pZCogcm9vdCA9IFdLQWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QocGFn
ZSk7CiAgICAgCiAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0
aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4ocm9vdCkpOyAgICAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDkwZDRmMTUzOWMyZmJlZGYxOTE4ZDhjNjBlMjI3ZmJmYzc2OGI4
YjYuLmYwMWE3ODBiNzlkZGQyOTgwM2IzZjI0YTFiNThkNzFjOGYzMGUyZDcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJv
bGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9FdmVu
dFNlbmRpbmdDb250cm9sbGVyLmNwcApAQCAtMjA4LDcgKzIwOCw3IEBAIHN0YXRpYyBXS011dGFi
bGVEaWN0aW9uYXJ5UmVmIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VTdGF0ZSBzdGF0ZSwg
aW50IGJ1dHRvCiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VEb3duKGludCBi
dXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkgCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5G
cmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CiAgICAgV0tFdmVudE1vZGlmaWVycyBtb2RpZmllcnMg
PSBwYXJzZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJBcnJheSk7CkBAIC0yMTYsMTIg
KzIxNiwxMiBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlRG93bihpbnQgYnV0
dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rp
b25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkoQWRvcHRXSywgY3JlYXRlTW91c2VNZXNz
YWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJzKSk7CiAKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjptb3VzZVVwKGludCBidXR0b24sIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSkKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
KCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKICAgICBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmll
ckFycmF5KTsKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
Om1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5KQogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKICAgICBXS1JldGFpblB0
cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VCb2R5KEFkb3B0V0ss
IGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsKIAot
ICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVz
c2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5h
bWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZVRvKGludCB4LCBpbnQgeSkKQEAgLTI0OSw3
ICsyNDksNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlTW92ZVRvKGludCB4
LCBpbnQgeSkKICAgICBXS1JldGFpblB0cjxXS0RvdWJsZVJlZj4geVJlZihBZG9wdFdLLCBXS0Rv
dWJsZUNyZWF0ZSh5KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNlY29uZHMpCkBAIC0yNjUsNyArMjY1LDcgQEAg
dm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpsZWFwRm9yd2FyZChpbnQgbWlsbGlzZWNvbmRz
KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1lUmVmKEFkb3B0V0ssIFdLVUludDY0
Q3JlYXRlKG1pbGxpc2Vjb25kcykpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgdGltZUtleS5nZXQoKSwgdGltZVJlZi5nZXQoKSk7CiAKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1l
LmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5jaHJvbm91c0NsaWNrKCkKQEAgLTI3Nywx
MSArMjc3LDExIEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hy
b25vdXNDbGljaygpCiAKICAgICAvLyBBc3luY2hyb25vdXMgbW91c2UgZG93bi4KICAgICBXS1Jl
dGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZURvd25NZXNzYWdlQm9keShBZG9w
dFdLLCBjcmVhdGVNb3VzZU1lc3NhZ2VCb2R5KE1vdXNlRG93biwgYnV0dG9uLCBtb2RpZmllcnMp
KTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VEb3duTWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBtb3VzZURvd25NZXNz
YWdlQm9keS5nZXQoKSk7CiAKICAgICAvLyBBc3luY2hyb25vdXMgbW91c2UgdXAuCiAgICAgV0tS
ZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gbW91c2VVcE1lc3NhZ2VCb2R5KEFkb3B0
V0ssIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VVcCwgYnV0dG9uLCBtb2RpZmllcnMpKTsK
LSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VVcE1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgbW91c2VVcE1lc3NhZ2VCb2R5
LmdldCgpKTsKIH0KIAogc3RhdGljIFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+
IGNyZWF0ZUtleURvd25NZXNzYWdlQm9keShKU1N0cmluZ1JlZiBrZXksIFdLRXZlbnRNb2RpZmll
cnMgbW9kaWZpZXJzLCBpbnQgbG9jYXRpb24pCkBAIC0zMDgsNyArMzA4LDcgQEAgc3RhdGljIFdL
UmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGNyZWF0ZUtleURvd25NZXNzYWdlQm9k
eShKU1N0cmluZ1JlZgogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmtleURvd24oSlNT
dHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksIGludCBsb2NhdGlvbikKIHsK
LSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
KCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KGZyYW1lKTsKICAgICBXS0V2ZW50
TW9kaWZpZXJzIG1vZGlmaWVycyA9IHBhcnNlTW9kaWZpZXJBcnJheShjb250ZXh0LCBtb2RpZmll
ckFycmF5KTsKQEAgLTMxNiw3ICszMTYsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
OmtleURvd24oSlNTdHJpbmdSZWYga2V5LCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXksCiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0
ZUtleURvd25NZXNzYWdlQm9keShrZXksIG1vZGlmaWVycywgbG9jYXRpb24pOwogCi0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5k
bGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5Lmdl
dCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBr
ZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCkBAIC0z
MjQsNyArMzI0LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFzeW5j
aHJvbm91c0tleURvd24oSlNTdHJpbmdSZWYga2V5KQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBFdmVudFNlbmRlck1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJFdmVudFNlbmRlciIpKTsKICAgICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0
aW9uYXJ5UmVmPiBrZXlEb3duTWVzc2FnZUJvZHkgPSBjcmVhdGVLZXlEb3duTWVzc2FnZUJvZHko
a2V5LCAwIC8qIG1vZGlmaWVycyAqLywgMCAvKiBsb2NhdGlvbiAqLyk7CiAKLSAgICBXS0J1bmRs
ZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1
bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZl
bnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwga2V5RG93bk1lc3NhZ2VCb2R5LmdldCgpKTsKIH0K
IAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5KGludCB4LCBpbnQg
eSkKQEAgLTM0NCw3ICszNDQsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNl
U2Nyb2xsQnkoaW50IHgsIGludCB5KQogICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVm
KEFkb3B0V0ssIFdLRG91YmxlQ3JlYXRlKHkpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2
ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwogCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhh
c2VzKGludCB4LCBpbnQgeSwgSlNTdHJpbmdSZWYgcGhhc2VTdHIsIEpTU3RyaW5nUmVmIG1vbWVu
dHVtU3RyLCBib29sIGFzeW5jU2Nyb2xsaW5nKQpAQCAtMzk3LDkgKzM5Nyw5IEBAIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhh
c2VzKGludCB4LCBpbnQKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2Fn
ZUJvZHkuZ2V0KCksIG1vbWVudHVtS2V5LmdldCgpLCBtb21lbnR1bVJlZi5nZXQoKSk7CiAKICAg
ICBpZiAoYXN5bmNTY3JvbGxpbmcpCi0gICAgICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCkpOwogICAgIGVsc2UK
LSAgICAgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3Vz
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVy
TWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQog
CiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRpbnVvdXNNb3VzZVNjcm9sbEJ5KGlu
dCB4LCBpbnQgeSwgYm9vbCBwYWdlZCkKQEAgLTQyMywxMiArNDIzLDEyIEBAIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6Y29udGludW91c01vdXNlU2Nyb2xsQnkoaW50IHgsIGludCB5LCBi
b29sIHBhZ2VkKQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBwYWdlZFJlZihBZG9wdFdL
LCBXS1VJbnQ2NENyZWF0ZShwYWdlZCkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgcGFnZWRLZXkuZ2V0KCksIHBhZ2VkUmVmLmdldCgpKTsK
IAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiBKU1Zh
bHVlUmVmIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNvbnRleHRDbGljaygpCiB7Ci0gICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICNpZiBFTkFCTEUo
Q09OVEVYVF9NRU5VUykKQEAgLTQ1Nyw0MyArNDU3LDQzIEBAIEpTVmFsdWVSZWYgRXZlbnRTZW5k
aW5nQ29udHJvbGxlcjo6Y29udGV4dENsaWNrKCkKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6dGV4dFpvb21JbigpCiB7CiAgICAgLy8gRW5zdXJlIHBhZ2Ugem9vbSBpcyByZXNldC4KLSAg
ICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCksIDEpOworICAgIFdLQnVuZGxlUGFnZVNldFBhZ2Vab29tRmFjdG9yKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgMSk7CiAKLSAgICBkb3Vi
bGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpv
b21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFj
dG9yICogWm9vbU11bHRpcGxpZXJSYXRpbyk7CisgICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1
bmRsZVBhZ2VHZXRUZXh0Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAqIFpvb21NdWx0
aXBsaWVyUmF0aW8pOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRleHRab29t
T3V0KCkKIHsKICAgICAvLyBFbnN1cmUgcGFnZSB6b29tIGlzIHJlc2V0LgotICAgIFdLQnVuZGxl
UGFnZVNldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSwgMSk7CisgICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKIAotICAgIGRvdWJsZSB6b29tRmFj
dG9yID0gV0tCdW5kbGVQYWdlR2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3RvcihJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgLyBab29t
TXVsdGlwbGllclJhdGlvKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdl
dFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2Uo
KSk7CisgICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFjdG9yIC8gWm9vbU11bHRpcGxpZXJSYXRp
byk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6em9vbVBhZ2VJbigpCiB7CiAg
ICAgLy8gRW5zdXJlIHRleHQgem9vbSBpcyByZXNldC4KLSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0
Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIDEpOwor
ICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKSwgMSk7CiAKLSAgICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVu
ZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKSk7Ci0gICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFjdG9yICogWm9vbU11bHRpcGxpZXJS
YXRpbyk7CisgICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBhZ2VHZXRQYWdlWm9vbUZh
Y3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdL
QnVuZGxlUGFnZVNldFBhZ2Vab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAqIFpvb21NdWx0aXBsaWVyUmF0aW8pOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Onpvb21QYWdlT3V0KCkKIHsKICAgICAvLyBFbnN1
cmUgdGV4dCB6b29tIGlzIHJlc2V0LgotICAgIFdLQnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9y
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgMSk7CisgICAgV0tCdW5k
bGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpLCAxKTsKIAotICAgIGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0
UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgLyBab29tTXVsdGlwbGllclJhdGlvKTsKKyAg
ICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdl
U2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCB6b29tRmFjdG9yIC8gWm9vbU11bHRpcGxpZXJSYXRpbyk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6c2NhbGVQYWdlQnkoZG91YmxlIHNjYWxlLCBkb3VibGUgeCwgZG91
YmxlIHkpCiB7CiAgICAgV0tQb2ludCBvcmlnaW4gPSB7IHgsIHkgfTsKLSAgICBXS0J1bmRsZVBh
Z2VTZXRTY2FsZUF0T3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2Uo
KSwgc2NhbGUsIG9yaWdpbik7CisgICAgV0tCdW5kbGVQYWdlU2V0U2NhbGVBdE9yaWdpbihJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNjYWxlLCBvcmlnaW4pOwog
fQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTUxNCw3ICs1MTQsNyBAQCB2b2lkIEV2
ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmFkZFRvdWNoUG9pbnQoaW50IHgsIGludCB5KQogICAgIFdL
UmV0YWluUHRyPFdLVUludDY0UmVmPiB5UmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKHkpKTsK
ICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlL
ZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
TmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dXBkYXRlVG91
Y2hQb2ludChpbnQgaW5kZXgsIGludCB4LCBpbnQgeSkKQEAgLTUzOCw3ICs1MzgsNyBAQCB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQg
eCwgaW50IHkpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHlSZWYoQWRvcHRXSywgV0tV
SW50NjRDcmVhdGUoeSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250
cm9sbGVyOjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9v
bCBlbmFibGUpCkBAIC01NjgsNyArNTY4LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVy
OjpzZXRUb3VjaE1vZGlmaWVyKGNvbnN0IEpTU3RyaW5nUmVmICZtb2RpZmllciwgYm9vbAogICAg
IFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBlbmFibGVSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVh
dGUoZW5hYmxlKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCBlbmFibGVLZXkuZ2V0KCksIGVuYWJsZVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5
LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgp
LCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogCkBAIC01ODksNyArNTg5
LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzZXRUb3VjaFBvaW50UmFkaXVzKGlu
dCByYWRpdXNYLCBpbnQgcmFkaXVzWSkKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJl
ZihBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShyYWRpdXNZKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0
SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgp
KTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVz
c2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVz
c2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2
b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoU3RhcnQoKQpAQCAtNjAxLDcgKzYwMSw3
IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hTdGFydCgpCiAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3VjaFN0YXJ0IikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0o
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVz
c2FnZU5hbWUuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0
U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQo
KSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hNb3ZlKCkKQEAg
LTYxMyw3ICs2MTMsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRvdWNoTW92ZSgp
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaE1vdmUiKSk7CiAgICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3Vj
aEVuZCgpCkBAIC02MjUsNyArNjI1LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0
b3VjaEVuZCgpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lKEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUb3VjaEVuZCIpKTsKICAgICBX
S0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3Nh
Z2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5
bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50
U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDAp
OworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2Vu
ZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xs
ZXI6OnRvdWNoQ2FuY2VsKCkKQEAgLTYzNyw3ICs2MzcsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OnRvdWNoQ2FuY2VsKCkKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3Vi
TWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlRvdWNo
Q2FuY2VsIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9k
eS5nZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwogCi0g
ICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFt
ZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xlYXJUb3VjaFBvaW50cygpCkBAIC02NDksNyArNjQ5LDcg
QEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpjbGVhclRvdWNoUG9pbnRzKCkKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc3ViTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNsZWFyVG91Y2hQb2ludHMiKSk7CiAgICAgV0tEaWN0aW9u
YXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5Lmdl
dCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91
c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1l
c3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBX
S0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpyZWxl
YXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCkBAIC02NjUsNyArNjY1LDcgQEAgdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjpyZWxlYXNlVG91Y2hQb2ludChpbnQgaW5kZXgpCiAgICAgV0tSZXRh
aW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGluZGV4
KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3lu
Y2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxl
cjo6Y2FuY2VsVG91Y2hQb2ludChpbnQgaW5kZXgpCkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpjYW5jZWxUb3VjaFBvaW50KGludCBpbmRleCkKICAgICBX
S1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gaW5kZXhSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUo
aW5kZXgpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIGluZGV4S2V5LmdldCgpLCBpbmRleFJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBF
dmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgp
LCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJvbGxlci5jcHAKaW5k
ZXggMTgzZmY1ZWQwM2E5MDZkNDc3NTRlNmMyODNkNjFkMmI2ODA0YWYxMS4uZmQwY2MzYTc4YWE0
OWM4YTZmZjQ4NWY2YTk5MDM2ZjAyZjJmMmM5MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9HQ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVyLmNwcApAQCAtNTIsMTcgKzUy
LDE3IEBAIEpTQ2xhc3NSZWYgR0NDb250cm9sbGVyOjp3cmFwcGVyQ2xhc3MoKQogCiB2b2lkIEdD
Q29udHJvbGxlcjo6Y29sbGVjdCgpCiB7Ci0gICAgV0tCdW5kbGVHYXJiYWdlQ29sbGVjdEphdmFT
Y3JpcHRPYmplY3RzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7CisgICAgV0tC
dW5kbGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5idW5kbGUoKSk7CiB9CiAKIHZvaWQgR0NDb250cm9sbGVyOjpjb2xsZWN0T25BbHRl
cm5hdGVUaHJlYWQoYm9vbCB3YWl0VW50aWxEb25lKQogewotICAgIFdLQnVuZGxlR2FyYmFnZUNv
bGxlY3RKYXZhU2NyaXB0T2JqZWN0c09uQWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgd2FpdFVudGlsRG9uZSk7CisgICAgV0tCdW5k
bGVHYXJiYWdlQ29sbGVjdEphdmFTY3JpcHRPYmplY3RzT25BbHRlcm5hdGVUaHJlYWRGb3JEZWJ1
Z2dpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCB3YWl0VW50aWxEb25l
KTsKIH0KIAogc2l6ZV90IEdDQ29udHJvbGxlcjo6Z2V0SlNPYmplY3RDb3VudCgpCiB7Ci0gICAg
cmV0dXJuIFdLQnVuZGxlR2V0SmF2YVNjcmlwdE9iamVjdHNDb3VudChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCkpOworICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFTY3JpcHRPYmpl
Y3RzQ291bnQoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpKTsKIH0KIAogLy8g
T2JqZWN0IENyZWF0aW9uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCmluZGV4IGQyNmVkOTRiZjAxNWNlMzEzZjg1
YjYzYTE2YjE4ODRlNzRlMTdhNjUuLjQ0ZWEzOTE1MGNiZDgyYTI1NzAzYzM2Y2ZiOTAyODEzZDJm
Yzc3ZTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCkBAIC00MSw3ICs0MSw3IEBACiAKIG5hbWVzcGFjZSBX
VFIgewogCi1JbmplY3RlZEJ1bmRsZSYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpCitJbmplY3Rl
ZEJ1bmRsZSYgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIEluamVj
dGVkQnVuZGxlJiBzaGFyZWQgPSAqbmV3IEluamVjdGVkQnVuZGxlOwogICAgIHJldHVybiBzaGFy
ZWQ7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlLmgKaW5kZXggOGYwYTg0MDQ4MDk1ODhhOWYzYjRkMDgyZmI5NzM5YjJlZTVj
NzkzZC4uNjAzNTQzNGM5YjQzMmNhMTI5MTIzODllZTExZmZmNWYyNTJlNDFjNSAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBJbmplY3RlZEJ1bmRsZVBhZ2U7CiAKIGNsYXNz
IEluamVjdGVkQnVuZGxlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGUmIHNo
YXJlZCgpOworICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZSYgc2luZ2xldG9uKCk7CiAKICAgICAv
LyBJbml0aWFsaXplIHRoZSBJbmplY3RlZEJ1bmRsZS4KICAgICB2b2lkIGluaXRpYWxpemUoV0tC
dW5kbGVSZWYsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlvblVzZXJEYXRhKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWlu
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGVNYWluLmNwcAppbmRleCA5YzRiMDNlY2U2YmM1MGEzZWY2MTY1NjE3NDgzMzU4OTQ2NzM0MjJm
Li40ZjEyNzIyMTQ3OGZkMDU0N2NkNzVkODJkNmQwYTgxMjhhZjA0YTY4IDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlTWFpbi5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZU1haW4uY3BwCkBAIC0zMSw1ICszMSw1IEBACiBleHRlcm4gIkMiCiB2b2lkIFdLQnVuZGxl
SW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlvblVz
ZXJEYXRhKQogewotICAgIFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmluaXRpYWxpemUo
YnVuZGxlLCBpbml0aWFsaXphdGlvblVzZXJEYXRhKTsKKyAgICBXVFI6OkluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5pbml0aWFsaXplKGJ1bmRsZSwgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSk7
CiB9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0lu
amVjdGVkQnVuZGxlUGFnZS5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKaW5kZXggMDhmODExNTllNDdiN2EwYWNmMzkxYzI2
ZTU5ODIwNWRlNTBkNDU1MC4uM2JhMjhhNjg5YzM3NzFlNjUwZWQ5MTA3YjA2OTMxN2MwZDNkNWE1
NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2UuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcApAQCAtMjQwLDcgKzI0MCw3IEBAIHN0YXRpYyBp
bmxpbmUgV1RGOjpTdHJpbmcgcGF0aFN1aXRhYmxlRm9yVGVzdFJlc3VsdChXS1VSTFJlZiBmaWxl
VXJsKQogICAgIGlmICghaXNMb2NhbEZpbGVTY2hlbWUoc2NoZW1lU3RyaW5nLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuIHRvV1RGU3RyaW5nKGFkb3B0V0soV0tVUkxDb3B5U3RyaW5nKGZpbGVVcmwp
KSk7CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1h
aW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdL
QnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgV0tSZXRhaW5QdHI8
V0tVUkxSZWY+IG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlVUkwobWFp
bkZyYW1lKSk7CiAgICAgaWYgKCFtYWluRnJhbWVVUkwpCiAgICAgICAgIG1haW5GcmFtZVVSTCA9
IGFkb3B0V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKQEAg
LTQ2Myw3ICs0NjMsNyBAQCBzdGF0aWMgdm9pZCBkdW1wTG9hZEV2ZW50KFdLQnVuZGxlRnJhbWVS
ZWYgZnJhbWUsIGNvbnN0IGNoYXIqIGV2ZW50TmFtZSkKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIiAtICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGV2ZW50TmFtZSk7CiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHVtcFJlcXVlc3REZXNjcmlwdGlvblN1aXRhYmxlRm9y
VGVzdFJlc3VsdChXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgU3RyaW5nQnVpbGRlciYgc3RyaW5n
QnVpbGRlcikKQEAgLTY1MiwzMiArNjUyLDMyIEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpz
aG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lCiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1l
KFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT50ZXN0VVJMKCkpIHsKKyAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSkgewogICAg
ICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdGVzdFVSTCA9IGFkb3B0V0soV0tCdW5kbGVGcmFt
ZUNvcHlQcm92aXNpb25hbFVSTChmcmFtZSkpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RVUkwuZ2V0KCkpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zZXRUZXN0VVJMKHRlc3RV
UkwuZ2V0KCkpOwogICAgIH0KIAogICAgIHBsYXRmb3JtRGlkU3RhcnRQcm92aXNpb25hbExvYWRG
b3JGcmFtZShmcmFtZSk7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRTdGFydFByb3Zpc2lv
bmFsTG9hZEZvckZyYW1lIik7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFRv
cExvYWRpbmdGcmFtZShmcmFtZSk7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudG9wTG9hZGluZ0ZyYW1lKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5zZXRUb3BMb2FkaW5nRnJhbWUoZnJhbWUpOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZFN0b3BQcm92aXNpb25hbEZyYW1lTG9hZHMoKSkK
KyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
U3RvcFByb3Zpc2lvbmFsRnJhbWVMb2FkcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1l
LCAic3RvcHBpbmcgbG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxi
YWNrIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlU2VydmVyUmVk
aXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQog
ewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlk
UmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUiKTsKQEAgLTY4
NSwxMCArNjg1LDEwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSwgV0tFcnJvclJlZikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENh
bGxiYWNrcygpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZl
bnQoZnJhbWUsICJkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yIik7CiAKICAgICBmcmFt
ZURpZENoYW5nZUxvY2F0aW9uKGZyYW1lKTsKQEAgLTY5NiwxMCArNjk2LDEwIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWRGYWlsUHJvdmlzaW9uYWxMb2FkV2l0aEVycm9yRm9yRnJhbWUo
V0tCdW5kbGVGcmFtZVJlCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDb21taXRMb2Fk
Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxv
YWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRpZENvbW1pdExvYWRGb3JGcmFtZSIpOwpA
QCAtNzA3LDEzICs3MDcsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENvbW1pdExv
YWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogCiB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRmluaXNoUHJvZ3Jlc3MoKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFByb2dyZXNzRmluaXNo
ZWRDYWxsYmFjaygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcFByb2dyZXNzRmluaXNoZWRDYWxsYmFjaygpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgicG9zdFBy
b2dyZXNzRmluaXNoZWROb3RpZmljYXRpb25cbiIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvblxuIik7
CiB9CiAKIGVudW0gRnJhbWVOYW1lUG9saWN5IHsgU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSwg
U2hvdWxkSW5jbHVkZUZyYW1lTmFtZSB9OwpAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkdW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUs
IFN0cmluZ0J1aWxkCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKIHsKLSAgICBB
U1NFUlQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSk7CisgICAgQVNT
RVJUKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpOwogCiAgICAg
Ly8gRm9yY2UgYSBwYWludCBiZWZvcmUgZHVtcGluZy4gVGhpcyBtYXRjaGVzIER1bXBSZW5kZXJU
cmVlIG9uIFdpbmRvd3MuIChEdW1wUmVuZGVyVHJlZSBvbiBNYWMKICAgICAvLyBkb2VzIHRoaXMg
YXQgYSBzbGlnaHRseSBkaWZmZXJlbnQgdGltZS4pIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcvYi81
NTQ2OT4gZm9yIGRldGFpbHMuCkBAIC04NDUsMTMgKzg0NSwxMyBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZHVtcCgpCiAgICAgU3RyaW5nIHVybCA9IHRvV1RGU3RyaW5nKGFkb3B0V0soV0tV
UkxDb3B5U3RyaW5nKHVybFJlZi5nZXQoKSkpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWltZVR5cGUgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5TUlNRVR5cGVGb3JSZXNvdXJj
ZVdpdGhVUkwoZnJhbWUsIHVybFJlZi5nZXQoKSkpOwogICAgIGlmICh1cmwuZmluZCgiZHVtcEFz
VGV4dC8iKSAhPSBub3RGb3VuZCB8fCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1pbWVU
eXBlLmdldCgpLCAidGV4dC9wbGFpbiIpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5kdW1wQXNUZXh0KGZhbHNlKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+ZHVtcEFzVGV4dChmYWxzZSk7CiAKICAgICBT
dHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKLSAgICBzd2l0Y2ggKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPndoYXRUb0R1bXAoKSkgeworICAgIHN3aXRjaCAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+d2hhdFRvRHVtcCgpKSB7CiAg
ICAgY2FzZSBUZXN0UnVubmVyOjpSZW5kZXJUcmVlOiB7Ci0gICAgICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5pc1ByaW50aW5nKCkpCisgICAgICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5pc1ByaW50aW5nKCkpCiAg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhhZG9wdFdLKFdLQnVu
ZGxlUGFnZUNvcHlSZW5kZXJUcmVlRXh0ZXJuYWxSZXByZXNlbnRhdGlvbkZvclByaW50aW5nKG1f
cGFnZSkpLmdldCgpKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29weVJlbmRlclRyZWVFeHRl
cm5hbFJlcHJlc2VudGF0aW9uKG1fcGFnZSkpLmdldCgpKSk7CkBAIC04NzAsMzQgKzg3MCwzNCBA
QCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZHVtcCgpCiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wQWxsRnJhbWVTY3JvbGxQb3NpdGlvbnMoKSkKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFsbEZyYW1lU2Nyb2xsUG9zaXRpb25z
KCkpCiAgICAgICAgIGR1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucyhzdHJpbmdCdWlsZGVyKTsK
LSAgICBlbHNlIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKSkKKyAgICBlbHNlIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wTWFpbkZyYW1lU2Nyb2xs
UG9zaXRpb24oKSkKICAgICAgICAgZHVtcEZyYW1lU2Nyb2xsUG9zaXRpb24oV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKG1fcGFnZSksIHN0cmluZ0J1aWxkZXIpOwogCi0gICAgaWYgKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBCYWNrRm9yd2FyZExpc3Rz
Rm9yQWxsV2luZG93cygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZHVtcEJh
Y2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhzdHJpbmdCdWlsZGVyKTsKKyAgICBpZiAoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEJhY2tGb3J3YXJk
TGlzdHNGb3JBbGxXaW5kb3dzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5kdW1wQmFja0ZvcndhcmRMaXN0c0ZvckFsbFBhZ2VzKHN0cmluZ0J1aWxkZXIpOwogCi0gICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zaG91bGREdW1wUGl4ZWxzKCkgJiYgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBpeGVscygpKSB7Cisg
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zaG91bGREdW1wUGl4ZWxzKCkgJiYg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFBpeGVs
cygpKSB7CiAgICAgICAgIFdLU25hcHNob3RPcHRpb25zIG9wdGlvbnMgPSBrV0tTbmFwc2hvdE9w
dGlvbnNTaGFyZWFibGUgfCBrV0tTbmFwc2hvdE9wdGlvbnNJblZpZXdDb29yZGluYXRlczsKLSAg
ICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBTZWxlY3Rpb25SZWN0KCkpCisgICAgICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU2VsZWN0aW9uUmVjdCgpKQogICAgICAgICAgICAg
b3B0aW9ucyB8PSBrV0tTbmFwc2hvdE9wdGlvbnNQYWludFNlbGVjdGlvblJlY3RhbmdsZTsKIAot
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0UGl4ZWxSZXN1bHQoYWRvcHRXSyhX
S0J1bmRsZVBhZ2VDcmVhdGVTbmFwc2hvdFdpdGhPcHRpb25zKG1fcGFnZSwgV0tCdW5kbGVGcmFt
ZUdldFZpc2libGVDb250ZW50Qm91bmRzKFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShtX3BhZ2Up
KSwgb3B0aW9ucykpLmdldCgpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldFBpeGVsUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0
aW9ucyhtX3BhZ2UsIFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJvdW5kcyhXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSksIG9wdGlvbnMpKS5nZXQoKSk7CiAgICAgICAgIGlm
IChXS0J1bmRsZVBhZ2VJc1RyYWNraW5nUmVwYWludHMobV9wYWdlKSkKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRSZXBhaW50UmVjdHMoYWRvcHRXSyhXS0J1bmRsZVBh
Z2VDb3B5VHJhY2tlZFJlcGFpbnRSZWN0cyhtX3BhZ2UpKS5nZXQoKSk7CisgICAgICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0UmVwYWludFJlY3RzKGFkb3B0V0soV0tCdW5k
bGVQYWdlQ29weVRyYWNrZWRSZXBhaW50UmVjdHMobV9wYWdlKSkuZ2V0KCkpOwogICAgIH0KIAot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUoKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5kb25lKCk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJl
ZiBmcmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmlu
ZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRGaW5pc2hM
b2FkRm9yRnJhbWUiKTsKIAogICAgIGZyYW1lRGlkQ2hhbmdlTG9jYXRpb24oZnJhbWUsIC8qc2hv
dWxkRHVtcCovIHRydWUpOwpAQCAtOTA1LDEwICs5MDUsMTAgQEAgdm9pZCBJbmplY3RlZEJ1bmRs
ZVBhZ2U6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0Vycm9yUmVmKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVtcExvYWRF
dmVudChmcmFtZSwgImRpZEZhaWxMb2FkV2l0aEVycm9yIik7CiAKICAgICBmcmFtZURpZENoYW5n
ZUxvY2F0aW9uKGZyYW1lKTsKQEAgLTkxNiwyOSArOTE2LDI5IEBAIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjpkaWRGYWlsTG9hZFdpdGhFcnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUsIFdLCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlVGl0bGVGb3JGcmFt
ZShXS1N0cmluZ1JlZiB0aXRsZSwgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47
CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7Ci0gICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgZHVtcEZyYW1lRGVzY3Jp
cHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVUaXRsZTogIik7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsK
KyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcFRpdGxlQ2hhbmdlcygpKSB7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiVElUTEUgQ0hBTkdFRDogJyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dU
RlN0cmluZyh0aXRsZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIidc
biIpOwogICAgIH0KIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENsZWFyV2luZG93Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFt
ZSwgV0tCdW5kbGVTY3JpcHRXb3JsZFJlZiB3b3JsZCkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBKU0ds
b2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dEZvcldvcmxkKGZyYW1lLCB3b3JsZCk7CkBAIC05NTAsMjEgKzk1MCwyMSBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lLCBXS0J1bmRsZQogICAgIH0KIAogICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uID0gMDsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5tYWtlV2luZG93T2JqZWN0
KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4
Y2VwdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmV2ZW50U2VuZGluZ0NvbnRy
b2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXh0SW5wdXRDb250cm9sbGVyKCktPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAm
ZXhjZXB0aW9uKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuZ2NDb250cm9sbGVy
KCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtl
V2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVj
dChjb250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRl
eHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CiAKICAgICBXZWJDb3JlVGVzdFN1cHBvcnQ6OmluamVj
dEludGVybmFsc09iamVjdChjb250ZXh0KTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkK
IHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRp
ZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUiKTsKQEAgLTk3MiwxMCArOTcyLDEwIEBAIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKFdL
QnVuZGxlRnJhbWVSZWYgZnJhbWUpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUGVy
Zm9ybUNsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lLCBXS1VSTFJlZiB1cmwsIGRvdWJsZSBkZWxheSwgZG91YmxlIGRhdGUpCiB7Ci0g
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tz
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
QEAgLTk4Myw3ICs5ODMsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbFBlcmZvcm1D
bGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdQogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMOiAi
KTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0UmVzdWx0KHVy
bCkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIFxuIik7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
KyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU2FtZURvY3Vt
ZW50TmF2aWdhdGlvbkZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLU2FtZURvY3Vt
ZW50TmF2aWdhdGlvblR5cGUgdHlwZSkKQEAgLTk5MiwxMCArOTkyLDEwIEBAIHZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVG
cmFtZVJlZiBmcmFtCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVu
dExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJh
bWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVt
cExvYWRFdmVudChmcmFtZSwgImRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lIik7CiAKICAg
ICB1bnNpZ25lZCBwZW5kaW5nRnJhbWVVbmxvYWRFdmVudHMgPSBXS0J1bmRsZUZyYW1lR2V0UGVu
ZGluZ1VubG9hZENvdW50KGZyYW1lKTsKQEAgLTEwMDUsNDAgKzEwMDUsNDAgQEAgdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEZpbmlzaERvY3VtZW50TG9hZEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUpCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gaGFz
ICIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcihwZW5kaW5nRnJhbWVVbmxv
YWRFdmVudHMpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBvbnVubG9h
ZCBoYW5kbGVyKHMpXG4iKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1
dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5kbGVPbmxvYWRFdmVudHNGb3JG
cmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2Fs
bGJhY2tzKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVy
KCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVtcExvYWRFdmVu
dChmcmFtZSwgImRpZEhhbmRsZU9ubG9hZEV2ZW50c0ZvckZyYW1lIik7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50Rm9yRnJhbWUoV0tCdW5k
bGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiZGlkRGlzcGxheUluc2VjdXJlQ29udGVu
dFxuIik7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLm91dHB1dFRleHQoImRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRcbiIpOwog
fQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50Rm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiZGlkUnVuSW5zZWN1cmVD
b250ZW50XG4iKTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiZGlkUnVuSW5zZWN1cmVDb250ZW50XG4iKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZERldGVjdFhTU0ZvckZyYW1lKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImRpZERldGVjdFhTU1xuIik7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBG
cmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQoImRpZERldGVjdFhTU1xuIik7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tC
dW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllciwgV0tVUkxSZXF1ZXN0UmVmIHJlcXVl
c3QsIGJvb2wpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVu
bmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5p
bmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybCA9
IGFkb3B0V0soV0tVUkxSZXF1ZXN0Q29weVVSTChyZXF1ZXN0KSk7CkBAIC0xMDU5LDggKzEwNTks
OCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNIVFRQT3JIVFRQU1NjaGVtZShXS1N0cmluZ1JlZiBz
Y2hlbWUpCiAKIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVx
dWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS1VSTFJlcXVlc3RSZWYgcmVxdWVzdCwgV0tVUkxSZXNw
b25zZVJlZiByZXNwb25zZSkKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKQotICAgICAgICAmJiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKQorICAgICAgICAmJiBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VM
b2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFNlbmRSZXF1ZXN0ICIpOwpA
QCAtMTA2OCwxNSArMTA2OCwxNSBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdl
Ojp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiByZWRpcmVjdFJlc3BvbnNlICIpOwogICAgICAg
ICBkdW1wUmVzcG9uc2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSwg
c3RyaW5nQnVpbGRlcik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkgJiYgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGwo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gcmVkaXJl
Y3RVUkwgPSBhZG9wdFdLKFdLVVJMUmVzcG9uc2VDb3B5VVJMKHJlc3BvbnNlKSk7Ci0gICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkgJiYgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRSZXF1ZXN0UmV0dXJuc051bGxPblJl
ZGlyZWN0KCkgJiYgcmVkaXJlY3RVUkwpIHsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoIlJldHVybmluZyBudWxsIGZvciB0aGlzIHJlZGlyZWN0XG4iKTsKKyAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSAmJiBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT53aWxsU2VuZFJlcXVlc3RSZXR1
cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVSTCkgeworICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgiUmV0dXJuaW5nIG51bGwgZm9yIHRoaXMgcmVk
aXJlY3RcbiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTEwODksOCArMTA4OSw4
IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVzdEZv
ckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICYmICFXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKGhvc3QuZ2V0KCksICIyNTUuMjU1LjI1NS4yNTUiKSAvLyBVc2VkIGluIHNv
bWUgdGVzdHMgdGhhdCBleHBlY3QgdG8gZ2V0IGJhY2sgYW4gZXJyb3IuCiAgICAgICAgICYmICFp
c0xvY2FsSG9zdChob3N0LmdldCgpKSkgewogICAgICAgICBib29sIG1haW5GcmFtZUlzRXh0ZXJu
YWwgPSBmYWxzZTsKLSAgICAgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RS
dW5uaW5nKCkpIHsKLSAgICAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdGcmFtZSgpOworICAgICAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkgeworICAgICAgICAgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
dG9wTG9hZGluZ0ZyYW1lKCk7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gbWFp
bkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUpKTsKICAg
ICAgICAgICAgIGlmICghbWFpbkZyYW1lVVJMIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcobWFpbkZyYW1lVVJMLmdldCgpKSkuZ2V0KCksICJh
Ym91dDpibGFuayIpKQogICAgICAgICAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0V0soV0tC
dW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKQEAgLTExMDQsNyArMTEw
NCw3IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5kUmVxdWVz
dEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsKICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykpOwogICAg
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTExNSwyMCArMTExNSwyMCBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5k
bGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogCiB2
b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIs
IFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRD
YWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3Ry
aW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBkdW1wUmVzb3VyY2VVUkwoaWRlbnRp
Zmllciwgc3RyaW5nQnVpbGRlcik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiIC0gZGlkUmVjZWl2ZVJlc3BvbnNlICIpOwogICAgICAgICBkdW1wUmVzcG9uc2VEZXNjcmlw
dGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRlcik7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOwogICAgIH0KIAogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQorICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJl
c291cmNlUmVzcG9uc2VNSU1FVHlwZXMoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHVybCA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNvcHlVUkwocmVzcG9u
c2UpKTsKQEAgLTExNDgsNyArMTE0OCw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRS
ZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCCiAKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9y
UmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCwgdWlu
dDY0X3QpCkBAIC0xMTU3LDI0ICsxMTU3LDI0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCCiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yUmVzb3VyY2UoV0tCdW5k
bGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyKQogewotICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxi
YWNrcygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CiAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZpZXIsIHN0cmluZ0J1aWxkZXIpOwogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gZGlkRmluaXNoTG9hZGluZ1xuIik7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlk
RmFpbExvYWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVp
bnQ2NF90IGlkZW50aWZpZXIsIFdLRXJyb3JSZWYgZXJyb3IpCiB7Ci0gICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVz
b3VyY2VMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKQEAgLTExODMs
MjEgKzExODMsMjEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9yUmVz
b3VyY2UoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmUKIAogICAgIGR1bXBFcnJvckRl
c2NyaXB0aW9uU3VpdGFibGVGb3JUZXN0UmVzdWx0KGVycm9yLCBzdHJpbmdCdWlsZGVyKTsKICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9
CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDYWNoZVJlc3BvbnNlKFdLQnVuZGxl
UGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRlbnRpZmllcikKIHsKLSAgICBp
ZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcFdpbGxDYWNoZVJlc3BvbnNlKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wV2lsbENhY2hlUmVzcG9uc2Uo
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxk
ZXI7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIoaWRlbnRpZmllcik7CiAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSB3aWxsQ2FjaGVSZXNwb25zZTogY2FsbGVkXG4i
KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAKICAgICAvLyBUaGUgZGVmYXVsdCBiZWhhdmlv
ciBpcyB0aGUgY2FjaGUgdGhlIHJlc3BvbnNlLgogICAgIHJldHVybiB0cnVlOwpAQCAtMTIyOCwx
MCArMTIyOCwxMCBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6dW5hYmxlVG9JbXBsZW1lbnRQ
b2xpY3koV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRgogCiBXS0J1bmRsZVBhZ2VQb2xp
Y3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdlOjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0
aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRs
ZU5hdmlnYXRpb25BY3Rpb25SZWYgbmF2aWdhdGlvbkFjdGlvbiwgV0tVUkxSZXF1ZXN0UmVmIHJl
cXVlc3QsIFdLVHlwZVJlZiogdXNlckRhdGEpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGlj
eUFjdGlvblVzZTsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVFbmFibGVkKCkpCiAg
ICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25Vc2U7CiAKICAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3Qp
KTsKQEAgLTEyNTYsMTAgKzEyNTYsMTAgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXS0IKICAgICB9
CiAKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPm5vdGlmeURvbmUoKTsKKyAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPm5vdGlm
eURvbmUoKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5pc1BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSgpKQorICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSgpKQog
ICAgICAgICByZXR1cm4gV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uVXNlOwogICAgIHJldHVybiBX
S0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25QYXNzVGhyb3VnaDsKIH0KQEAgLTEyNzcsNyArMTI3Nyw3
IEBAIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvbiBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRlY2lkZVBv
bGljeUZvclJlc3BvbnNlKFdLQnVuZGxlUGFnCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiUG9saWN5IGRlbGVnYXRlOiByZXNvdXJjZSBpcyBhbiBhdHRhY2htZW50LCBzdWdn
ZXN0ZWQgZmlsZSBuYW1lIFwnIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RG
U3RyaW5nKGZpbGVuYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
XCdcbiIpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0V0soV0tVUkxSZXNwb25zZUNv
cHlNSU1FVHlwZShyZXNwb25zZSkpOwpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAgc3RhdGljIFdURjo6
U3RyaW5nIGxhc3RGaWxlVVJMUGF0aENvbXBvbmVudChjb25zdCBXVEY6OlN0cmluZyYgcGF0aCkK
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2UsIHVpbnQzMl90IGxpbmVOdW1iZXIpCiB7Ci0gICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
V1RGOjpTdHJpbmcgbWVzc2FnZVN0cmluZyA9IHRvV1RGU3RyaW5nKG1lc3NhZ2UpOwpAQCAtMTM2
OSw0NiArMTM2OSw0NiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VU
b0NvbnNvbGUoV0tTdHJpbmdSZWYgbWVzc2FnZSwgdWludDMyX3QgbAogICAgIH0KICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtZXNzYWdlU3RyaW5nKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdC
dWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGVQYWdlOjp3aWxsU2V0U3RhdHVzYmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQog
ewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFN0YXR1c0NhbGxiYWNrcygp
KQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJVSSBERUxFR0FURSBTVEFUVVMgQ0FMTEJB
Q0s6IHNldFN0YXR1c1RleHQ6Iik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoc3RhdHVzYmFyVGV4dCkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxS
dW5KYXZhU2NyaXB0QWxlcnQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikK
IHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisg
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJBTEVSVDogIik7CiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcobWVzc2FnZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdc
bicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OndpbGxSdW5KYXZhU2NyaXB0Q29uZmlybShXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS0J1bmRs
ZUZyYW1lUmVmKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRl
cjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkNPTkZJUk06ICIpOwogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsKICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4
dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdFByb21wdChXS1N0cmluZ1JlZiBtZXNz
YWdlLCBXS1N0cmluZ1JlZiBkZWZhdWx0VmFsdWUsIFdLQnVuZGxlRnJhbWVSZWYpCkBAIC0xNDE5
LDEyICsxNDE5LDEyIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlw
dFByb21wdChXS1N0cmluZ1JlZiBtZXNzYWdlLCBXS1N0cmluZ1JlCiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCIsIGRlZmF1bHQgdGV4dDogIik7CiAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmQodG9XVEZTdHJpbmcoZGVmYXVsdFZhbHVlKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiB2b2lkIEluamVjdGVkQnVu
ZGxlUGFnZTo6ZGlkUmVhY2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9y
aWdpblJlZiBvcmlnaW4sIGludDY0X3QgdG90YWxCeXRlc05lZWRlZCkKIHsKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEFwcGxpY2F0aW9u
Q2FjaGVEZWxlZ2F0ZUNhbGxiYWNrcygpKSB7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBcHBsaWNhdGlvbkNhY2hlRGVsZWdhdGVD
YWxsYmFja3MoKSkgewogICAgICAgICAvLyBGb3IgZXhhbXBsZSwgbnVtYmVycyBmcm9tIDMwMDAw
IC0gMzk5OTkgd2lsbCBvdXRwdXQgYXMgMzAwMDAuCiAgICAgICAgIC8vIFJvdW5kaW5nIHVwIG9y
IGRvd24gZG9lcyBub3QgcmVhbGx5IG1hdHRlciBmb3IgdGhlc2UgdGVzdHMuIEl0J3MKICAgICAg
ICAgLy8gc3VmZmljaWVudCB0byBqdXN0IGdldCBhIHJhbmdlIG9mIDEwMDAwIHRvIGRldGVybWlu
ZSBpZiB3ZSB3ZXJlCkBAIC0xNDM3LDM2ICsxNDM3LDM2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5T3JpZ2lu
UmVmCiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHRvdGFsU3BhY2VOZWVk
ZWQ6fiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51bWJlcih0cnVuY2F0ZWRTcGFj
ZU5lZWRlZCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRp
b25DYWNoZVF1b3RhKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPnNob3VsZERpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gUmVzZXQgZGVmYXVsdCBhcHBsaWNhdGlvbiBj
YWNoZSBxdW90YS4KLSAgICBXS0J1bmRsZVJlc2V0QXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3Rh
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgYWRvcHRXSyhXS1NlY3VyaXR5T3Jp
Z2luQ29weVRvU3RyaW5nKG9yaWdpbikpLmdldCgpKTsKKyAgICBXS0J1bmRsZVJlc2V0QXBwbGlj
YXRpb25DYWNoZU9yaWdpblF1b3RhKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgYWRvcHRXSyhXS1NlY3VyaXR5T3JpZ2luQ29weVRvU3RyaW5nKG9yaWdpbikpLmdldCgpKTsK
IH0KIAogdWludDY0X3QgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRFeGNlZWREYXRhYmFzZVF1b3Rh
KFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLCBXS1N0cmluZ1JlZiBkYXRhYmFzZU5hbWUsIFdL
U3RyaW5nUmVmIGRhdGFiYXNlRGlzcGxheU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRRdW90YUJ5dGVz
LCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNhZ2VCeXRlcywgdWludDY0X3QgY3VycmVudERhdGFi
YXNlVXNhZ2VCeXRlcywgdWludDY0X3QgZXhwZWN0ZWRVc2FnZUJ5dGVzKQogewotICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VD
YWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdC
dWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJh
bCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZv
clNlY3VyaXR5T3JpZ2luOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0
eU9yaWdpblRvU3RyKG9yaWdpbikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVy
YWwoIiBkYXRhYmFzZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJp
bmcoZGF0YWJhc2VOYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwot
ICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVy
LnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0
VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KIAogICAgIHVpbnQ2NF90IGRl
ZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKLSAgICBkb3VibGUgdGVzdERlZmF1bHRRdW90
YSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmRhdGFiYXNlRGVmYXVs
dFF1b3RhKCk7CisgICAgZG91YmxlIHRlc3REZWZhdWx0UXVvdGEgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5kYXRhYmFzZURlZmF1bHRRdW90YSgpOwogICAgIGlm
ICh0ZXN0RGVmYXVsdFF1b3RhID49IDApCiAgICAgICAgIGRlZmF1bHRRdW90YSA9IHRlc3REZWZh
dWx0UXVvdGE7CiAKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgbmV3UXVvdGEgPSBkZWZhdWx0UXVv
dGE7CiAKLSAgICBkb3VibGUgbWF4UXVvdGEgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5kYXRhYmFzZU1heFF1b3RhKCk7CisgICAgZG91YmxlIG1heFF1b3RhID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VNYXhRdW90YSgp
OwogICAgIGlmIChtYXhRdW90YSA+PSAwKSB7CiAgICAgICAgIGlmIChkZWZhdWx0UXVvdGEgPCBl
eHBlY3RlZFVzYWdlQnl0ZXMgJiYgZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1heFF1b3RhKSB7CiAg
ICAgICAgICAgICBuZXdRdW90YSA9IGV4cGVjdGVkVXNhZ2VCeXRlczsKQEAgLTE0NzUsNyArMTQ3
NSw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJhc2VRdW90
YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGluY3JlYXNlZCBx
dW90YSB0byAiKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTnVtYmVyKG5ld1F1
b3RhKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICAg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0
dXJuIG5ld1F1b3RhOwpAQCAtMTU0MCwzNyArMTU0MCwzNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkQ2hhbmdlU2VsZWN0aW9uKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1Jl
ZiBubwogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdLQnVu
ZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxs
YmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdpbkVkaXRpbmdJbkRPTVJhbmdlOiIpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwg
cmFuZ2UpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4g
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0
aW5nKCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRFbmRFZGl0aW5nKFdL
QnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdD
YWxsYmFja3MoKSkgeworICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1
aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFs
KCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRFbmRFZGl0aW5nSW5ET01SYW5nZToiKTsKICAgICAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCks
IHJhbmdlKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRp
dGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShX
S0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZVRv
UmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFjdGlvbikKIHsKLSAgICBpZiAoIUluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKQEAgLTE1Nzks
NyArMTU3OSw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnROb2RlKFdL
QnVuZGxlTm9kZUhhbmRsZVJlZiBub2RlLCBXS0J1bmRsZVJhCiAgICAgICAgICJXZWJWaWV3SW5z
ZXJ0QWN0aW9uRHJvcHBlZCIsCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CisgICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBF
ZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVy
OwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6
IHNob3VsZEluc2VydE5vZGU6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGR1bXBQ
YXRoKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgbm9kZSkpOwpAQCAtMTU4OCwxNCArMTU4OCwxNCBA
QCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0Tm9kZShXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYQogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExp
dGVyYWwoIiBnaXZlbkFjdGlvbjoiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoaW5z
ZXJ0YWN0aW9uc3RyaW5nW2FjdGlvbl0pOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigp
LT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNo
b3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwgV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBy
YW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFjdGlvbikKIHsKLSAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyICppbnNlcnRhY3Rpb25zdHJpbmdbXSA9IHsKQEAg
LTE2MDQsNyArMTYwNCw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRJbnNlcnRU
ZXh0KFdLU3RyaW5nUmVmIHRleHQsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSCiAgICAgICAgICJXZWJW
aWV3SW5zZXJ0QWN0aW9uRHJvcHBlZCIsCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7
CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVM
RUdBVEU6IHNob3VsZEluc2VydFRleHQ6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKHRleHQpKTsKQEAgLTE2MTMsMjkgKzE2MTMsMjkgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwgV0tCdW5kbGVS
YW5nZUhhbmRsZVIKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5B
Y3Rpb246Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmlu
Z1thY3Rpb25dKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0
cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1
cm4gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dF
ZGl0aW5nKCk7CiB9CiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGREZWxldGVSYW5n
ZShXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
aWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJp
bmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkRGVsZXRlRE9NUmFuZ2U6Iik7CiAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdlLCBtX3dvcmxkLmdldCgpLCBy
YW5nZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRp
bmcoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVk
UmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBmcm9tUmFuZ2UsIFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgdG9SYW5nZSwgV0tBZmZpbml0eVR5cGUgYWZmaW5pdHksIGJvb2wgc3RpbGxTZWxlY3Rp
bmcpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqYWZmaW5pdHlz
dHJpbmdbXSA9IHsKQEAgLTE2NDcsNyArMTY0Nyw3IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdl
OjpzaG91bGRDaGFuZ2VTZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgZnJvbVJh
CiAgICAgICAgICJUUlVFIgogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlm
IChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRp
dGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBz
aG91bGRDaGFuZ2VTZWxlY3RlZERPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgZnJvbVJhbmdlKSk7CkBAIC0x
NjU4LDk4ICsxNjU4LDk4IEBAIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRDaGFuZ2VT
ZWxlY3RlZFJhbmdlKFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgZnJvbVJhCiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIHN0aWxsU2VsZWN0aW5nOiIpOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChib29sc3RyaW5nW3N0aWxsU2VsZWN0aW5nXSk7IAogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVy
KCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFwcGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xh
cmF0aW9uUmVmIHN0eWxlLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogewotICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVy
biB0cnVlOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkg
ewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hvdWxkQXBwbHlTdHlsZToi
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoc3R5bGVEZWNUb1N0cihzdHlsZSkpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0b0VsZW1lbnRzSW5ET01SYW5n
ZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1f
d29ybGQuZ2V0KCksIHJhbmdlKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0
cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICByZXR1cm4gSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7
CisgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNo
b3VsZEFsbG93RWRpdGluZygpOwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQmVn
aW5FZGl0aW5nKFdLU3RyaW5nUmVmIG5vdGlmaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVk
aXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50
ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdpbkVkaXRpbmc6
Iik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFt
ZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmlu
ZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEVuZEVkaXRpbmcoV0tTdHJp
bmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5n
QnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgi
RURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVuZEVkaXRpbmc6Iik7CiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZpY2F0aW9uTmFtZSkpOwogICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRU
ZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZShXS1N0cmluZ1JlZiBub3RpZmljYXRpb25OYW1l
KQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkK
KyAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5pc1Rlc3RSdW5uaW5nKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNr
cygpKQogICAgICAgICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7
CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJW
aWV3RGlkQ2hhbmdlOiIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5v
dGlmaWNhdGlvbk5hbWUpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1
aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDaGFu
Z2VTZWxlY3Rpb24oV0tTdHJpbmdSZWYgbm90aWZpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1w
RWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5nZVNlbGVj
dGlvbjoiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3RpZmljYXRp
b25OYW1lKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRv
U3RyaW5nKCkpOwogfQogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnN1cHBvcnRzRnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwg
V0tGdWxsU2NyZWVuS2V5Ym9hcmRSZXF1ZXN0VHlwZSByZXF1ZXN0VHlwZSkKIHsKLSAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3Jl
ZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRl
eHQoInN1cHBvcnRzRnVsbFNjcmVlbigpID09IHRydWVcbiIpOworICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxi
YWNrcygpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4dCgi
c3VwcG9ydHNGdWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjplbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVu
ZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVIYW5kbGVSZWYgZWxlbWVudFJlZikKIHsK
LSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVt
cEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
Lm91dHB1dFRleHQoImVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7CisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2Ny
ZWVuQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KCJlbnRlckZ1bGxTY3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCi0gICAgaWYgKCFJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVo
YXZpb3IoKSkgeworICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKICAgICAgICAgV0tCdW5kbGVQ
YWdlV2lsbEVudGVyRnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAgV0tCdW5kbGVQYWdlRGlk
RW50ZXJGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgIH0KQEAgLTE3NTcsMTAgKzE3NTcsMTAgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV0tCdW5k
bGVQYWdlUmVmIHBhZ2VSZWYsIFdLQnUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRG
dWxsU2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2Rl
SGFuZGxlUmVmIGVsZW1lbnRSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJleGl0RnVsbFNjcmVlbkZvckVs
ZW1lbnQoKVxuIik7CisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KCJleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQo
KVxuIik7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
Pmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CisgICAgaWYgKCFJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3Io
KSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAg
ICAgICAgIFdLQnVuZGxlUGFnZURpZEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgIH0KQEAg
LTE3NjgsMjIgKzE3NjgsMjIgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxsU2Ny
ZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW4KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwgV0tS
ZWN0LCBXS1JlY3QpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4iKTsK
KyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLm91dHB1dFRleHQoImJlZ2FuRW50ZXJGdWxsU2NyZWVuKClcbiIpOwogfQogCiB2b2lk
IEluamVjdGVkQnVuZGxlUGFnZTo6YmVnYW5FeGl0RnVsbFNjcmVlbihXS0J1bmRsZVBhZ2VSZWYs
IFdLUmVjdCwgV0tSZWN0KQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxiYWNrcygpKQotICAgICAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiYmVnYW5FeGl0RnVsbFNjcmVlbigpXG4i
KTsKKyAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+c2hv
dWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLm91dHB1dFRleHQoImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxuIik7CiB9CiAKIHZv
aWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpjbG9zZUZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmIHBh
Z2VSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJjbG9zZUZ1bGxTY3JlZW4oKVxuIik7CisgICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2Ny
ZWVuQ2FsbGJhY2tzKCkpCisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRw
dXRUZXh0KCJjbG9zZUZ1bGxTY3JlZW4oKVxuIik7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7
CisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT5oYXND
dXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRXhp
dEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgICAgIFdLQnVuZGxlUGFnZURpZEV4aXRGdWxsU2Ny
ZWVuKHBhZ2VSZWYpOwogICAgIH0KQEAgLTE4OTIsMjMgKzE4OTIsMjMgQEAgU3RyaW5nIEluamVj
dGVkQnVuZGxlUGFnZTo6cGxhdGZvcm1SZXNwb25zZU1pbWVUeXBlKFdLVVJMUmVzcG9uc2VSZWYp
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpmcmFtZURpZENoYW5nZUxvY2F0aW9uKFdLQnVu
ZGxlRnJhbWVSZWYgZnJhbWUsIGJvb2wgc2hvdWxkRHVtcCkKIHsKLSAgICBpZiAoZnJhbWUgIT0g
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdGcmFtZSgpKQorICAgIGlmIChmcmFt
ZSAhPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudG9wTG9hZGluZ0ZyYW1lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRUb3BMb2FkaW5n
RnJhbWUoMCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldFRvcExvYWRpbmdG
cmFtZSgwKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT53YWl0VG9EdW1wKCkpCisgICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0
UnVubmVyKCktPndhaXRUb0R1bXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5zaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkpIHsKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnByb2Nlc3NXb3JrUXVldWUoKTsKKyAgICBpZiAoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNob3VsZFByb2Nlc3NXb3JrUXVldWUoKSkgeworICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucHJvY2Vzc1dvcmtRdWV1ZSgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHNob3VsZER1bXApCi0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPmR1bXAoKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+ZHVtcCgpOwogICAgIGVsc2UKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmRvbmUoKTsKKyAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmRvbmUoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCBiNGI1
NWJiOTA2ODZhOGFhZDE0NWM5Y2RkODMxODI2MGM2YTI3ZGE3Li40Mjg4M2IxODM4YWUzMmUwYzc0
MDRhMDZkMDlhNmJkNGZmNzA1MWViIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBKU0Ns
YXNzUmVmIFRlc3RSdW5uZXI6OndyYXBwZXJDbGFzcygpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlz
cGxheSgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVQYWdlRm9y
Y2VSZXBhaW50KHBhZ2UpOwogICAgIFdLQnVuZGxlUGFnZVNldFRyYWNrc1JlcGFpbnRzKHBhZ2Us
IHRydWUpOwogICAgIFdLQnVuZGxlUGFnZVJlc2V0VHJhY2tlZFJlcGFpbnRzKHBhZ2UpOwpAQCAt
MTI5LDcgKzEyOSw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
Ym9vbCBlbmFibGVkLCBib29sIHBlcm1pc3NpdmUpCiAgICAgbV9wb2xpY3lEZWxlZ2F0ZUVuYWJs
ZWQgPSBlbmFibGVkOwogICAgIG1fcG9saWN5RGVsZWdhdGVQZXJtaXNzaXZlID0gcGVybWlzc2l2
ZTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
c2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKQEAgLTE0MSwyNCArMTQxLDI0IEBA
IHZvaWQgVGVzdFJ1bm5lcjo6d2FpdEZvclBvbGljeURlbGVnYXRlKCkKIHZvaWQgVGVzdFJ1bm5l
cjo6d2FpdFVudGlsRG9uZSgpCiB7CiAgICAgbV93YWl0VG9EdW1wID0gdHJ1ZTsKLSAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpCisg
ICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dU
aW1lcigpKQogICAgICAgICBpbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5lZWRl
ZCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQo
KQogewogICAgIGludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJGQUlMOiBUaW1lZCBvdXQgd2FpdGluZyBm
b3Igbm90aWZ5RG9uZSB0byBiZSBjYWxsZWRcblxuIik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmRvbmUoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkub3V0cHV0VGV4
dCgiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG5c
biIpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5kb25lKCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKG1fd2FpdFRv
RHVtcCAmJiAhSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRvcExvYWRpbmdGcmFtZSgpKQotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5kdW1wKCk7CisgICAgaWYgKG1f
d2FpdFRvRHVtcCAmJiAhSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRvcExvYWRpbmdGcmFt
ZSgpKQorICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5kdW1wKCk7
CiAKICAgICAvLyBXZSBkb24ndCBjYWxsIGludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1l
cigpIGhlcmUsIGV2ZW4gaWYgd2UgY29udGludWUgdG8gd2FpdCBmb3IgYSBsb2FkIHRvIGZpbmlz
aC4KICAgICAvLyBUaGUgdGVzdCBpcyBzdGlsbCBzdWJqZWN0IHRvIHRpbWVvdXQgY2hlY2tpbmcg
LSBpdCBpcyBiZXR0ZXIgdG8gZGV0ZWN0IGFuIGFzeW5jIHRpbWVvdXQgaW5zaWRlIFdlYktpdFRl
c3RSdW5uZXIKQEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIFRlc3RSdW5uZXI6OmFkZFVzZXJTY3Jp
cHQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbQogICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzb3VyY2VXSyA9IHRvV0soc291cmNlKTsKICAgICBX
S1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiBzY3JpcHRXb3JsZChBZG9wdFdLLCBX
S0J1bmRsZVNjcmlwdFdvcmxkQ3JlYXRlV29ybGQoKSk7CiAKLSAgICBXS0J1bmRsZUFkZFVzZXJT
Y3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZUdyb3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwg
MCwgMCwgMCwKKyAgICBXS0J1bmRsZUFkZFVzZXJTY3JpcHQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCks
IHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwgMCwgMCwgMCwKICAgICAgICAgKHJ1
bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQgOiBrV0tJbmplY3RBdERvY3VtZW50
RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5q
ZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KQEAgLTE4MiwyNSArMTgyLDI1IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYgc291cmNlLCBib29sIGFsbEZyYW1l
cykKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291cmNlV0sgPSB0b1dLKHNvdXJjZSk7
CiAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3JsZFJlZj4gc2NyaXB0V29ybGQoQWRv
cHRXSywgV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxkKCkpOwogCi0gICAgV0tCdW5kbGVB
ZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgc2NyaXB0V29ybGQuZ2V0KCksIHNvdXJj
ZVdLLmdldCgpLCAwLCAwLCAwLAorICAgIFdLQnVuZGxlQWRkVXNlclN0eWxlU2hlZXQoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZUdyb3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwgMCwgMCwg
MCwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVjdEluQWxsRnJhbWVzIDoga1dLSW5qZWN0
SW5Ub3BGcmFtZU9ubHkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjprZWVwV2ViSGlzdG9yeSgp
CiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RTZXRBZGRzVmlzaXRlZExpbmtz
KHRydWUpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wb3N0U2V0QWRkc1Zpc2l0
ZWRMaW5rcyh0cnVlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpleGVjQ29tbWFuZChKU1N0cmlu
Z1JlZiBuYW1lLCBKU1N0cmluZ1JlZiBhcmd1bWVudCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVj
dXRlRWRpdGluZ0NvbW1hbmQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgp
LCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKGFyZ3VtZW50KS5nZXQoKSk7CisgICAgV0tCdW5kbGVQ
YWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSwgdG9XSyhuYW1lKS5nZXQoKSwgdG9XSyhhcmd1bWVudCkuZ2V0KCkpOwogfQog
CiBib29sIFRlc3RSdW5uZXI6OmZpbmRTdHJpbmcoSlNTdHJpbmdSZWYgdGFyZ2V0LCBKU1ZhbHVl
UmVmIG9wdGlvbnNBcnJheUFzVmFsdWUpCiB7CiAgICAgV0tGaW5kT3B0aW9ucyBvcHRpb25zID0g
MDsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYg
Y29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwog
ICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJsZW5ndGgiKSk7CiAgICAgSlNPYmplY3RSZWYg
b3B0aW9uc0FycmF5ID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFs
dWUsIDApOwpAQCAtMjMxLDM3ICsyMzEsMzcgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5n
KEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIG9w
dGlvbnMpOworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0YXJnZXQpLmdldCgpLCBvcHRpb25z
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFiYXNlcygpCiB7Ci0gICAgV0tC
dW5kbGVDbGVhckFsbERhdGFiYXNlcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkp
OworICAgIFdLQnVuZGxlQ2xlYXJBbGxEYXRhYmFzZXMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVp
bnQ2NF90IHF1b3RhKQogewotICAgIHJldHVybiBXS0J1bmRsZVNldERhdGFiYXNlUXVvdGEoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBxdW90YSk7CisgICAgcmV0dXJuIFdLQnVu
ZGxlU2V0RGF0YWJhc2VRdW90YShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IHF1b3RhKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVz
KCkKIHsKLSAgICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuYnVuZGxlKCkpOworICAgIFdLQnVuZGxlQ2xlYXJBcHBsaWNhdGlvbkNhY2hlKElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlRm9yT3JpZ2luKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsK
LSAgICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7CisgICAgV0tCdW5kbGVD
bGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LmJ1bmRsZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dEFwcENhY2hlTWF4aW11bVNpemUodWludDY0X3Qgc2l6ZSkKIHsKLSAgICBXS0J1bmRsZVNldEFw
cENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBzaXpl
KTsKKyAgICBXS0J1bmRsZVNldEFwcENhY2hlTWF4aW11bVNpemUoSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLmJ1bmRsZSgpLCBzaXplKTsKIH0KIAogbG9uZyBsb25nIFRlc3RSdW5uZXI6OmFw
cGxpY2F0aW9uQ2FjaGVEaXNrVXNhZ2VGb3JPcmlnaW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewot
ICAgIHJldHVybiBXS0J1bmRsZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4oSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOworICAgIHJldHVybiBX
S0J1bmRsZUdldEFwcENhY2hlVXNhZ2VGb3JPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCB0b1dLKG9yaWdpbikuZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmRpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQpAQCAtMjg2LDkgKzI4
Niw5IEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZVJlZiBzdHJpbmdBcnJheVRvSlMoSlNDb250ZXh0
UmVmIGNvbnRleHQsIFdLQXJyYXlSZWYgc3RyaW5nCiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6
b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkKIHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5
UmVmPiBvcmlnaW5zKEFkb3B0V0ssIFdLQnVuZGxlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkpKTsKKyAgICBXS1JldGFpblB0
cjxXS0FycmF5UmVmPiBvcmlnaW5zKEFkb3B0V0ssIFdLQnVuZGxlQ29weU9yaWdpbnNXaXRoQXBw
bGljYXRpb25DYWNoZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpKTsKIAot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAg
cmV0dXJuIHN0cmluZ0FycmF5VG9KUyhjb250ZXh0LCBvcmlnaW5zLmdldCgpKTsKQEAgLTI5Niw3
ICsyOTYsNyBAQCBKU1ZhbHVlUmVmIFRlc3RSdW5uZXI6Om9yaWdpbnNXaXRoQXBwbGljYXRpb25D
YWNoZSgpCiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNDb21tYW5kRW5hYmxlZChKU1N0cmluZ1JlZiBu
YW1lKQogewotICAgIHJldHVybiBXS0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCkp
OworICAgIHJldHVybiBXS0J1bmRsZVBhZ2VJc0VkaXRpbmdDb21tYW5kRW5hYmxlZChJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCkpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKGJvb2wpCkBAIC0zMDgsNTgg
KzMwOCw1OCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldENhbk9wZW5XaW5kb3dzKGJvb2wpCiB2b2lk
IFRlc3RSdW5uZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4ga2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJXZWJLaXRYU1NBdWRpdG9yRW5hYmxlZCIpKTsKLSAgICBXS0J1bmRsZU92ZXJy
aWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBrZXkuZ2V0KCks
IGVuYWJsZWQpOworICAgIFdLQnVuZGxlT3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5u
ZXIoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGtleS5nZXQoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMoYm9vbCBlbmFi
bGVkKQogewotICAgIFdLQnVuZGxlU2V0QWxsb3dVbml2ZXJzYWxBY2Nlc3NGcm9tRmlsZVVSTHMo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgIFdLQnVuZGxlU2V0QWxsb3dVbml2ZXJzYWxB
Y2Nlc3NGcm9tRmlsZVVSTHMoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJs
ZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZUdyb3VwKCksIGVuYWJsZWQpOworICAgIFdLQnVuZGxlU2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZp
bGVVUkxzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXRQbHVnaW5zRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRQ
bHVnaW5zRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5kbGVTZXRQ
bHVnaW5zRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGVuYWJsZWQp
CiB7Ci0gICAgIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
R3JvdXAoKSwgZW5hYmxlZCk7CisgICAgIFdLQnVuZGxlU2V0SmF2YVNjcmlwdENhbkFjY2Vzc0Ns
aXBib2FyZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgIFdL
QnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7
CisgICAgIFdLQnVuZGxlU2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3Jv
dXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UG9wdXBCbG9ja2luZ0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgICBXS0J1bmRsZVNldFBvcHVwQmxvY2tpbmdFbmFi
bGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICAgV0tCdW5kbGVTZXRQb3B1cEJsb2Nr
aW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewot
ICAgICBXS0J1bmRsZVNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgp
LCBlbmFibGVkKTsKKyAgICAgV0tCdW5kbGVTZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6YWRk
T3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3Qs
IGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7Ci0gICAgV0tCdW5kbGVBZGRPcmln
aW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCks
IHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQo
KSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyk7CisgICAgV0tCdW5kbGVBZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9X
SyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgp
LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cmVt
b3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdSZWYgc291cmNlT3JpZ2luLCBK
U1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvbkhv
c3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7Ci0gICAgV0tCdW5kbGVSZW1v
dmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29s
KS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3Vi
ZG9tYWlucyk7CisgICAgV0tCdW5kbGVSZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5n
ZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhv
c3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAKIGJvb2wgVGVzdFJ1
bm5lcjo6aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KQogewotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94
VmlzaWJsZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1haW5GcmFtZSwgcGFn
ZUluZGV4KTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwor
ICAgIHJldHVybiBXS0J1bmRsZUlzUGFnZUJveFZpc2libGUoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBtYWluRnJhbWUsIHBhZ2VJbmRleCk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVs
ZW1lbnQsIEpTU3RyaW5nUmVmIHZhbHVlKQpAQCAtMzc0LDIwICszNzQsMjAgQEAgdm9pZCBUZXN0
UnVubmVyOjpzZXRWYWx1ZUZvclVzZXIoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYg
ZWxlbWVudCwgSlNTdHIKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1bHQoSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTog
VXNlIGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2Vk
LgotICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhKEFkb3B0V0ssIFdLQnVuZGxl
Q3JlYXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldEF1
ZGlvUmVzdWx0KGF1ZGlvRGF0YS5nZXQoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBh
dWRpb0RhdGEoQWRvcHRXSywgV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIGNvbnRleHQsIGRhdGEpKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0QXVkaW9SZXN1bHQoYXVkaW9EYXRhLmdldCgp
KTsKICAgICBtX3doYXRUb0R1bXAgPSBBdWRpbzsKICAgICBtX2R1bXBQaXhlbHMgPSBmYWxzZTsK
IH0KIAogdW5zaWduZWQgVGVzdFJ1bm5lcjo6d2luZG93Q291bnQoKQogewotICAgIHJldHVybiBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUNvdW50KCk7CisgICAgcmV0dXJuIEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlQ291bnQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpj
bGVhckJhY2tGb3J3YXJkTGlzdCgpCiB7Ci0gICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDbGVh
cihXS0J1bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpKSk7CisgICAgV0tCdW5kbGVCYWNrRm9yd2FyZExpc3RDbGVhcihXS0J1
bmRsZVBhZ2VHZXRCYWNrRm9yd2FyZExpc3QoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKSk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgpAQCAtMzk5LDE4ICszOTks
MTggQEAgdm9pZCBUZXN0UnVubmVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiB3aW5kb3dPYmplY3QKIAogdm9pZCBUZXN0UnVubmVyOjpzaG93V2Vi
SW5zcGVjdG9yKCkKIHsKLSAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5kbGVQYWdlR2V0
SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworICAg
IFdLQnVuZGxlSW5zcGVjdG9yU2hvdyhXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5l
cjo6Y2xvc2VXZWJJbnNwZWN0b3IoKQogewotICAgIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2UoV0tC
dW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSkpOworICAgIFdLQnVuZGxlSW5zcGVjdG9yQ2xvc2UoV0tCdW5kbGVQYWdlR2V0SW5zcGVj
dG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0
KTsKLSAgICBXS0J1bmRsZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBh
Z2VHZXRJbnNwZWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSwg
c2NyaXB0V0suZ2V0KCkpOworICAgIFdLQnVuZGxlSW5zcGVjdG9yRXZhbHVhdGVTY3JpcHRGb3JU
ZXN0KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
cGFnZSgpLT5wYWdlKCkpLCBzY3JpcHRXSy5nZXQoKSk7CiB9CiAKIHR5cGVkZWYgV1RGOjpIYXNo
TWFwPHVuc2lnbmVkLCBXS1JldGFpblB0cjxXS0J1bmRsZVNjcmlwdFdvcmxkUmVmPiA+IFdvcmxk
TWFwOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoSlNDb250ZXh0UmVmIGNvbnRleHQsIHVuc2lnbmVkIHdvCiAKICAgICBX
S0J1bmRsZUZyYW1lUmVmIGZyYW1lID0gV0tCdW5kbGVGcmFtZUZvckphdmFTY3JpcHRDb250ZXh0
KGNvbnRleHQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIGZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Cisg
ICAgICAgIGZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAKICAgICBKU0dsb2JhbENvbnRleHRSZWYganND
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0Rm9yV29ybGQoZnJhbWUs
IHdvcmxkLmdldCgpKTsKICAgICBKU0V2YWx1YXRlU2NyaXB0KGpzQ29udGV4dCwgc2NyaXB0LCAw
LCAwLCAwLCAwKTsgCkBAIC00NjIsMjggKzQ2MiwyOCBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldFBP
U0lYTG9jYWxlKEpTU3RyaW5nUmVmIGxvY2FsZSkKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRUZXh0
RGlyZWN0aW9uKEpTU3RyaW5nUmVmIGRpcmVjdGlvbikKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0g
V0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdl
KCktPnBhZ2UoKSk7CiAgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVTZXRUZXh0RGlyZWN0aW9uKG1h
aW5GcmFtZSwgdG9XSyhkaXJlY3Rpb24pLmdldCgpKTsKIH0KICAgICAKIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0U2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoYm9vbCBzaG91
bGRTdGF5T25QYWdlKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0TmV3QmVm
b3JlVW5sb2FkUmV0dXJuVmFsdWUoIXNob3VsZFN0YXlPblBhZ2UpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wb3N0TmV3QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoIXNob3VsZFN0
YXlPblBhZ2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldERlZmVyc0xvYWRpbmcoYm9vbCBz
aG91bGREZWZlckxvYWRpbmcpCiB7Ci0gICAgV0tCdW5kbGVQYWdlU2V0RGVmZXJzTG9hZGluZyhJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHNob3VsZERlZmVyTG9hZGlu
Zyk7CisgICAgV0tCdW5kbGVQYWdlU2V0RGVmZXJzTG9hZGluZyhJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCksIHNob3VsZERlZmVyTG9hZGluZyk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0UGFnZVZpc2liaWxpdHkoSlNTdHJpbmdSZWYgc3RhdGUpCiB7Ci0gICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldEhpZGRlbihKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKHN0YXRlLCAiaGlkZGVuIikgfHwgSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dGF0ZSwgInByZXJlbmRlciIpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0
SGlkZGVuKEpTU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJoaWRkZW4iKSB8fCBK
U1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0YXRlLCAicHJlcmVuZGVyIikpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OnJlc2V0UGFnZVZpc2liaWxpdHkoKQogewotICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5zZXRIaWRkZW4oZmFsc2UpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5zZXRIaWRkZW4oZmFsc2UpOwogfQogCiB0eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNp
Z25lZCwgSlNWYWx1ZVJlZj4gQ2FsbGJhY2tNYXA7CkBAIC01MDUsNyArNTA1LDcgQEAgc3RhdGlj
IHZvaWQgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgsIEpTVmFsdWVSZWYg
Y2FsbGJhY2spCiAgICAgaWYgKCFjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tC
dW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVm
IG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tC
dW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNWYWx1ZVBy
b3RlY3QoY29udGV4dCwgY2FsbGJhY2spOwogICAgIGNhbGxiYWNrTWFwKCkuYWRkKGluZGV4LCBj
YWxsYmFjayk7CkBAIC01MTUsNyArNTE1LDcgQEAgc3RhdGljIHZvaWQgY2FsbFRlc3RSdW5uZXJD
YWxsYmFjayh1bnNpZ25lZCBpbmRleCkKIHsKICAgICBpZiAoIWNhbGxiYWNrTWFwKCkuY29udGFp
bnMoaW5kZXgpKQogICAgICAgICByZXR1cm47Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3Jp
cHRDb250ZXh0KG1haW5GcmFtZSk7CiAgICAgSlNPYmplY3RSZWYgY2FsbGJhY2sgPSBKU1ZhbHVl
VG9PYmplY3QoY29udGV4dCwgY2FsbGJhY2tNYXAoKS50YWtlKGluZGV4KSwgMCk7CiAgICAgSlNP
YmplY3RDYWxsQXNGdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaywgSlNDb250ZXh0R2V0R2xvYmFs
T2JqZWN0KGNvbnRleHQpLCAwLCAwLCAwKTsKQEAgLTUyNSwzMCArNTI1LDMwIEBAIHN0YXRpYyB2
b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgpCiB2b2lkIFRlc3RSdW5u
ZXI6OmFkZENocm9tZUlucHV0RmllbGQoSlNWYWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNo
ZVRlc3RSdW5uZXJDYWxsYmFjayhBZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2tJRCwgY2FsbGJh
Y2spOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0QWRkQ2hyb21lSW5wdXRGaWVs
ZCgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wb3N0QWRkQ2hyb21lSW5wdXRG
aWVsZCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUNocm9tZUlucHV0RmllbGQoSlNW
YWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhSZW1vdmVD
aHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wb3N0UmVtb3ZlQ2hyb21lSW5wdXRGaWVsZCgpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OmZvY3VzV2ViVmlldyhKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewogICAgIGNh
Y2hlVGVzdFJ1bm5lckNhbGxiYWNrKEZvY3VzV2ViVmlld0NhbGxiYWNrSUQsIGNhbGxiYWNrKTsK
LSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdEZvY3VzV2ViVmlldygpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wb3N0Rm9jdXNXZWJWaWV3KCk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0QmFja2luZ1NjYWxlRmFjdG9yKGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0
b3IsIEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2so
U2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2tJRCwgY2FsbGJhY2spOwotICAgIEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGJhY2tpbmdTY2FsZUZh
Y3Rvcik7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBvc3RTZXRCYWNraW5nU2Nh
bGVGYWN0b3IoYmFja2luZ1NjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRX
aW5kb3dJc0tleShib29sIGlzS2V5KQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
b3N0U2V0V2luZG93SXNLZXkoaXNLZXkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5wb3N0U2V0V2luZG93SXNLZXkoaXNLZXkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNhbGxB
ZGRDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2soKQpAQCAtNTc5LDEyICs1NzksMTIgQEAgc3RhdGlj
IGlubGluZSBib29sIHRvQm9vbChKU1N0cmluZ1JlZiB2YWx1ZSkKIHZvaWQgVGVzdFJ1bm5lcjo6
b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5nUmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZh
bHVlKQogewogICAgIC8vIEZJWE1FOiBoYW5kbGUgbm9uLWJvb2xlYW4gcHJlZmVyZW5jZXMuCi0g
ICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3Jv
dXAoKSwgdG9XSyhwcmVmZXJlbmNlKS5nZXQoKSwgdG9Cb29sKHZhbHVlKSk7CisgICAgV0tCdW5k
bGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAo
KSwgdG9XSyhwcmVmZXJlbmNlKS5nZXQoKSwgdG9Cb29sKHZhbHVlKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QWx3YXlzQWNjZXB0Q29va2llcyhib29sIGFjY2VwdCkKIHsKLSAgICBXS0J1
bmRsZVNldEFsd2F5c0FjY2VwdENvb2tpZXMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBhY2NlcHQpOworICAgIFdLQnVuZGxlU2V0QWx3YXlzQWNjZXB0Q29va2llcyhJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIGFjY2VwdCk7CiB9CiAKIGRvdWJsZSBUZXN0
UnVubmVyOjpwcmVjaXNlVGltZSgpCkBAIC01OTgsNyArNTk4LDcgQEAgdm9pZCBUZXN0UnVubmVy
OjpzZXRVc2VyU3R5bGVTaGVldEVuYWJsZWQoYm9vbCBlbmFibGVkKQogCiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IGVtcHR5VXJsID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiIikpOwogICAgIFdLU3RyaW5nUmVmIGxvY2F0aW9uID0gZW5hYmxlZCA/IG1fdXNl
clN0eWxlU2hlZXRMb2NhdGlvbi5nZXQoKSA6IGVtcHR5VXJsLmdldCgpOwotICAgIFdLQnVuZGxl
U2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgbG9jYXRpb24pOworICAg
IFdLQnVuZGxlU2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlR3JvdXAoKSwg
bG9jYXRpb24pOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCkBAIC02MTEsNjggKzYxMSw2OCBAQCB2b2lkIFRlc3RS
dW5uZXI6OnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSlNTdHJpbmdSZWYgbG9jYXRpb24pCiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGJvb2wgZW5hYmxl
ZCkKIHsKLSAgICBXS0J1bmRsZVNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3Jv
dXAoKSwgZW5hYmxlZCk7CisgICAgV0tCdW5kbGVTZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5k
bGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIGVuYWJs
ZWQpOworICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnBhZ2UoKS0+cGFnZSgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRTZXJp
YWxpemVIVFRQTG9hZHMoKQogewotICAgIFdLQnVuZGxlU2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCB0cnVlKTsKKyAgICBXS0J1bmRsZVNl
dFNlcmlhbExvYWRpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVl
c3RzKCkKIHsKLSAgICBXS0J1bmRsZURpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cyhJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCkpOworICAgIFdLQnVuZGxlRGlzcGF0Y2hQZW5kaW5n
TG9hZFJlcXVlc3RzKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6c2V0Q2FjaGVNb2RlbChpbnQgbW9kZWwpCiB7Ci0gICAgV0tCdW5k
bGVTZXRDYWNoZU1vZGVsKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbW9kZWwp
OworICAgIFdLQnVuZGxlU2V0Q2FjaGVNb2RlbChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1vZGVsKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBc3luY2hyb25vdXNT
cGVsbENoZWNraW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRBc3lu
Y2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7Cisg
ICAgV0tCdW5kbGVTZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5w
YWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Z3JhbnRXZWJOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uKEpTU3RyaW5nUmVmIG9yaWdpbikKIHsKICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gb3JpZ2luV0sgPSB0b1dLKG9yaWdpbik7Ci0gICAgV0tCdW5kbGVTZXRX
ZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQo
KSwgdHJ1ZSk7CisgICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9uKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6ZGVueVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2lu
KQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2lu
KTsKLSAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5w
YWdlKCksIG9yaWdpbldLLmdldCgpLCBmYWxzZSk7CisgICAgV0tCdW5kbGVTZXRXZWJOb3RpZmlj
YXRpb25QZXJtaXNzaW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwg
ZmFsc2UpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBl
cm1pc3Npb25zKCkKIHsKLSAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlmaWNhdGlvblBlcm1p
c3Npb25zKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVJlbW92ZUFsbFdlYk5vdGlm
aWNhdGlvblBlcm1pc3Npb25zKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKIH0KIAogdm9pZCBU
ZXN0UnVubmVyOjpzaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrKEpTVmFsdWVSZWYgbm90aWZp
Y2F0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Cisg
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRl
eHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJh
bWUpOwotICAgIHVpbnQ2NF90IG5vdGlmaWNhdGlvbklEID0gV0tCdW5kbGVHZXRXZWJOb3RpZmlj
YXRpb25JRChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIGNvbnRleHQsIG5vdGlm
aWNhdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBvc3RTaW11bGF0ZVdlYk5v
dGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKKyAgICB1aW50NjRfdCBub3RpZmljYXRp
b25JRCA9IFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoSW5qZWN0ZWRCdW5kbGU6OnNpbmds
ZXRvbigpLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOworICAgIEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmlj
YXRpb25JRCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0R2VvbG9jYXRpb25QZXJtaXNzaW9u
KGJvb2wgZW5hYmxlZCkKIHsKICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgYmUgZG9uZSBieSBm
cmFtZS4KLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0R2VvbG9jYXRpb25QZXJtaXNz
aW9uKGVuYWJsZWQpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5zZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0TW9ja0dl
b2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBkb3VibGUgbG9uZ2l0dWRlLCBkb3Vi
bGUgYWNjdXJhY3ksIEpTVmFsdWVSZWYganNBbHRpdHVkZSwgSlNWYWx1ZVJlZiBqc0FsdGl0dWRl
QWNjdXJhY3ksIEpTVmFsdWVSZWYganNIZWFkaW5nLCBKU1ZhbHVlUmVmIGpzU3BlZWQpCiB7Ci0g
ICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZy
YW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0
ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAKICAgICBi
b29sIHByb3ZpZGVzQWx0aXR1ZGUgPSBmYWxzZTsKQEAgLTcwMyw0NCArNzAzLDQ0IEBAIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24oZG91YmxlIGxhdGl0dWRlLCBk
b3VibGUgbG9uZ2l0dWRlLCBkCiAgICAgICAgIHNwZWVkID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRl
eHQsIGpzU3BlZWQsIDApOwogICAgIH0KIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5z
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwg
cHJvdmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0
aXR1ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBz
cGVlZCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlv
blBvc2l0aW9uKGxhdGl0dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRl
LCBhbHRpdHVkZSwgcHJvdmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBw
cm92aWRlc0hlYWRpbmcsIGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3Io
SlNTdHJpbmdSZWYgbWVzc2FnZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZVdLID0gdG9XSyhtZXNzYWdlKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKG1lc3NhZ2VXSy5nZXQoKSk7
CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0
aW9uVW5hdmFpbGFibGVFcnJvcihtZXNzYWdlV0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNldFVzZXJNZWRpYVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewogICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCBiZSBkb25lIGJ5IGZyYW1lLgotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQpOworICAgIEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQpOwogfQogCiBib29s
IFRlc3RSdW5uZXI6OmNhbGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpOwogICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENs
b3NlT25XZWJWaWV3KG1haW5GcmFtZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNr
TmF2aWdhdGlvbih1bnNpZ25lZCBob3dGYXJCYWNrd2FyZCkKIHsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkucXVldWVCYWNrTmF2aWdhdGlvbihob3dGYXJCYWNrd2FyZCk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlQmFja05hdmlnYXRpb24oaG93RmFyQmFja3dh
cmQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWdu
ZWQgaG93RmFyRm9yd2FyZCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVG
b3J3YXJkTmF2aWdhdGlvbihob3dGYXJGb3J3YXJkKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihob3dGYXJGb3J3YXJkKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJn
ZXQpCiB7Ci0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkxXSyhBZG9wdFdLLCBXS0J1
bmRsZUZyYW1lQ29weVVSTChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKSkpOworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBi
YXNlVVJMV0soQWRvcHRXSywgV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpKTsKICAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsV0soQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoQmFz
ZVVSTChiYXNlVVJMV0suZ2V0KCksIHRvV1RGU3RyaW5nKHRvV0sodXJsKSkudXRmOCgpLmRhdGEo
KSkpOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1cmxTdHJpbmdXSyhBZG9wdFdLLCBX
S1VSTENvcHlTdHJpbmcodXJsV0suZ2V0KCkpKTsKIAotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5xdWV1ZUxvYWQodXJsU3RyaW5nV0suZ2V0KCksIHRvV0sodGFyZ2V0KS5nZXQoKSk7Cisg
ICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5nZXQo
KSwgdG9XSyh0YXJnZXQpLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxvYWRI
VE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwsIEpTU3Ry
aW5nUmVmIHVucmVhY2hhYmxlVVJMKQpAQCAtNzQ5LDQ1ICs3NDksNDUgQEAgdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZUxvYWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVm
IGJhc2VVUkwsIEoKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYmFzZVVSTFdLID0gYmFz
ZVVSTCA/IHRvV0soYmFzZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdW5yZWFjaGFibGVVUkxXSyA9IHVucmVhY2hhYmxlVVJM
ID8gdG9XSyh1bnJlYWNoYWJsZVVSTCkgOiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oKTsKIAot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKGNvbnRlbnRX
Sy5nZXQoKSwgYmFzZVVSTFdLLmdldCgpLCB1bnJlYWNoYWJsZVVSTFdLLmdldCgpKTsKKyAgICBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkSFRNTFN0cmluZyhjb250ZW50V0su
Z2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxXSy5nZXQoKSk7CiB9CiAKIHZv
aWQgVGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5xdWV1ZVJlbG9hZCgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1
ZVJlbG9hZCgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZGluZ1NjcmlwdChKU1N0
cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdL
ID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5xdWV1ZUxvYWRp
bmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5xdWV1ZUxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnF1ZXVlTm9uTG9hZGluZ1NjcmlwdChKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcmlwdFdLID0gdG9XSyhzY3JpcHQpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQoc2NyaXB0V0suZ2V0KCkp
OworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5xdWV1ZU5vbkxvYWRpbmdTY3JpcHQo
c2NyaXB0V0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEhhbmRsZXNBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZXMoYm9vbCBoYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKQog
ewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlIikpOwogICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tCb29sZWFuQ3JlYXRlKGhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMpKTsKLSAg
ICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwg
bWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBdXRo
ZW50aWNhdGlvblVzZXJuYW1lKEpTU3RyaW5nUmVmIHVzZXJuYW1lKQogewogICAgIFdLUmV0YWlu
UHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSIpKTsKICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoSlNT
dHJpbmcodXNlcm5hbWUpKTsKLSAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
KTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0KIAogdm9p
ZCBUZXN0UnVubmVyOjpzZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKEpTU3RyaW5nUmVmIHBhc3N3
b3JkKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdL
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0QXV0aGVudGljYXRpb25QYXNzd29y
ZCIpKTsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoSlNTdHJpbmcocGFzc3dvcmQpKTsKLSAgICBXS0J1bmRsZVBvc3RN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKIH0KIAogYm9vbCBUZXN0UnVubmVyOjpzZWN1cmVFdmVudElucHV0SXNFbmFi
bGVkKCkgY29uc3QKQEAgLTc5NSw3ICs3OTUsNyBAQCBib29sIFRlc3RSdW5uZXI6OnNlY3VyZUV2
ZW50SW5wdXRJc0VuYWJsZWQoKSBjb25zdAogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBt
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2VjdXJl
RXZlbnRJbnB1dElzRW5hYmxlZCIpKTsKICAgICBXS1R5cGVSZWYgcmV0dXJuRGF0YSA9IDA7CiAK
LSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJldHVybkRhdGEpOworICAgIFdL
QnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCku
YnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwLCAmcmV0dXJuRGF0YSk7CiAgICAgcmV0dXJu
IFdLQm9vbGVhbkdldFZhbHVlKHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4ocmV0dXJuRGF0YSkp
OwogfQogCkBAIC04MDMsMTkgKzgwMywxOSBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEJsb2NrQWxs
UGx1Z2lucyhib29sIHNob3VsZEJsb2NrKQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0
QmxvY2tBbGxQbHVnaW5zIikpOwogICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gbWVzc2Fn
ZUJvZHkoQWRvcHRXSywgV0tCb29sZWFuQ3JlYXRlKHNob3VsZEJsb2NrKSk7Ci0gICAgV0tCdW5k
bGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6bnVtYmVyT2ZE
RkdDb21waWxlcyhKU1ZhbHVlUmVmIHRoZUZ1bmN0aW9uKQogewotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBh
Z2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVH
ZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIHJldHVybiBKU0M6Om51bWJlck9m
REZHQ29tcGlsZXMoY29udGV4dCwgdGhlRnVuY3Rpb24pOwogfQogCiBKU1ZhbHVlUmVmIFRlc3RS
dW5uZXI6Om5ldmVySW5saW5lRnVuY3Rpb24oSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikKIHsKLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICByZXR1
cm4gSlNDOjpzZXROZXZlcklubGluZShjb250ZXh0LCB0aGVGdW5jdGlvbik7CiB9CmRpZmYgLS1n
aXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXh0SW5w
dXRDb250cm9sbGVyLmNwcAppbmRleCBhZTczN2ZkYzFmYTQ2MjFkYTk2YjFjNTYzMmE1ODliMzYw
MDU3ZjVkLi5mNGU2OGY2OTU1OWYzOWUzNmFmYzVkZDMyMjgwOGRhNDNlMDg4OGU5IDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRy
b2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGV4
dElucHV0Q29udHJvbGxlci5jcHAKQEAgLTU5LDIyICs1OSwyMiBAQCB2b2lkIFRleHRJbnB1dENv
bnRyb2xsZXI6Om1ha2VXaW5kb3dPYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIHdpbgogCiB2b2lkIFRleHRJbnB1dENvbnRyb2xsZXI6OnNldE1hcmtlZFRleHQoSlNTdHJp
bmdSZWYgdGV4dCwgaW50IGZyb20sIGludCBsZW5ndGgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlU2V0
Q29tcG9zaXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dL
KHRleHQpLmdldCgpLCBmcm9tLCBsZW5ndGgpOworICAgIFdLQnVuZGxlUGFnZVNldENvbXBvc2l0
aW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0ZXh0
KS5nZXQoKSwgZnJvbSwgbGVuZ3RoKTsKIH0KIAogYm9vbCBUZXh0SW5wdXRDb250cm9sbGVyOjpo
YXNNYXJrZWRUZXh0KCkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSGFzQ29tcG9zaXRpb24o
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICByZXR1cm4gV0tC
dW5kbGVQYWdlSGFzQ29tcG9zaXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsKIH0KIAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjp1bm1hcmtUZXh0KCkK
IHsKLSAgICBXS0J1bmRsZVBhZ2VDb25maXJtQ29tcG9zaXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VDb25maXJtQ29tcG9zaXRp
b24oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKIH0KIAogdm9p
ZCBUZXh0SW5wdXRDb250cm9sbGVyOjppbnNlcnRUZXh0KEpTU3RyaW5nUmVmIHRleHQpCiB7Ci0g
ICAgV0tCdW5kbGVQYWdlQ29uZmlybUNvbXBvc2l0aW9uV2l0aFRleHQoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRleHQpLmdldCgpKTsKKyAgICBXS0J1bmRs
ZVBhZ2VDb25maXJtQ29tcG9zaXRpb25XaXRoVGV4dChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCksIHRvV0sodGV4dCkuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXVFIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
YXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcAppbmRl
eCA5MzUyNzcyMjBkZGU2NGFiZjAwNjMyOTM5OTg2NTJhMDg4N2Q2MTFkLi40YjU0MWY1YjNkZjVk
MzE2Y2Q1ODI1NzE3MjE1ODVmODViMDg3ZDJkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXJBdGsuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyBBdGtPYmplY3Qq
IGNoaWxkRWxlbWVudEJ5SWQoQXRrT2JqZWN0KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGlkKQogCiBQ
YXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVy
OjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWQpCiB7Ci0gICAgQXRrT2JqZWN0
KiByb290ID0gQVRLX09CSkVDVChXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIEF0a09iamVjdCogcm9vdCA9IEFU
S19PQkpFQ1QoV0tBY2Nlc3NpYmlsaXR5Um9vdE9iamVjdChJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCkucGFnZSgpLT5wYWdlKCkpKTsKICAgICBpZiAoIXJvb3QpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCkBAIC0xMDcsNyArMTA3LDcgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFj
Y2Vzc2liaWxpdHlDb250cm9sbGVyOjpwbGF0Zm9ybU5hbWUoKQogCiBQYXNzUmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpyb290RWxlbWVudCgp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgdm9pZCogcm9vdCA9IFdLQWNjZXNz
aWJpbGl0eVJvb3RPYmplY3QocGFnZSk7CiAKICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEF0a09iamVjdCo+KHJvb3QpKTsKQEAgLTExNSw3ICsx
MTUsNyBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjpyb290RWxlbWVudCgpCiAKIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmZvY3VzZWRFbGVtZW50KCkKIHsKLSAgICBX
S0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0
b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICB2b2lkKiByb290ID0gV0tBY2Nlc3NpYmlsaXR5Rm9j
dXNlZE9iamVjdChwYWdlKTsKIAogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpj
cmVhdGUoc3RhdGljX2Nhc3Q8QXRrT2JqZWN0Kj4ocm9vdCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNh
dGlvbkhhbmRsZXJBdGsuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCmluZGV4IDZlMGEx
YzgwY2U3MTUxNDkwZTg5ZGY4ZDllNDI3ODU4M2U1NTQzNGMuLjgyMWIxNTA3MzAzNTc1YzQxMDlm
ZWVjZjFmYWJkZTUyYjExZmVhZWIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3Np
YmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlckF0ay5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgZ2Jvb2xl
YW4gYXhPYmplY3RFdmVudExpc3RlbmVyKEdTaWduYWxJbnZvY2F0aW9uSGludCogc2lnbmFsSGlu
dCwgdW5zaWduZWQgbnVtUGEKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
ICAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7CiAjZWxzZQpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2soSlNWYWx1ZVJlCiAgICAgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrID0gbm90aWZp
Y2F0aW9uRnVuY3Rpb25DYWxsYmFjazsKIAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0o
RUZMKQotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFp
bkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKHBhZ2UpOwogICAgIEpTQ29udGV4dFJl
ZiBqc0NvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1l
KTsKICNlbHNlCkBAIC0xODEsNyArMTgxLDcgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlcjo6c2V0Tm90aWZpY2F0aW9uRnVuY3Rpb25DYWxsYmFjayhKU1ZhbHVlUmUKIHZv
aWQgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OnJlbW92ZUFjY2Vzc2liaWxpdHlO
b3RpZmljYXRpb25IYW5kbGVyKCkKIHsKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKEVG
TCkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
YWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYg
anNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
CiAjZWxzZQpAQCAtMjMxLDcgKzIzMSw3IEBAIHZvaWQgQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXI6OmNvbm5lY3RBY2Nlc3NpYmlsaXR5Q2FsbGJhY2tzKCkKICAgICAgICAgdW5zaWdu
ZWQgaWQgPSBhdGtfYWRkX2dsb2JhbF9ldmVudF9saXN0ZW5lcihheE9iamVjdEV2ZW50TGlzdGVu
ZXIsICpzaWduYWxOYW1lKTsKICAgICAgICAgaWYgKCFpZCkgewogICAgICAgICAgICAgU3RyaW5n
IG1lc3NhZ2UgPSBTdHJpbmc6OmZvcm1hdCgiYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIg
ZmFpbGVkIGZvciBzaWduYWwgJXNcbiIsICpzaWduYWxOYW1lKTsKLSAgICAgICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KG1lc3NhZ2UpOworICAgICAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQobWVzc2FnZSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRBdGsuY3BwCmluZGV4IDBhZDIyMzU0YmQ3OWE5MTUzMjdjYjhhMDhhYmUxYTlmYWMxZDVm
ZTguLmMzYmUxZWIxYTY0OTVjODU4NmE5MmE1YjkwYTUxMTM5ODM3MzZkODcgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvYXRrL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRBdGsuY3BwCkBAIC02MjEsNyArNjIxLDcgQEAg
c3RhdGljIFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGNvbnZlcnRHUHRy
QXJyYXlUb1ZlY3Rvcihjb25zdCBHUHQKIAogc3RhdGljIEpTVmFsdWVSZWYgY29udmVydFRvSlNP
YmplY3RBcnJheShjb25zdCBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiYg
Y2hpbGRyZW4pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
KyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CiAKICAgICBzaXplX3QgZWxlbWVudENvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9Jbmpl
Y3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0KaW5kZXggMzk4OTE5MTJmMzlk
YjI2YmJkYzllNTA0MDM1NWU4ZjNjOWY0ZGQ0NS4uNDYyYWU1YjU2OTllNTQxMmQ2ODJiYmZjZmIy
N2U4MjQ5MzEyM2RmYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9jb2NvYS9JbmplY3RlZEJ1bmRsZVBhZ2VDb2NvYS5tbQorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29h
Lm1tCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9ybURp
ZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlCiAgICAgaWYgKCFX
S0J1bmRsZUZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
ZXRDcmFzaFJlcG9ydEFwcGxpY2F0aW9uU3BlY2lmaWNJbmZvcm1hdGlvblRvVVJMKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnRlc3RVUkwoKSk7CisgICAgc2V0Q3Jhc2hS
ZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRpb25Ub1VSTChJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkudGVzdFJ1bm5lcigpLT50ZXN0VVJMKCkpOwogCiAjaWYgUExBVEZPUk0oSU9T
KQogICAgIFdLQnVuZGxlUGFnZVNldFVzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24ocGFn
ZSgpLCB0cnVlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKaW5kZXggODI4OTAyM2Q3ZDZkNGViMzU1
M2Q1NjVhMzUyNmQ1ZWI1YTNkZDQyZS4uY2JjMDcwYjNhOGZmZjM1MWY3ZjE3YjE0YzVjMDVhNTY1
OTM3MmVmNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9lZmwvVGVzdFJ1bm5lckVmbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAgbmFtZXNw
YWNlIFdUUiB7CiAKIHN0YXRpYyBFaW5hX0Jvb2wgd2FpdFRvRHVtcFdhdGNoZG9nVGltZXJDYWxs
YmFjayh2b2lkKikKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT53YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0gYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcklPUy5tbQppbmRleCBiYzY5ZDhkYTI3MTJmNmRmOWQ3OTg2Njk1ODE4ODkwMmI4NmUzYWMy
Li44ZjljNGUwMWM4NTdjMjYxYzExOTRhZDIwYjNlZGFlOGExYzIxZTRkIDEwMDY0NAotLS0gYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcklPUy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L2lvcy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlcklPUy5tbQpAQCAtNzMsNyArNzMsNyBAQCBzdGF0
aWMgaWQgZmluZEFjY2Vzc2libGVPYmplY3RCeUlkKGlkIG9iaiwgTlNTdHJpbmcgKmlkQXR0cmli
dXRlKQogCiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlD
b250cm9sbGVyOjphY2Nlc3NpYmxlRWxlbWVudEJ5SWQoSlNTdHJpbmdSZWYgaWRBdHRyaWJ1dGUp
CiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgaWQgcm9vdCA9IHN0YXRpY19jYXN0
PFBsYXRmb3JtVUlFbGVtZW50PihXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpKTsKIAog
ICAgIGlkIHJlc3VsdCA9IGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChyb290LCBbTlNTdHJpbmcg
c3RyaW5nV2l0aEpTU3RyaW5nUmVmOmlkQXR0cmlidXRlXSk7CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vz
c2liaWxpdHlDb250cm9sbGVyTWFjLm1tCmluZGV4IDUzZmUyMmMzODYwZDBhODhjNzQxZWQzNWIw
Mjc4Njg0ZTk2OWQyY2YuLmU2ODhjOTgyN2U1MjUxNmNiZTIzNWU0YjA5MTdlNmVjMTZjYTliYzQg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyTWFjLm1tCkBAIC0xMDIs
NyArMTAyLDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5T
U3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5n
UmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIGlkIHJv
b3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9i
amVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQgPSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQo
cm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQppbmRl
eCAyM2JlOTNmNjY5MDMxM2ZmNTJmMmNiZTkzNjNlOTI3N2JjMDNiYTY0Li42NTFiNTkxMTJlODk3
ZmI2NmE4M2IyZTc1ZjZmMGVmNjZmMDJjNWIyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxl
ci5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nl
c3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlci5tbQpAQCAtNzcsNyArNzcsNyBAQAogewogICAg
IFtzZWxmIHN0b3BPYnNlcnZpbmddOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUg
PSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
cGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5k
bGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2Uo
KS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgSlNWYWx1ZVVucHJvdGVjdChjb250
ZXh0LCBtX25vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spOwpAQCAtOTEsNyArOTEsNyBAQAog
ICAgIGlmICghY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIFdLQnVuZGxlRnJhbWVS
ZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIGlmIChtX25v
dGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2spCkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICBpZiAo
bV9wbGF0Zm9ybUVsZW1lbnQgJiYgbV9wbGF0Zm9ybUVsZW1lbnQgIT0gW25vdGlmaWNhdGlvbiBv
YmplY3RdKQogICAgICAgICByZXR1cm47CiAKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFt
ZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1
bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFn
ZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdl
dEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAKICAgICBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4ganNOb3RpZmljYXRpb24oQWRvcHQsIFtub3RpZmljYXRpb25OYW1lIGNyZWF0ZUpTU3Ry
aW5nUmVmXSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQppbmRl
eCBhMjA4OWRmMWUxOWVlYTY3ODk4YTI1NGIyNzA1NzUzMmMzNjRiMjcxLi45NWQ1NDMzMDE1Y2Fm
NWM3ZjY5MWY1NGE3NjkyNDM3MWQyY2VjNDUzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRNYWMubW0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmdldENoaWxkcmVuV2l0aFJhbmdlKFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0
eVVJRQogCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hlYWRlcnMoKSBj
b25zdAogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0
TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRS
ZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUp
OwogICAgIAogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpAQCAtMzc0LDcgKzM3NCw3IEBA
IEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cm93SGVhZGVycygpIGNvbnN0CiAK
IEpTVmFsdWVSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y29sdW1uSGVhZGVycygpIGNvbnN0
CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJlZiBj
b250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7CiAK
ICAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKQEAgLTU5NCw3ICs1OTQsNyBAQCBkb3VibGUg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bnVtYmVyQXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYg
YXR0cmlidXRlKQogCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnVpRWxlbWVu
dEFycmF5QXR0cmlidXRlVmFsdWUoSlNTdHJpbmdSZWYgYXR0cmlidXRlKSBjb25zdAogewotICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFt
ZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIAogICAg
IFZlY3RvcjxSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4+IGVsZW1lbnRzOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5l
ck1hYy5tbSBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL1Rlc3RS
dW5uZXJNYWMubW0KaW5kZXggMTRmMmQ5YjkzZjBjYTQ5ZDNkMWUwNTFjZWMzNjI0NGI4NmFkNzE5
Yi4uMjNmNWI2OTA1MTZlOWI4MWM2YzNhMGE2N2IwNGZjMzk0ZDIzYzc5MyAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5t
bQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9UZXN0UnVu
bmVyTWFjLm1tCkBAIC00NCw3ICs0NCw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6aW52YWxpZGF0ZVdh
aXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkKIAogc3RhdGljIHZvaWQgd2FpdFVudGlsRG9uZVdhdGNo
ZG9nVGltZXJGaXJlZChDRlJ1bkxvb3BUaW1lclJlZiB0aW1lciwgdm9pZCogaW5mbykKIHsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53YWl0VG9EdW1wV2F0Y2hk
b2dUaW1lckZpcmVkKCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5u
ZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OmluaXRpYWxpemVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcklmTmVlZGVkKCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggYTI5NDQzOTk4ZWY1NWNmOWNk
NDA5MjhkMjM2N2ZlZmNlYTYyNDk3My4uMzM3YWE3NjkzNzk1NGEyZjEwY2JmNDczMzk3YTViNDZh
YmVmOTY1NSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAg
LTkyLDcgKzkyLDcgQEAgc3RhdGljIFdLRGF0YVJlZiBjb3B5V2ViQ3J5cHRvTWFzdGVyS2V5KFdL
Q29udGV4dFJlZiwgY29uc3Qgdm9pZCopCiAKIHN0YXRpYyBUZXN0Q29udHJvbGxlciogY29udHJv
bGxlcjsKIAotVGVzdENvbnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQorVGVzdENv
bnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKQogewogICAgIEFTU0VSVChjb250
cm9sbGVyKTsKICAgICByZXR1cm4gKmNvbnRyb2xsZXI7CkBAIC0xNTAsNyArMTUwLDcgQEAgc3Rh
dGljIHZvaWQgc2V0V2luZG93RnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLUmVjdCBmcmFtZSwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHN0YXRpYyBib29sIHJ1bkJlZm9yZVVubG9hZENvbmZpcm1Q
YW5lbChXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tGcmFtZVJlZiBmcmFt
ZSwgY29uc3Qgdm9pZCopCiB7CiAgICAgcHJpbnRmKCJDT05GSVJNIE5BVklHQVRJT046ICVzXG4i
LCB0b1NURChtZXNzYWdlKS5jX3N0cigpKTsKLSAgICByZXR1cm4gVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLmJlZm9yZVVubG9hZFJldHVyblZhbHVlKCk7CisgICAgcmV0dXJuIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpOwogfQogCiB2b2lkIFRl
c3RDb250cm9sbGVyOjpydW5Nb2RhbChXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKQEAgLTE4MywxMiArMTgzLDEyIEBAIHN0YXRpYyB2b2lkIHVuZm9jdXMoV0tQYWdlUmVm
IHBhZ2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiAKIHN0YXRpYyB2b2lkIGRlY2lkZVBvbGlj
eUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCBX
S1NlY3VyaXR5T3JpZ2luUmVmLCBXS0dlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYgcGVy
bWlzc2lvblJlcXVlc3QsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiB7Ci0gICAgVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLmhhbmRsZUdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QocGVybWlz
c2lvblJlcXVlc3QpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5oYW5kbGVHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KHBlcm1pc3Npb25SZXF1ZXN0KTsKIH0KIAogc3RhdGlj
IHZvaWQgZGVjaWRlUG9saWN5Rm9yVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3QoV0tQYWdlUmVm
LCBXS0ZyYW1lUmVmLCBXS1NlY3VyaXR5T3JpZ2luUmVmLCBXS1VzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0UmVmIHBlcm1pc3Npb25SZXF1ZXN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewot
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5oYW5kbGVVc2VyTWVkaWFQZXJtaXNzaW9uUmVx
dWVzdChwZXJtaXNzaW9uUmVxdWVzdCk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigp
LmhhbmRsZVVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0KHBlcm1pc3Npb25SZXF1ZXN0KTsKIH0K
IAogV0tQYWdlUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVPdGhlclBhZ2UoV0tQYWdlUmVmIG9s
ZFBhZ2UsIFdLVVJMUmVxdWVzdFJlZiwgV0tEaWN0aW9uYXJ5UmVmLCBXS0V2ZW50TW9kaWZpZXJz
LCBXS0V2ZW50TW91c2VCdXR0b24sIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0yNTgsNyAr
MjU4LDcgQEAgV0tQYWdlUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVPdGhlclBhZ2UoV0tQYWdl
UmVmIG9sZFBhZ2UsIFdLVVJMUmVxdWVzdFJlZiwgV0sKICAgICBXS1BhZ2VTZXRQYWdlVUlDbGll
bnQobmV3UGFnZSwgJm90aGVyUGFnZVVJQ2xpZW50LmJhc2UpOwogCiAgICAgV0tQYWdlTG9hZGVy
Q2xpZW50VjUgcGFnZUxvYWRlckNsaWVudCA9IHsKLSAgICAgICAgeyA1LCAmVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpIH0sCisgICAgICAgIHsgNSwgJlRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KSB9LAogICAgICAgICAwLCAvLyBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lCiAgICAg
ICAgIDAsIC8vIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lCiAgICAgICAgIDAsIC8vIGRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFt
ZQpAQCAtMzAyLDcgKzMwMiw3IEBAIFdLUGFnZVJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlT3Ro
ZXJQYWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLCiAgICAgV0tQYWdl
U2V0UGFnZUxvYWRlckNsaWVudCh2aWV3LT5wYWdlKCksICZwYWdlTG9hZGVyQ2xpZW50LmJhc2Up
OwogCiAgICAgV0tQYWdlUG9saWN5Q2xpZW50VjEgcGFnZVBvbGljeUNsaWVudCA9IHsKLSAgICAg
ICAgeyAxLCAmVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpIH0sCisgICAgICAgIHsgMSwgJlRlc3RD
b250cm9sbGVyOjpzaW5nbGV0b24oKSB9LAogICAgICAgICAwLCAvLyBkZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKICAgICAgICAgMCwgLy8gZGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uCiAgICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZv
clJlc3BvbnNlX2RlcHJlY2F0ZWRGb3JVc2VXaXRoVjAKQEAgLTMxNCw3ICszMTQsNyBAQCBXS1Bh
Z2VSZWYgVGVzdENvbnRyb2xsZXI6OmNyZWF0ZU90aGVyUGFnZShXS1BhZ2VSZWYgb2xkUGFnZSwg
V0tVUkxSZXF1ZXN0UmVmLCBXSwogCiAgICAgdmlldy0+ZGlkSW5pdGlhbGl6ZUNsaWVudHMoKTsK
IAotICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS51cGRhdGVXaW5kb3dTY2FsZUZvclRlc3Qo
dmlldywgKlRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tX2N1cnJlbnRJbnZvY2F0aW9uKTsKKyAg
ICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkudXBkYXRlV2luZG93U2NhbGVGb3JUZXN0KHZp
ZXcsICpUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubV9jdXJyZW50SW52b2NhdGlvbik7CiAK
ICAgICBXS1JldGFpbihuZXdQYWdlKTsKICAgICByZXR1cm4gbmV3UGFnZTsKQEAgLTY3NCwxMSAr
Njc0LDExIEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1
ZXMoKQogICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4gc2hvdWxkR0NWYWx1ZSA9IGFkb3B0
V0soV0tCb29sZWFuQ3JlYXRlKG1fZ2NCZXR3ZWVuVGVzdHMpKTsKICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCksIHNob3VsZEdDS2V5LmdldCgpLCBzaG91bGRH
Q1ZhbHVlLmdldCgpKTsKIAotICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwg
cmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVj
dGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIG1lc3NhZ2VO
YW1lLmdldCgpLCByZXNldE1lc3NhZ2VCb2R5LmdldCgpKTsKIAotICAgIFdLQ29udGV4dFNldFNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwg
ZmFsc2UpOworICAgIFdLQ29udGV4dFNldFNob3VsZFVzZUZvbnRTbW9vdGhpbmcoVGVzdENvbnRy
b2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgZmFsc2UpOwogCi0gICAgV0tDb250ZXh0U2V0
Q2FjaGVNb2RlbChUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBrV0tDYWNoZU1v
ZGVsRG9jdW1lbnRCcm93c2VyKTsKKyAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGtXS0NhY2hlTW9kZWxEb2N1bWVudEJyb3dz
ZXIpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsc28gZW5zdXJlIHRo
YXQgdGhlcmUgaXMgb25seSBvbmUgcGFnZSBvcGVuLgogCkBAIC0xMzQyLDcgKzEzNDIsNyBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9uZVJlc2V0dGlu
ZyA9IHRydWU7Ci0gICAgc2hhcmVkKCkubm90aWZ5RG9uZSgpOworICAgIHNpbmdsZXRvbigpLm5v
dGlmeURvbmUoKTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlSW5GcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwg
V0tBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVJlZiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSkKQEAg
LTE0NzUsNyArMTQ3NSw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvckdl
b2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3RJZlBvc3NpYmxlKCkKIAogdm9pZCBUZXN0Q29udHJv
bGxlcjo6ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tQYWdl
UmVmIHBhZ2UsIFdLU2VjdXJpdHlPcmlnaW5SZWYgb3JpZ2luLCBXS05vdGlmaWNhdGlvblBlcm1p
c3Npb25SZXF1ZXN0UmVmIHJlcXVlc3QsIGNvbnN0IHZvaWQqKQogewotICAgIFRlc3RDb250cm9s
bGVyOjpzaGFyZWQoKS5kZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVz
dChwYWdlLCBvcmlnaW4sIHJlcXVlc3QpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS5kZWNpZGVQb2xpY3lGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChwYWdlLCBvcmln
aW4sIHJlcXVlc3QpOwogfQogCiB2b2lkIFRlc3RDb250cm9sbGVyOjpkZWNpZGVQb2xpY3lGb3JO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXS1BhZ2VSZWYsIFdLU2VjdXJpdHlPcmlnaW5S
ZWYsIFdLTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RSZWYgcmVxdWVzdCkKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCA4YjVjNmUyMjY1Yzk3ZjI4MDdhOWNm
ZTU3OWQ1MTQ0NzZkZWY4YzI2Li44MjY1Y2Q1NmM0OTkwYWZhMmI5ZDg0NzVhNDczZjBmNTgyMjc2
ODFiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC00Myw3ICs0
Myw3IEBAIGNsYXNzIEV2ZW50U2VuZGVyUHJveHk7CiAvLyBGSVhNRTogUmVuYW1lIHRoaXMgVGVz
dFJ1bm5lcj8KIGNsYXNzIFRlc3RDb250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgVGVz
dENvbnRyb2xsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBUZXN0Q29udHJvbGxlciYgc2luZ2xl
dG9uKCk7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld1dpZHRoOwogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCB2aWV3SGVpZ2h0OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcAppbmRleCBiZmI2NWNlYzFlNmQ2M2E2MTNlY2M2YTQ5MjI5ODNiNjgyZjIx
YzZhLi41MjFlZWJkZjZjMGEyMjBlMzJjM2U0N2NmNDY2NDM2ZTc1YmExNDFhIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMTI5LDEzICsxMjksMTMgQEAg
c3RhdGljIGJvb2wgc2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNrcyhjb25zdCBjaGFyKiBw
YXRoT3JVUkwpCiAKIHZvaWQgVGVzdEludm9jYXRpb246Omludm9rZSgpCiB7Ci0gICAgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpLmNvbmZpZ3VyZVZpZXdGb3JUZXN0KCp0aGlzKTsKKyAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29uZmlndXJlVmlld0ZvclRlc3QoKnRoaXMpOwogCi0g
ICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFp
bldlYlZpZXcoKS0+cGFnZSgpLCBmYWxzZSk7CisgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5r
cyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBmYWxz
ZSk7CiAKICAgICBtX3RleHRPdXRwdXQuY2xlYXIoKTsKIAotICAgIFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS5zZXRTaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKHNob3VsZExvZ0hpc3Rv
cnlDbGllbnRDYWxsYmFja3MobV9wYXRoT3JVUkwuY19zdHIoKSkpOworICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5zZXRTaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKHNob3Vs
ZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFja3MobV9wYXRoT3JVUkwuY19zdHIoKSkpOwogCiAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjbGVhciBvdXQgdmlzaXRlZCBsaW5rcyBoZXJlLgogCkBAIC0x
NTEsMTYgKzE1MSwxNiBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogICAgIFdLRGlj
dGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVzc2FnZUJvZHkuZ2V0KCksIGR1bXBQaXhlbHNLZXku
Z2V0KCksIGR1bXBQaXhlbHNWYWx1ZS5nZXQoKSk7CiAKICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJVc2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lciIpKTsKLSAgICBX
S1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyVmFsdWUg
PSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkudXNlV2Fp
dFRvRHVtcFdhdGNoZG9nVGltZXIoKSkpOworICAgIFdLUmV0YWluUHRyPFdLQm9vbGVhblJlZj4g
dXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJWYWx1ZSA9IGFkb3B0V0soV0tCb29sZWFuQ3JlYXRl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigp
KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSwg
dXNlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJLZXkuZ2V0KCksIHVzZVdhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyVmFsdWUuZ2V0KCkpOwogCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRpbWVv
dXRLZXkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJUaW1lb3V0Iikp
OwogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiB0aW1lb3V0VmFsdWUgPSBhZG9wdFdLKFdL
VUludDY0Q3JlYXRlKG1fdGltZW91dCkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5U
ZXN0TWVzc2FnZUJvZHkuZ2V0KCksIHRpbWVvdXRLZXkuZ2V0KCksIHRpbWVvdXRWYWx1ZS5nZXQo
KSk7CiAKLSAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIGJlZ2luVGVzdE1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpKTsKIAotICAgIFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS5ydW5VbnRpbChtX2dvdEluaXRpYWxSZXNwb25zZSwgVGVzdENvbnRyb2xsZXI6OnNo
b3J0VGltZW91dCk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1blVudGlsKG1f
Z290SW5pdGlhbFJlc3BvbnNlLCBUZXN0Q29udHJvbGxlcjo6c2hvcnRUaW1lb3V0KTsKICAgICBp
ZiAoIW1fZ290SW5pdGlhbFJlc3BvbnNlKSB7CiAgICAgICAgIG1fZXJyb3JNZXNzYWdlID0gIlRp
bWVkIG91dCB3YWl0aW5nIGZvciBpbml0aWFsIHJlc3BvbnNlIGZyb20gd2ViIHByb2Nlc3NcbiI7
CiAgICAgICAgIG1fd2ViUHJvY2Vzc0lzVW5yZXNwb25zaXZlID0gdHJ1ZTsKQEAgLTE2OSw5ICsx
NjksOSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2UoKQogICAgIGlmIChtX2Vycm9yKQog
ICAgICAgICBnb3RvIGVuZDsKIAotICAgIFdLUGFnZUxvYWRVUkwoVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgbV91cmwuZ2V0KCkpOworICAgIFdLUGFnZUxv
YWRVUkwoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwg
bV91cmwuZ2V0KCkpOwogCi0gICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1blVudGlsKG1f
Z290RmluYWxNZXNzYWdlLCBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0KTsKKyAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkucnVuVW50aWwobV9nb3RGaW5hbE1lc3NhZ2UsIFRlc3RDb250
cm9sbGVyOjpub1RpbWVvdXQpOwogICAgIGlmIChtX2Vycm9yKQogICAgICAgICBnb3RvIGVuZDsK
IApAQCAtMTgwLDE3ICsxODAsMTcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIGVu
ZDoKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIGlmIChtX2dvdEluaXRpYWxSZXNwb25zZSkKLSAg
ICAgICAgV0tJbnNwZWN0b3JDbG9zZShXS1BhZ2VHZXRJbnNwZWN0b3IoVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSkpOworICAgICAgICBXS0luc3BlY3RvckNs
b3NlKFdLUGFnZUdldEluc3BlY3RvcihUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpKSk7CiAjZW5kaWYgLy8gIVBMQVRGT1JNKElPUykKIAogICAgIGlmICht
X3dlYlByb2Nlc3NJc1VucmVzcG9uc2l2ZSkKICAgICAgICAgZHVtcFdlYlByb2Nlc3NVbnJlc3Bv
bnNpdmVuZXNzKCk7Ci0gICAgZWxzZSBpZiAoIVRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5yZXNl
dFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkpIHsKKyAgICBlbHNlIGlmICghVGVzdENvbnRyb2xs
ZXI6OnNpbmdsZXRvbigpLnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKSkgewogICAgICAg
ICAvLyBUaGUgcHJvY2VzcyBmcm96ZSB3aGlsZSBsb2FkaW5nIGFib3V0OmJsYW5rLCBsZXQncyBz
dGFydCBhIGZyZXNoIG9uZS4KICAgICAgICAgLy8gSXQgd291bGQgYmUgbmljZSB0byByZXBvcnQg
dGhhdCB0aGUgcHJldmlvdXMgdGVzdCBmcm96ZSBhZnRlciBkdW1waW5nIHJlc3VsdHMsIGJ1dCB3
ZSBoYXZlIG5vIHdheSB0byBkbyB0aGF0LgotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVk
KCkudGVybWluYXRlV2ViQ29udGVudFByb2Nlc3MoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnRlcm1pbmF0ZVdlYkNvbnRlbnRQcm9jZXNzKCk7CiAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSBwcm9jZXNzLCBhcyBpbnZva2UoKSB3aWxsIG5lZWQgb25l
IHRvIHNlbmQgYnVuZGxlIG1lc3NhZ2VzIGZvciB0aGUgbmV4dCB0ZXN0LgotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkucmVhdHRhY2hQYWdlVG9XZWJQcm9jZXNzKCk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZWF0dGFjaFBhZ2VUb1dlYlByb2Nlc3MoKTsK
ICAgICB9CiB9CiAKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1w
V2ViUHJvY2Vzc1VucmVzcG9uc2l2ZW5lc3MoY29uc3QgY2hhciogZXJyb3JNZXNzYWdlKQogewog
ICAgIGNoYXIgZXJyb3JNZXNzYWdlVG9TdGRlcnJbMTAyNF07CiAjaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgcGlkX3QgcGlkID0gV0tQYWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSk7CisgICAgcGlkX3QgcGlkID0gV0tQ
YWdlR2V0UHJvY2Vzc0lkZW50aWZpZXIoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5X
ZWJWaWV3KCktPnBhZ2UoKSk7CiAgICAgc3ByaW50ZihlcnJvck1lc3NhZ2VUb1N0ZGVyciwgIiNQ
Uk9DRVNTIFVOUkVTUE9OU0lWRSAtICVzIChwaWQgJWxkKVxuIiwgVGVzdENvbnRyb2xsZXI6Ondl
YlByb2Nlc3NOYW1lKCksIHN0YXRpY19jYXN0PGxvbmc+KHBpZCkpOwogI2Vsc2UKICAgICBzcHJp
bnRmKGVycm9yTWVzc2FnZVRvU3RkZXJyLCAiI1BST0NFU1MgVU5SRVNQT05TSVZFIC0gJXMiLCBU
ZXN0Q29udHJvbGxlcjo6d2ViUHJvY2Vzc05hbWUoKSk7CkBAIC0yMzIsNyArMjMyLDcgQEAgdm9p
ZCBUZXN0SW52b2NhdGlvbjo6Zm9yY2VSZXBhaW50RG9uZUNhbGxiYWNrKFdLRXJyb3JSZWYsIHZv
aWQqIGNvbnRleHQpCiB7CiAgICAgVGVzdEludm9jYXRpb24qIHRlc3RJbnZvY2F0aW9uID0gc3Rh
dGljX2Nhc3Q8VGVzdEludm9jYXRpb24qPihjb250ZXh0KTsKICAgICB0ZXN0SW52b2NhdGlvbi0+
bV9nb3RSZXBhaW50ID0gdHJ1ZTsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubm90aWZ5
RG9uZSgpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiB9
CiAKIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBSZXN1bHRzKCkKQEAgLTI0NSw4ICsyNDUsOCBA
QCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzdWx0cygpCiAgICAgaWYgKG1fZHVtcFBpeGVs
cyAmJiBtX3BpeGVsUmVzdWx0KSB7CiAgICAgICAgIGlmIChQbGF0Zm9ybVdlYlZpZXc6OndpbmRv
d1NuYXBzaG90RW5hYmxlZCgpKSB7CiAgICAgICAgICAgICBtX2dvdFJlcGFpbnQgPSBmYWxzZTsK
LSAgICAgICAgICAgIFdLUGFnZUZvcmNlUmVwYWludChUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCku
bWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0aGlzLCBUZXN0SW52b2NhdGlvbjo6Zm9yY2VSZXBhaW50
RG9uZUNhbGxiYWNrKTsKLSAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ydW5V
bnRpbChtX2dvdFJlcGFpbnQsIFRlc3RDb250cm9sbGVyOjpzaG9ydFRpbWVvdXQpOworICAgICAg
ICAgICAgV0tQYWdlRm9yY2VSZXBhaW50KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWlu
V2ViVmlldygpLT5wYWdlKCksIHRoaXMsIFRlc3RJbnZvY2F0aW9uOjpmb3JjZVJlcGFpbnREb25l
Q2FsbGJhY2spOworICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1blVu
dGlsKG1fZ290UmVwYWludCwgVGVzdENvbnRyb2xsZXI6OnNob3J0VGltZW91dCk7CiAgICAgICAg
ICAgICBpZiAoIW1fZ290UmVwYWludCkgewogICAgICAgICAgICAgICAgIG1fZXJyb3JNZXNzYWdl
ID0gIlRpbWVkIG91dCB3YWl0aW5nIGZvciBwcmUtcGl4ZWwgZHVtcCByZXBhaW50XG4iOwogICAg
ICAgICAgICAgICAgIG1fd2ViUHJvY2Vzc0lzVW5yZXNwb25zaXZlID0gdHJ1ZTsKQEAgLTMwMCw3
ICszMDAsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBtX2dvdEZpbmFsTWVz
c2FnZSA9IHRydWU7CiAgICAgICAgIG1fZXJyb3IgPSB0cnVlOwogICAgICAgICBtX2Vycm9yTWVz
c2FnZSA9ICJGQUlMXG4iOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubm90aWZ5
RG9uZSgpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubm90aWZ5RG9uZSgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUKICAgICAgICAgV0tTdHJpbmdSZWYgbWVzc2FnZUJvZHlTdHJpbmcgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwogICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlQm9keVN0cmluZywgIkJlZ2luVGVzdCIpKSB7
CiAgICAgICAgICAgICBtX2dvdEluaXRpYWxSZXNwb25zZSA9IHRydWU7Ci0gICAgICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC0zMzEsNyArMzMxLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUK
ICAgICAgICAgbV9hdWRpb1Jlc3VsdCA9IHN0YXRpY19jYXN0PFdLRGF0YVJlZj4oV0tEaWN0aW9u
YXJ5R2V0SXRlbUZvcktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIGF1ZGlvUmVzdWx0S2V5Lmdl
dCgpKSk7CiAKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwotICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkubm90aWZ5RG9uZSgpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkubm90aWZ5RG9uZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0zNDUsNTkgKzM0NSw1OSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQmVmb3JlVW5sb2FkUmV0dXJu
VmFsdWUiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdL
Qm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIGJlZm9yZVVubG9hZFJl
dHVyblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRCZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZShX
S0Jvb2xlYW5HZXRWYWx1ZShiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUoV0tCb29s
ZWFuR2V0VmFsdWUoYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdl
TmFtZSwgIkFkZENocm9tZUlucHV0RmllbGQiKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+YWRkQ2hyb21lSW5wdXRGaWVsZCgpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+YWRkQ2hyb21lSW5wdXRG
aWVsZCgpOwogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsQWRkQ2hyb21lSW5wdXRG
aWVsZENhbGxiYWNrIikpOwotICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0
KCksIDApOworICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJSZW1vdmVDaHJvbWVJbnB1dEZpZWxkIikpIHsKLSAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnJlbW92ZUNocm9tZUlu
cHV0RmllbGQoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJW
aWV3KCktPnJlbW92ZUNocm9tZUlucHV0RmllbGQoKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ2FsbFJlbW92ZUNocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAgV0tD
b250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQo
KS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgV0tDb250ZXh0UG9z
dE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250
ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkZv
Y3VzV2ViVmlldyIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2Vi
VmlldygpLT5tYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVyKCk7CisgICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5tYWtlV2ViVmlld0ZpcnN0UmVzcG9uZGVy
KCk7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxGb2N1c1dlYlZpZXdDYWxsYmFj
ayIpKTsKLSAgICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1l
c3NhZ2VOYW1lLCAiU2V0QmFja2luZ1NjYWxlRmFjdG9yIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0RvdWJsZUdldFR5cGVJRCgpKTsKICAgICAgICAg
ZG91YmxlIGJhY2tpbmdTY2FsZUZhY3RvciA9IFdLRG91YmxlR2V0VmFsdWUoc3RhdGljX2Nhc3Q8
V0tEb3VibGVSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFdLUGFnZVNldEN1c3RvbUJhY2tp
bmdTY2FsZUZhY3RvcihUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cGFn
ZSgpLCBiYWNraW5nU2NhbGVGYWN0b3IpOworICAgICAgICBXS1BhZ2VTZXRDdXN0b21CYWNraW5n
U2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgYmFja2luZ1NjYWxlRmFjdG9yKTsKIAogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJDYWxsU2V0QmFja2luZ1NjYWxlRmFjdG9yQ2FsbGJhY2siKSk7Ci0gICAgICAgIFdLQ29udGV4
dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29u
dGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAgICAgIFdLQ29udGV4dFBvc3RNZXNz
YWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNpbXVsYXRlV2Vi
Tm90aWZpY2F0aW9uQ2xpY2siKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwogICAgICAgICB1aW50NjRfdCBub3RpZmlj
YXRpb25JRCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3Nh
Z2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zaW11bGF0ZVdlYk5v
dGlmaWNhdGlvbkNsaWNrKG5vdGlmaWNhdGlvbklEKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNpbmdsZXRvbigpLnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2sobm90aWZpY2F0aW9uSUQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBZGRzVmlzaXRlZExpbmtzIikpIHsKICAgICAgICAg
QVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7
CiAgICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0
Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jvb2xlYW5HZXRW
YWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgV0tQYWdlU2V0QWRkc1Zpc2l0ZWRMaW5rcyhUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCBXS0Jvb2xlYW5H
ZXRWYWx1ZShlbmFibGVkV0spKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChX
S1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0R2VvbG9jYXRpb25Q
ZXJtaXNzaW9uIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJlZiBlbmFibGVkV0sg
PSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpLnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRW
YWx1ZShlbmFibGVkV0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNl
dEdlb2xvY2F0aW9uUGVybWlzc2lvbihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDQ5LDIxICs0NDksMjEgQEAgdm9pZCBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYg
bWVzc2FnZU5hbWUKICAgICAgICAgV0tEb3VibGVSZWYgc3BlZWRXSyA9IHN0YXRpY19jYXN0PFdL
RG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3NhZ2VCb2R5RGljdGlvbmFy
eSwgc3BlZWRLZXlXSy5nZXQoKSkpOwogICAgICAgICBkb3VibGUgc3BlZWQgPSBXS0RvdWJsZUdl
dFZhbHVlKHNwZWVkV0spOwogCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRN
b2NrR2VvbG9jYXRpb25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJv
dmlkZXNBbHRpdHVkZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1
ZGVBY2N1cmFjeSwgcHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVl
ZCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRNb2NrR2VvbG9jYXRp
b25Qb3NpdGlvbihsYXRpdHVkZSwgbG9uZ2l0dWRlLCBhY2N1cmFjeSwgcHJvdmlkZXNBbHRpdHVk
ZSwgYWx0aXR1ZGUsIHByb3ZpZGVzQWx0aXR1ZGVBY2N1cmFjeSwgYWx0aXR1ZGVBY2N1cmFjeSwg
cHJvdmlkZXNIZWFkaW5nLCBoZWFkaW5nLCBwcm92aWRlc1NwZWVkLCBzcGVlZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyht
ZXNzYWdlTmFtZSwgIlNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvciIp
KSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdH
ZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIGVycm9yTWVzc2FnZSA9IHN0YXRpY19j
YXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aGFyZWQoKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoZXJyb3JN
ZXNzYWdlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9s
b2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVFcnJvcihlcnJvck1lc3NhZ2UpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJTZXRVc2VyTWVkaWFQZXJtaXNzaW9uIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAg
IFdLQm9vbGVhblJlZiBlbmFibGVkV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3Nh
Z2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldFVzZXJNZWRpYVBl
cm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZh
bHVlKGVuYWJsZWRXSykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC00NzksNyArNDc5
LDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgV0tCb29sZWFuUmVmIHBlcm1p
c3NpdmVXSyA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZv
cktleShtZXNzYWdlQm9keURpY3Rpb25hcnksIHBlcm1pc3NpdmVLZXlXSy5nZXQoKSkpOwogICAg
ICAgICBib29sIHBlcm1pc3NpdmUgPSBXS0Jvb2xlYW5HZXRWYWx1ZShwZXJtaXNzaXZlV0spOwog
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0
ZShlbmFibGVkLCBwZXJtaXNzaXZlKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC00OTEsMTQgKzQ5MSwxNCBAQCB2b2lkIFRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNz
YWdlTmFtZQogICAgICAgICBXS0Jvb2xlYW5SZWYgaGlkZGVuV0sgPSBzdGF0aWNfY2FzdDxXS0Jv
b2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5
LCBpc0luaXRpYWxLZXlXSy5nZXQoKSkpOwogICAgICAgICBib29sIGhpZGRlbiA9IFdLQm9vbGVh
bkdldFZhbHVlKGhpZGRlbldLKTsKIAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCku
c2V0SGlkZGVuKGhpZGRlbik7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRIaWRkZW4oaGlkZGVuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUHJvY2Vzc1dvcmtRdWV1ZSIp
KSB7Ci0gICAgICAgIGlmIChUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdl
cigpLnByb2Nlc3NXb3JrUXVldWUoKSkgeworICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKICAgICAg
ICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIldvcmtRdWV1ZVByb2Nlc3NlZENhbGxiYWNrIikp
OwotICAgICAgICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAg
ICAgICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUwNiwxNCArNTA2LDE0IEBAIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJRdWV1ZUJhY2tOYXZpZ2F0aW9uIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKICAgICAgICAg
dWludDY0X3Qgc3RlcENvdW50ID0gV0tVSW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2
NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLndv
cmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUJhY2tOYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNr
TmF2aWdhdGlvbihzdGVwQ291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYg
KFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUZvcndhcmRO
YXZpZ2F0aW9uIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKICAgICAgICAgdWludDY0X3Qgc3RlcENvdW50ID0gV0tV
SW50NjRHZXRWYWx1ZShzdGF0aWNfY2FzdDxXS1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpKTsKLSAg
ICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUZv
cndhcmROYXZpZ2F0aW9uKHN0ZXBDb3VudCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGVwQ291
bnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01MjcsNyArNTI3LDcgQEAgdm9pZCBU
ZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJp
bmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRhcmdl
dEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidGFyZ2V0IikpOwog
ICAgICAgICBXS1N0cmluZ1JlZiB0YXJnZXRXSyA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KGxvYWREYXRhRGljdGlvbmFyeSwgdGFyZ2V0S2V5Lmdl
dCgpKSk7CiAKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5xdWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dURlN0cmluZyh0YXJnZXRXSykp
OworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigp
LnF1ZXVlTG9hZCh0b1dURlN0cmluZyh1cmxXSyksIHRvV1RGU3RyaW5nKHRhcmdldFdLKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTU0NCw1NCArNTQ0LDU0IEBAIHZvaWQgVGVzdElu
dm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVm
IG1lc3NhZ2VOYW1lCiAgICAgICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB1bnJlYWNoYWJs
ZVVSTEtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygidW5yZWFjaGFi
bGVVUkwiKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMV0sgPSBzdGF0aWNf
Y2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rp
b25hcnksIHVucmVhY2hhYmxlVVJMS2V5LmdldCgpKSk7CiAKLSAgICAgICAgVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RG
U3RyaW5nKGNvbnRlbnRXSyksIGJhc2VVUkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBT
dHJpbmcoKSwgdW5yZWFjaGFibGVVUkxXSyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0sp
IDogU3RyaW5nKCkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1
ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZEhUTUxTdHJpbmcodG9XVEZTdHJpbmcoY29udGVudFdLKSwg
YmFzZVVSTFdLID8gdG9XVEZTdHJpbmcoYmFzZVVSTFdLKSA6IFN0cmluZygpLCB1bnJlYWNoYWJs
ZVVSTFdLID8gdG9XVEZTdHJpbmcodW5yZWFjaGFibGVVUkxXSykgOiBTdHJpbmcoKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIlF1ZXVlUmVsb2FkIikpIHsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZVJlbG9hZCgpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlUmVsb2FkKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlF1ZXVlTG9hZGluZ1NjcmlwdCIpKSB7CiAgICAgICAgIEFT
U0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAg
ICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5h
Z2VyKCkucXVldWVMb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkpOworICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZGlu
Z1NjcmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVO
b25Mb2FkaW5nU2NyaXB0IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0
ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZU5vbkxvYWRpbmdTY3Jp
cHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5n
KHNjcmlwdCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRIYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAgICAgICAgV0tCb29sZWFuUmVmIHZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaGFyZWQoKS5zZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVh
bkdldFZhbHVlKHZhbHVlKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5z
ZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKFdLQm9vbGVhbkdldFZhbHVlKHZhbHVl
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSkgewog
ICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlw
ZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiB1c2VybmFtZSA9IHN0YXRpY19jYXN0PFdLU3Ry
aW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5z
ZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHRvV1RGU3RyaW5nKHVzZXJuYW1lKSk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50aWNhdGlvblVzZXJuYW1lKHRv
V1RGU3RyaW5nKHVzZXJuYW1lKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAo
V0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEF1dGhlbnRpY2F0
aW9uUGFzc3dvcmQiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkp
ID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiBwYXNzd29yZCA9
IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaGFyZWQoKS5zZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkKHRvV1RGU3RyaW5nKHBh
c3N3b3JkKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRBdXRoZW50
aWNhdGlvblBhc3N3b3JkKHRvV1RGU3RyaW5nKHBhc3N3b3JkKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIlNldEJsb2NrQWxsUGx1Z2lucyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5S
ZWYgc2hvdWxkQmxvY2sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KG1lc3NhZ2VCb2R5KTsK
LSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnNldEJsb2NrQWxsUGx1Z2lucyhXS0Jv
b2xlYW5HZXRWYWx1ZShzaG91bGRCbG9jaykpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2lu
Z2xldG9uKCkuc2V0QmxvY2tBbGxQbHVnaW5zKFdLQm9vbGVhbkdldFZhbHVlKHNob3VsZEJsb2Nr
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTYwMywxMiArNjAzLDEyIEBAIFdLUmV0
YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01l
c3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRXaW5kb3dJc0tleSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jv
b2xlYW5SZWYgaXNLZXlWYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJv
ZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+c2V0
V2luZG93SXNLZXkoV0tCb29sZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+c2V0V2luZG93SXNLZXkoV0tC
b29sZWFuR2V0VmFsdWUoaXNLZXlWYWx1ZSkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
ICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIklzV29y
a1F1ZXVlRW1wdHkiKSkgewotICAgICAgICBib29sIGlzRW1wdHkgPSBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkud29ya1F1ZXVlTWFuYWdlcigpLmlzV29ya1F1ZXVlRW1wdHkoKTsKKyAgICAgICAg
Ym9vbCBpc0VtcHR5ID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5pc1dvcmtRdWV1ZUVtcHR5KCk7CiAgICAgICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4g
cmVzdWx0KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShpc0VtcHR5KSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3Jr
UXVldWVNYW5hZ2VyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdl
ci5jcHAKaW5kZXggMjU1ZDkzOTE3YWFmNjNmMmUwNmYwN2I3NTY3ZjBiOWVkOTZjYWNiOS4uMDMy
M2MyM2VhMzEzM2QwN2EzY2E0NjU5OTFhZGY2ZTAxNDlkNzVkNCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1dvcmtRdWV1ZU1hbmFnZXIuY3BwCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFj
ZSBXVFIgewogCiBzdGF0aWMgaW5saW5lIFdLUGFnZVJlZiBtYWluUGFnZSgpCiB7Ci0gICAgcmV0
dXJuIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCk7CisgICAg
cmV0dXJuIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCk7
CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBnb1RvSXRlbUF0SW5kZXgoaW50IGluZGV4KQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJv
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5j
cHAKaW5kZXggMTk0MDJjZDMwNTJjOTViZDk3YmExNjgwOGMzMDkyNGJmMzdiOTk1Mi4uOWUwNTQ2
ODg4MWE5NDM2NjBhM2U0NGM1MTIwNzk4MDY2MzM0YjhjOCAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJvLmNwcAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJbnZvY2F0aW9uQ2Fpcm8uY3BwCkBAIC0xMTAsNyAr
MTEwLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBhcmVXaXRoRXhw
ZWN0ZWQoV0tJbWFnZVJlZiB3a0ltYWdlLCBXS0FycmEKIHsKICNpZiBQTEFURk9STShFRkwpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBVTlVTRURfUEFSQU0od2tJbWFnZSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlID0gV0tJbWFnZUNyZWF0ZUNhaXJvU3VyZmFjZShUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+d2luZG93U25hcHNob3RJbWFnZSgpLmdldCgpKTsK
KyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBXS0ltYWdlQ3JlYXRlQ2Fpcm9TdXJmYWNl
KFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT53aW5kb3dTbmFwc2hv
dEltYWdlKCkuZ2V0KCkpOwogI2Vsc2UKICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBX
S0ltYWdlQ3JlYXRlQ2Fpcm9TdXJmYWNlKHdrSW1hZ2UpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAppbmRleCA3MTExYThlMWU1MWQ1
ZGVkNDNlZDc0MTRlMDVlNzI1YWFmNWQyYjk5Li5lYzgzOTJhZjc1NTg2OTA4MTM1N2E0YjRjMzcx
NzJiYTZkYWU3ZWMzIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NnL1Rlc3RJ
bnZvY2F0aW9uQ0cuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9j
YXRpb25DRy5jcHAKQEAgLTE1Niw3ICsxNTYsNyBAQCBzdGF0aWMgdm9pZCBwYWludFJlcGFpbnRS
ZWN0T3ZlcmxheShDR0NvbnRleHRSZWYgY29udGV4dCwgV0tJbWFnZVJlZiBpbWFnZSwgV0tBcgog
CiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUGl4ZWxzQW5kQ29tcGFyZVdpdGhFeHBlY3RlZChX
S0ltYWdlUmVmIGltYWdlLCBXS0FycmF5UmVmIHJlcGFpbnRSZWN0cykKIHsKLSAgICBQbGF0Zm9y
bVdlYlZpZXcqIHdlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXco
KTsKKyAgICBQbGF0Zm9ybVdlYlZpZXcqIHdlYlZpZXcgPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkubWFpbldlYlZpZXcoKTsKICAgICBXS1JldGFpblB0cjxXS0ltYWdlUmVmPiB3aW5kb3dT
bmFwc2hvdCA9IHdlYlZpZXctPndpbmRvd1NuYXBzaG90SW1hZ2UoKTsKIAogICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNvbnRleHQ7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL21hYy9XZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvLm1tIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mby5tbQppbmRleCBhZjMxZDMz
Yzc1NDg4ZGUzNTIzNjQ2ZDRiNDRiMGY0YTg3ZmI0YmY5Li5kMzU2ZDgzYzVlNTYxNTU3MTI5Mzlj
MDEzOTQyZmRhNTM3MGM1ZjI3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21h
Yy9XZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvLm1tCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8ubW0KQEAgLTU4LDcgKzU4LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFdUUjsKIAogLSAoTlNXaW5kb3cgKilkcmFnZ2luZ0Rlc3RpbmF0
aW9uV2luZG93IAogewotICAgIHJldHVybiBbVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5X
ZWJWaWV3KCktPnBsYXRmb3JtVmlldygpIHdpbmRvd107CisgICAgcmV0dXJuIFtUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1WaWV3KCkgd2luZG93XTsK
IH0KIAogLSAoTlNEcmFnT3BlcmF0aW9uKWRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzayAKQEAg
LTY5LDEzICs2OSwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RSOwogCiAtIChOU1BvaW50KWRyYWdn
aW5nTG9jYXRpb24KIHsKLSAgICBXS1BvaW50IGxvY2F0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNo
YXJlZCgpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9zaXRpb24oKTsKKyAgICBXS1BvaW50IGxvY2F0
aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9z
aXRpb24oKTsKICAgICByZXR1cm4gTlNNYWtlUG9pbnQobG9jYXRpb24ueCwgbG9jYXRpb24ueSk7
CiB9CiAKIC0gKE5TUG9pbnQpZHJhZ2dlZEltYWdlTG9jYXRpb24gCiB7Ci0gICAgV0tQb2ludCBs
b2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5ldmVudFNlbmRlclByb3h5KCktPnBv
c2l0aW9uKCk7CisgICAgV0tQb2ludCBsb2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5ldmVudFNlbmRlclByb3h5KCktPnBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIE5TTWFrZVBv
aW50KGxvY2F0aW9uLnggKyBfb2Zmc2V0LndpZHRoLCBsb2NhdGlvbi55ICsgX29mZnNldC5oZWln
aHQpOwogfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRU
ZXN0UnVubmVyRXZlbnQubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0
UnVubmVyRXZlbnQubW0KaW5kZXggMjQyMTJjN2FkMDhkNGY5OTRkOTlkNWJiZWY0MzY2NTVlYjg1
Yzg0OC4uOWRlYTJkZjgxODg5NmZiYTg3MTEwZWVkNWE4ZDk0MjU3Y2VkMjkzNyAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tCisr
KyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJFdmVudC5tbQpA
QCAtMzYsOCArMzYsOCBAQCB1c2luZyBuYW1lc3BhY2UgV1RSOwogCiArIChOU1BvaW50KW1vdXNl
TG9jYXRpb24KIHsKLSAgICBXS1BvaW50IGxvY2F0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNoYXJl
ZCgpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9zaXRpb24oKTsKLSAgICByZXR1cm4gW1Rlc3RDb250
cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZlcnRC
YXNlVG9TY3JlZW46TlNNYWtlUG9pbnQobG9jYXRpb24ueCwgbG9jYXRpb24ueSldOworICAgIFdL
UG9pbnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuZXZlbnRTZW5kZXJQ
cm94eSgpLT5wb3NpdGlvbigpOworICAgIHJldHVybiBbVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3JtV2luZG93KCkgY29udmVydEJhc2VUb1NjcmVlbjpO
U01ha2VQb2ludChsb2NhdGlvbi54LCBsb2NhdGlvbi55KV07CiB9CiAKIEBlbmQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245731</attachid>
            <date>2015-01-30 12:47:27 -0800</date>
            <delta_ts>2015-01-30 12:50:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141088-20150130124733.patch</filename>
            <type>text/plain</type>
            <size>556954</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
NzZmZmFlYTYxNThkYmE4ZTFiMGZmMDBiYzgxYTUyMDk2ZmFjZjUyLi42NTViZGY5NTY3OTZiZjli
ZjNmM2M5Y2VlYTE4NmM3ZjBlOTdlNWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAxNS0wMS0zMCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5n
bGV0b24oKSBmb3Igc2luZ2xldG9uIGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9z
dWtlIE5pd2EgYW5kIEJlbmphbWluIFBvdWxhaW4uCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgp
IHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAg
ICAgICAgY2xhc3NlcyBhcyBwZXIgdGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5tbToKKyAgICAgICAgKEluc3BlY3Rvcjo6
UmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24pOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJ
bnNwZWN0b3I6OnN0YXJ0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpz
aGFyZWQpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckRl
YnVnZ2FibGU6On5SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKToKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5pdCk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnVwZGF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6
OlJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNldFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjpwYXVzZVdhaXRp
bmdGb3JBdXRvbWF0aWNJbnNwZWN0aW9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3RlSW5z
cGVjdG9yRGVidWdnYWJsZTo6dW5wYXVzZUZvckluaXRpYWxpemVkSW5zcGVjdG9yKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9u
Lm1tOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29ubmVj
dGlvbjo6c2V0dXApOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dh
YmxlQ29ubmVjdGlvbjo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToKKwogMjAxNS0wMS0yOSAgQ29t
bWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE3OTM1NyBhbmQgcjE3OTM1OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNjZhNjVh
M2E4ZDcyZDk2ZWU5MjEyMDY0ZjM0ZTBkNzFiZjk3ZTc1Li45M2M3NTZmNTgzMWMyOGUxN2JhMmEw
N2NlMGFjNGUwNjRjZjdmM2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTUgQEAKIDIwMTUtMDEt
MzAgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAorICAgICAgICBSZW5hbWUgc2hh
cmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRv
biBjbGFzc2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxMDg4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhIGFuZCBCZW5qYW1p
biBQb3VsYWluLgorCisgICAgICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0
aW9ucyB0byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVy
IHRoZSByZWNlbnQgY29kaW5nIHN0eWxlIGNoYW5nZS4KKworMjAxNS0wMS0zMCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCiAgICAgICAgIE9wdGltaXplIE1lbW9yeUNhY2hlOjpn
ZXRTZXNzaW9uTWFwKCkgYSBiaXQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MTA2OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDMxZTI2MjZmZjU3ZDA4MDk1M2ZiNDBl
Y2MyNzA3ZDg1ZGMzN2U3ZmUuLmY5MGE1NzA5M2NlNzM3MmU0ZmJhNzBlZjUxMTdmOGQ3NzgwYzM4
YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8
Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJl
ciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhIGFuZCBCZW5qYW1pbiBQb3VsYWluLgorCisgICAg
ICAgIFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24o
KSBmb3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSByZWNlbnQgY29kaW5n
IHN0eWxlIGNoYW5nZS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5j
cHA6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24pOgorICAgICAgICAo
V2ViRGF0YWJhc2VQcm92aWRlcjo6c2hhcmVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdl
L1dlYkRhdGFiYXNlUHJvdmlkZXIuaDoKKwogMjAxNS0wMS0yOSAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBCdWlsZCBmaXggYWZ0ZXIgcjE3OTM2
OC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZwppbmRleCAxYWU1NDM0MDE4OTMyMGE4OGFhODlmNWJhMThjNDVmMjIw
NmIxMTA3Li4xM2U5MTI1YjE3ZGI0OWI4YTFiNGEzZTQwNjcyMjNjZTg1MWYyNDJiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTUtMDEtMzAgIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbiBjbGFzc2VzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMDg4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgUnlvc3VrZSBOaXdhIGFuZCBCZW5qYW1pbiBQb3VsYWluLgorCisgICAgICAg
IFJlbmFtZSBzaGFyZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24oKSBm
b3Igc2luZ2xldG9uCisgICAgICAgIGNsYXNzZXMgYXMgcGVyIHRoZSByZWNlbnQgY29kaW5nIHN0
eWxlIGNoYW5nZS4KKwogMjAxNS0wMS0yOSAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIG1vcmUgTW91bnRhaW4gTGlvbiBjb2RlIGZyb20gV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L3dp
bi9DaGFuZ2VMb2cKaW5kZXggYjQ2YzkyODNkNDljY2Q1NDFhYTgxNDg1MjU2ZDY4MzQwZmExNzk5
NC4uY2U1OWZlYzA1NzkyZjZhMDI0OWRkYTVkZmUzMTUzNGIzNmNkMDg2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE1LTAxLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rp
b25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTA4OAorCisgICAgICAgIFJldmll
d2VkIGJ5IFJ5b3N1a2UgTml3YSBhbmQgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBSZW5h
bWUgc2hhcmVkKCkgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNp
bmdsZXRvbgorICAgICAgICBjbGFzc2VzIGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBj
aGFuZ2UuCisKIDIwMTUtMDEtMjkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+
CiAKICAgICAgICAgW1dpbl0gQnVpbGQgZml4IGFmdGVyIHIxNzkzNjguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
OGJjODRjMjQ4MzRmYzQzNTA4MTllMGJhOWZkNDI0YWUzNTBlMDMxYS4uZjhiOTVlOGFiYzFiZTVk
YjhiMmI3MjkwYWJhM2E1MzgxOTdlMzZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE1LTAxLTMwICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVu
YW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHRvIHNpbmdsZXRvbigpIGZvciBz
aW5nbGV0b24gY2xhc3Nlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0MTA4OAorCisgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YSBhbmQg
QmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBSZW5hbWUgc2hhcmVkKCkgc3RhdGljIG1lbWJl
ciBmdW5jdGlvbnMgdG8gc2luZ2xldG9uKCkgZm9yIHNpbmdsZXRvbgorICAgICAgICBjbGFzc2Vz
IGFzIHBlciB0aGUgcmVjZW50IGNvZGluZyBzdHlsZSBjaGFuZ2UuCisKIDIwMTUtMDEtMjkgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IFJlc2l6ZSB0aGUgcmVkaXJlY3RlZCBYQ29tcG9zaXRlIGFnYWluIGFmdGVyIGxlYXZpbmcgYWNj
ZWxlcmF0ZWQgY29tcG9zaXRpbmcgbW9kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAppbmRleCAwZGZmYzI4NmYw
M2ZiZDJiNzE5NzNiMzEwMzAwNTI3ZjI0ZmQzNTRlLi4yY2Q4NTE5N2IzZjQyODgyMTg0YjRmOGJh
ZmEwYTg4ZGUyOTc0NmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IuaApAQCAtNDYsNyArNDYsNyBAQCBzdHJ1
Y3QgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm87CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBSZW1vdGVJbnNwZWN0b3IgZmluYWwgOiBwdWJsaWMgUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVj
dGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzdGFydERpc2FibGVkKCk7
Ci0gICAgc3RhdGljIFJlbW90ZUluc3BlY3RvciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFJlbW90
ZUluc3BlY3RvciYgc2luZ2xldG9uKCk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVk
PFJlbW90ZUluc3BlY3Rvcj47CiAKICAgICB2b2lkIHJlZ2lzdGVyRGVidWdnYWJsZShSZW1vdGVJ
bnNwZWN0b3JEZWJ1Z2dhYmxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3IubW0KaW5kZXggYzhhMzllNjQxZjFh
NDUwNGNhMjU0YTQ0NDgzOWM2YzQ3NGUxZTcwMy4uNDZkNTA0NGM1ZTAyMjRmOTJlNTYyMjQ4Nzg3
NDBmYWY0N2EwZjJiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yLm1tCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3Rvci5tbQpAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFJlbW90ZUluc3BlY3Rvcjo6c3RhcnREaXNhYmxlZCgpCiAgICAgUmVtb3RlSW5zcGVjdG9yOjpz
dGFydEVuYWJsZWQgPSBmYWxzZTsKIH0KIAotUmVtb3RlSW5zcGVjdG9yJiBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpCitSZW1vdGVJbnNwZWN0b3ImIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UmVtb3RlSW5zcGVjdG9yPiBzaGFyZWQ7
CiAKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6c3RhcnQoKQogICAg
IH0pOwogCiAgICAgbm90aWZ5X3JlZ2lzdGVyX2Rpc3BhdGNoKFdJUlNlcnZpY2VBdmFpbGFibGVO
b3RpZmljYXRpb24sICZtX25vdGlmeVRva2VuLCBtX3hwY1F1ZXVlLCBeKGludCkgewotICAgICAg
ICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnNldHVwWFBDQ29ubmVjdGlvbklmTmVlZGVkKCk7
CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuc2V0dXBYUENDb25uZWN0aW9u
SWZOZWVkZWQoKTsKICAgICB9KTsKIAogICAgIG5vdGlmeV9wb3N0KFdJUlNlcnZpY2VBdmFpbGFi
aWxpdHlDaGVja05vdGlmaWNhdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3JlbW90ZS9SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCmluZGV4IGRmZWUwZWJiYzkyOWNiYTQ2ZmMzNTZlZWVkN2VjZjFhNzNiMzg5OTguLmFj
ODNhMThlOTU5OTViMWMzNTg2ZmE3ODYxMDcxZmNjNGU1ZWI4MzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2Fi
bGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwCkBAIC00MiwxNyArNDIsMTcgQEAgUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZTo6UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZSgpCiAKIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGU6On5SZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlKCkKIHsKLSAgICBSZW1v
dGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVucmVnaXN0ZXJEZWJ1Z2dhYmxlKHRoaXMpOworICAgIFJl
bW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudW5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9
CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5pdCgpCiB7Ci0gICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaGFyZWQoKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKS5yZWdpc3RlckRlYnVnZ2FibGUodGhpcyk7CiB9CiAKIHZv
aWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6dXBkYXRlKCkKIHsKLSAgICBSZW1vdGVJbnNw
ZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURlYnVnZ2FibGUodGhpcyk7CisgICAgUmVtb3RlSW5zcGVj
dG9yOjpzaW5nbGV0b24oKS51cGRhdGVEZWJ1Z2dhYmxlKHRoaXMpOwogfQogCiB2b2lkIFJlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNldFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxv
d2VkKQpAQCAtNjMsOSArNjMsOSBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGU6OnNl
dFJlbW90ZURlYnVnZ2luZ0FsbG93ZWQoYm9vbCBhbGxvd2VkKQogICAgIG1fYWxsb3dlZCA9IGFs
bG93ZWQ7CiAKICAgICBpZiAobV9hbGxvd2VkICYmIGF1dG9tYXRpY0luc3BlY3Rpb25BbGxvd2Vk
KCkpCi0gICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkudXBkYXRlRGVidWdnYWJsZUF1
dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6
c2luZ2xldG9uKCkudXBkYXRlRGVidWdnYWJsZUF1dG9tYXRpY0luc3BlY3RDYW5kaWRhdGUodGhp
cyk7CiAgICAgZWxzZQotICAgICAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnVwZGF0ZURl
YnVnZ2FibGUodGhpcyk7CisgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkudXBk
YXRlRGVidWdnYWJsZSh0aGlzKTsKIH0KIAogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUluZm8g
UmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZTo6aW5mbygpIGNvbnN0CkBAIC04NywxMyArODcsMTMg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlOjpwYXVzZVdhaXRpbmdGb3JBdXRvbWF0
aWNJbnNwZWN0aW9uKCkKICAgICBBU1NFUlQoYXV0b21hdGljSW5zcGVjdGlvbkFsbG93ZWQoKSk7
CiAKICAgICBFdmVudExvb3AgbG9vcDsKLSAgICB3aGlsZSAoUmVtb3RlSW5zcGVjdG9yOjpzaGFy
ZWQoKS53YWl0aW5nRm9yQXV0b21hdGljSW5zcGVjdGlvbihpZGVudGlmaWVyKCkpICYmICFsb29w
LmVuZGVkKCkpCisgICAgd2hpbGUgKFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkud2FpdGlu
Z0ZvckF1dG9tYXRpY0luc3BlY3Rpb24oaWRlbnRpZmllcigpKSAmJiAhbG9vcC5lbmRlZCgpKQog
ICAgICAgICBsb29wLmN5Y2xlKCk7CiB9CiAKIHZvaWQgUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZTo6dW5wYXVzZUZvckluaXRpYWxpemVkSW5zcGVjdG9yKCkKIHsKLSAgICBSZW1vdGVJbnNwZWN0
b3I6OnNoYXJlZCgpLnNldHVwQ29tcGxldGVkKGlkZW50aWZpZXIoKSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZXR1cENvbXBsZXRlZChpZGVudGlmaWVyKCkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvcmVtb3RlL1JlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1t
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KaW5kZXggYTk3ZGNiYmJhZDkwODMyNzk1Y2Q0OWJkNTU0
ZDRhNjUwMzg0MTVjZS4uOGU3OWE1NmIyOWQyZDNhM2I4Y2YzMDczMjY3YzYxODI2MDQ5MDFkYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3Rl
SW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24u
bW0KQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uOjpzZXR1cChib29sIGlzQXV0b21hdGljSW5zcGVjdGlvbikKICAgICAgICAgewogICAg
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2sobV9kZWJ1Z2dhYmxlTXV0
ZXgpOwogICAgICAgICAgICAgaWYgKCFtX2RlYnVnZ2FibGUgfHwgIW1fZGVidWdnYWJsZS0+cmVt
b3RlRGVidWdnaW5nQWxsb3dlZCgpIHx8IG1fZGVidWdnYWJsZS0+aGFzTG9jYWxEZWJ1Z2dlcigp
KSB7Ci0gICAgICAgICAgICAgICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zZXR1cEZhaWxl
ZChpZGVudGlmaWVyKCkpOworICAgICAgICAgICAgICAgIFJlbW90ZUluc3BlY3Rvcjo6c2luZ2xl
dG9uKCkuc2V0dXBGYWlsZWQoaWRlbnRpZmllcigpKTsKICAgICAgICAgICAgICAgICBtX2RlYnVn
Z2FibGUgPSBudWxscHRyOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBt
X2RlYnVnZ2FibGUtPmNvbm5lY3QodGhpcywgaXNBdXRvbWF0aWNJbnNwZWN0aW9uKTsKQEAgLTIy
MCw3ICsyMjAsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpz
ZW5kTWVzc2FnZVRvQmFja2VuZChOU1N0cmluZyAqbWVzc2FnZQogCiBib29sIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGVDb25uZWN0aW9uOjpzZW5kTWVzc2FnZVRvRnJvbnRlbmQoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCkuc2VuZE1lc3Nh
Z2VUb1JlbW90ZUZyb250ZW5kKGlkZW50aWZpZXIoKSwgbWVzc2FnZSk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoaWRlbnRpZmll
cigpLCBtZXNzYWdlKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFkTWFuYWdlci5jcHAKaW5kZXggYzNlMDg2ZjUzNWMy
MjllYTllNTJjZTlhNTg4YmQxNmEzZjI0YzIxMi4uNjhjN2QwNDg4Nzc2NTE1NTJjZmVlNzVkNzcy
MDI1MzZlNmQyZDFkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFk
L0dhbWVwYWRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQv
R2FtZXBhZE1hbmFnZXIuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBOYXZpZ2F0b3JHYW1l
cGFkKiBuYXZpZ2F0b3JHYW1lcGFkRnJvbURPTVdpbmRvdyhET01XaW5kb3cqIHdpbmRvdykKICAg
ICByZXR1cm4gTmF2aWdhdG9yR2FtZXBhZDo6ZnJvbShuYXZpZ2F0b3IpOwogfQogCi1HYW1lcGFk
TWFuYWdlciYgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpCitHYW1lcGFkTWFuYWdlciYgR2FtZXBh
ZE1hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEdhbWVw
YWRNYW5hZ2VyPiBzaGFyZWRNYW5hZ2VyOwogICAgIHJldHVybiBzaGFyZWRNYW5hZ2VyOwpAQCAt
NjEsNyArNjEsNyBAQCBHYW1lcGFkTWFuYWdlcjo6R2FtZXBhZE1hbmFnZXIoKQogdm9pZCBHYW1l
cGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3JtR2FtZXBhZCYgcGxh
dGZvcm1HYW1lcGFkKQogewogICAgIC8vIE5vdGlmeSBibGluZCBOYXZpZ2F0b3JzIGFuZCBXaW5k
b3dzIGFib3V0IGFsbCBnYW1lcGFkcyBleGNlcHQgZm9yIHRoaXMgb25lLgotICAgIGZvciAoYXV0
byogZ2FtZXBhZCA6IEdhbWVwYWRQcm92aWRlcjo6c2hhcmVkKCkucGxhdGZvcm1HYW1lcGFkcygp
KSB7CisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24o
KS5wbGF0Zm9ybUdhbWVwYWRzKCkpIHsKICAgICAgICAgaWYgKCFnYW1lcGFkIHx8IGdhbWVwYWQg
PT0gJnBsYXRmb3JtR2FtZXBhZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMTksNyAr
MTE5LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6cGxhdGZvcm1HYW1lcGFkSW5wdXRBY3Rpdml0
eSgpCiAgICAgaWYgKG1fZ2FtZXBhZEJsaW5kTmF2aWdhdG9ycy5pc0VtcHR5KCkgJiYgbV9nYW1l
cGFkQmxpbmRET01XaW5kb3dzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9y
IChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5wbGF0Zm9ybUdhbWVw
YWRzKCkpCisgICAgZm9yIChhdXRvKiBnYW1lcGFkIDogR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0
b24oKS5wbGF0Zm9ybUdhbWVwYWRzKCkpCiAgICAgICAgIG1ha2VHYW1lcGFkVmlzaWJsZSgqZ2Ft
ZXBhZCwgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLCBtX2dhbWVwYWRCbGluZERPTVdpbmRvd3Mp
OwogCiAgICAgbV9nYW1lcGFkQmxpbmROYXZpZ2F0b3JzLmNsZWFyKCk7CkBAIC0yMTgsNyArMjE4
LDcgQEAgdm9pZCBHYW1lcGFkTWFuYWdlcjo6bWF5YmVTdGFydE1vbml0b3JpbmdHYW1lcGFkcygp
CiAgICAgaWYgKCFtX25hdmlnYXRvcnMuaXNFbXB0eSgpIHx8ICFtX2RvbVdpbmRvd3MuaXNFbXB0
eSgpKSB7CiAgICAgICAgIExPRyhHYW1lcGFkLCAiR2FtZXBhZE1hbmFnZXIgaGFzICVpIE5hdmln
YXRvckdhbWVwYWRzIGFuZCAlaSBET01XaW5kb3dzIHJlZ2lzdGVyZWQsIGlzIHN0YXJ0aW5nIGdh
bWVwYWQgbW9uaXRvcmluZyIsIG1fbmF2aWdhdG9ycy5zaXplKCksIG1fZG9tV2luZG93cy5zaXpl
KCkpOwogICAgICAgICBtX2lzTW9uaXRvcmluZ0dhbWVwYWRzID0gdHJ1ZTsKLSAgICAgICAgR2Ft
ZXBhZFByb3ZpZGVyOjpzaGFyZWQoKS5zdGFydE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKKyAg
ICAgICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zdGFydE1vbml0b3JpbmdHYW1lcGFk
cyh0aGlzKTsKICAgICB9CiB9CiAKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIEdhbWVwYWRNYW5h
Z2VyOjptYXliZVN0b3BNb25pdG9yaW5nR2FtZXBhZHMoKQogICAgIGlmIChtX25hdmlnYXRvcnMu
aXNFbXB0eSgpICYmIG1fZG9tV2luZG93cy5pc0VtcHR5KCkpIHsKICAgICAgICAgTE9HKEdhbWVw
YWQsICJHYW1lcGFkTWFuYWdlciBoYXMgbm8gTmF2aWdhdG9yR2FtZXBhZHMgb3IgRE9NV2luZG93
cyByZWdpc3RlcmVkLCBpcyBzdG9wcGluZyBnYW1lcGFkIG1vbml0b3JpbmciKTsKICAgICAgICAg
bV9pc01vbml0b3JpbmdHYW1lcGFkcyA9IGZhbHNlOwotICAgICAgICBHYW1lcGFkUHJvdmlkZXI6
OnNoYXJlZCgpLnN0b3BNb25pdG9yaW5nR2FtZXBhZHModGhpcyk7CisgICAgICAgIEdhbWVwYWRQ
cm92aWRlcjo6c2luZ2xldG9uKCkuc3RvcE1vbml0b3JpbmdHYW1lcGFkcyh0aGlzKTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZ2FtZXBhZC9HYW1lcGFk
TWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2Vy
LmgKaW5kZXggMTA0NjBiODVmYzViZjcxZGQ3MGQwODA2ZThlZDczMzBjMDI0YzcxZC4uMTExNDhl
MTI0ODM2MzkxYjA1NTc2Mjk3ZWY0M2ZkNzhiOTNmYmM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9nYW1lcGFkL0dhbWVwYWRNYW5hZ2VyLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xh
c3MgR2FtZXBhZE1hbmFnZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyQ2xpZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHYW1lcGFkTWFuYWdlcik7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPEdhbWVwYWRNYW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgR2FtZXBh
ZE1hbmFnZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBHYW1lcGFkTWFuYWdlciYgc2luZ2xldG9u
KCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1HYW1lcGFkQ29ubmVjdGVkKFBsYXRmb3Jt
R2FtZXBhZCYpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUdhbWVw
YWREaXNjb25uZWN0ZWQoUGxhdGZvcm1HYW1lcGFkJikgb3ZlcnJpZGUgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2dhbWVwYWQvTmF2aWdhdG9yR2FtZXBhZC5jcHAKaW5k
ZXggNWQ3YjUzOTYyMmFhOTQwODhiMWYxMTYwNzdkMmI3N2VkZTkxMTdlOC4uMThmMWI0ZTYzNWY2
OGIxN2Y3YjAyNzljNDJlNThjMmUxYzRiYjljZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9nYW1lcGFkL05hdmlnYXRvckdhbWVwYWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvZ2FtZXBhZC9OYXZpZ2F0b3JHYW1lcGFkLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5hdmlnYXRvckdhbWVwYWQ6Ok5hdmlnYXRvckdhbWVwYWQo
KQogICAgIDogbV9uYXZpZ2F0aW9uU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpKQogewotICAgIEdhbWVwYWRNYW5hZ2VyOjpzaGFyZWQoKS5yZWdpc3Rlck5hdmln
YXRvcih0aGlzKTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0ZXJOYXZp
Z2F0b3IodGhpcyk7CiB9CiAKIE5hdmlnYXRvckdhbWVwYWQ6On5OYXZpZ2F0b3JHYW1lcGFkKCkK
IHsKLSAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0aGlz
KTsKKyAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkudW5yZWdpc3Rlck5hdmlnYXRvcih0
aGlzKTsKIH0KIAogY29uc3QgY2hhciogTmF2aWdhdG9yR2FtZXBhZDo6c3VwcGxlbWVudE5hbWUo
KQpAQCAtOTEsNyArOTEsNyBAQCBjb25zdCBWZWN0b3I8UmVmUHRyPEdhbWVwYWQ+PiYgTmF2aWdh
dG9yR2FtZXBhZDo6Z2FtZXBhZHMoKQogICAgIGlmIChtX2dhbWVwYWRzLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG1fZ2FtZXBhZHM7CiAKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1l
cGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRm
b3JtR2FtZXBhZHMoKTsKKyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRm
b3JtR2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBh
ZHMoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwbGF0Zm9ybUdhbWVwYWRzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmICghcGxhdGZvcm1HYW1lcGFkc1tpXSkgewpAQCAtMTA4
LDcgKzEwOCw3IEBAIGNvbnN0IFZlY3RvcjxSZWZQdHI8R2FtZXBhZD4+JiBOYXZpZ2F0b3JHYW1l
cGFkOjpnYW1lcGFkcygpCiAKIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZHNCZWNhbWVW
aXNpYmxlKCkKIHsKLSAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3Jt
R2FtZXBhZHMgPSBHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKTsK
KyAgICBjb25zdCBWZWN0b3I8UGxhdGZvcm1HYW1lcGFkKj4mIHBsYXRmb3JtR2FtZXBhZHMgPSBH
YW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnBsYXRmb3JtR2FtZXBhZHMoKTsKICAgICBtX2dh
bWVwYWRzLnJlc2l6ZShwbGF0Zm9ybUdhbWVwYWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGxhdGZvcm1HYW1lcGFkcy5zaXplKCk7ICsraSkgewpAQCAtMTI4LDcg
KzEyOCw3IEBAIHZvaWQgTmF2aWdhdG9yR2FtZXBhZDo6Z2FtZXBhZENvbm5lY3RlZChQbGF0Zm9y
bUdhbWVwYWQmIHBsYXRmb3JtR2FtZXBhZCkKICAgICB9CiAKICAgICB1bnNpZ25lZCBpbmRleCA9
IHBsYXRmb3JtR2FtZXBhZC5pbmRleCgpOwotICAgIEFTU0VSVChHYW1lcGFkUHJvdmlkZXI6OnNo
YXJlZCgpLnBsYXRmb3JtR2FtZXBhZHMoKVtpbmRleF0gPT0gJnBsYXRmb3JtR2FtZXBhZCk7Cisg
ICAgQVNTRVJUKEdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkucGxhdGZvcm1HYW1lcGFkcygp
W2luZGV4XSA9PSAmcGxhdGZvcm1HYW1lcGFkKTsKIAogICAgIC8vIFRoZSBuZXcgaW5kZXggc2hv
dWxkIGFscmVhZHkgZml0IGluIHRoZSBleGlzdGluZyBhcnJheSwgb3Igc2hvdWxkIGJlIGV4YWN0
bHkgb25lIHBhc3QtdGhlLWVuZCBvZiB0aGUgZXhpc3RpbmcgYXJyYXkuCiAgICAgQVNTRVJUKGlu
ZGV4IDw9IG1fZ2FtZXBhZHMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2suY3BwCmluZGV4IGI5YzY1NGMyZDNi
ZGMxYTJhN2U4NWNjYjU4MjYzNWYzZmM2MTFiZTQuLjMxZmMxOThiMTcxNmMxM2NhODkyNmRmOWVm
NDI1MDIxNThjM2M0ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFjay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrLmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSgpIGNvbnN0CiB2b2lk
IE1lZGlhU3RyZWFtVHJhY2s6OmdldFNvdXJjZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbVRyYWNrU291cmNlc0NhbGxiYWNrPiBjYWxsYmFj
aywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tTb3Vy
Y2VzUmVxdWVzdD4gcmVxdWVzdCA9IE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIGNhbGxiYWNrKTsKLSAgICBpZiAoIU1lZGlhU3RyZWFtQ2VudGVyOjpzaGFy
ZWQoKS5nZXRNZWRpYVN0cmVhbVRyYWNrU291cmNlcyhyZXF1ZXN0LnJlbGVhc2UoKSkpCisgICAg
aWYgKCFNZWRpYVN0cmVhbUNlbnRlcjo6c2luZ2xldG9uKCkuZ2V0TWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXMocmVxdWVzdC5yZWxlYXNlKCkpKQogICAgICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJS
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Vz
ZXJNZWRpYVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFSZXF1ZXN0LmNwcAppbmRleCBjYmQ2ZmJhNzk5ZjcwZjc2NWM1MmY1NzdhZjVmZTc2
ZjNhYzZjZTQyLi5jNTMyZDc4ZmQ0YjcxM2NhM2E5NjQxYWI3M2U4Mzg2ZTg4ZGU3MGQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYVJlcXVl
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlh
UmVxdWVzdC5jcHAKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVlc3Q6OnN0
YXJ0KCkKIHsKICAgICAvLyAxIC0gbWFrZSBzdXJlIHRoZSBzeXN0ZW0gaXMgY2FwYWJsZSBvZiBz
dXBwb3J0aW5nIHRoZSBhdWRpbyBhbmQgdmlkZW8gY29uc3RyYWludHMuIFdlIGRvbid0IHdhbnQg
dG8gYXNrIGZvcgogICAgIC8vIHVzZXIgcGVybWlzc2lvbiBpZiB0aGUgY29uc3RyYWludHMgY2Fu
IG5vdCBiZSBzdXBvcnRlZC4KLSAgICBNZWRpYVN0cmVhbUNlbnRlcjo6c2hhcmVkKCkudmFsaWRh
dGVSZXF1ZXN0Q29uc3RyYWludHModGhpcywgbV9hdWRpb0NvbnN0cmFpbnRzLCBtX3ZpZGVvQ29u
c3RyYWludHMpOworICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24oKS52YWxpZGF0ZVJl
cXVlc3RDb25zdHJhaW50cyh0aGlzLCBtX2F1ZGlvQ29uc3RyYWludHMsIG1fdmlkZW9Db25zdHJh
aW50cyk7CiB9CiAKICAgICAKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIFVzZXJNZWRpYVJlcXVl
c3Q6OnVzZXJNZWRpYUFjY2Vzc0dyYW50ZWQoKQogICAgIFJlZlB0cjxVc2VyTWVkaWFSZXF1ZXN0
PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXNdIHsKICAgICAgICAgLy8gMyAtIHRoZSB1c2VyIGdyYW50ZWQgYWNjZXNzLCBhc2sgcGxhdGZv
cm0gdG8gY3JlYXRlIHRoZSBtZWRpYSBzdHJlYW0gZGVzY3JpcHRvcnMuCi0gICAgICAgIE1lZGlh
U3RyZWFtQ2VudGVyOjpzaGFyZWQoKS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdl
dCgpLCBwcm90ZWN0ZWRUaGlzLT5tX2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1f
dmlkZW9Db25zdHJhaW50cyk7CisgICAgICAgIE1lZGlhU3RyZWFtQ2VudGVyOjpzaW5nbGV0b24o
KS5jcmVhdGVNZWRpYVN0cmVhbShwcm90ZWN0ZWRUaGlzLmdldCgpLCBwcm90ZWN0ZWRUaGlzLT5t
X2F1ZGlvQ29uc3RyYWludHMsIHByb3RlY3RlZFRoaXMtPm1fdmlkZW9Db25zdHJhaW50cyk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggOTZlNTdmMzkwNzMzZDM0NTFmZmEy
ODRhMGRjM2Q4NjkyMGQ1M2E0MS4uMDJmODU4N2EwNTlmMzdjYjJhNzA3YjcyNjc4OTZiMzdlNGY4
Njk3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTExNjMsNyArMTE2Myw3IEBAIF9fWk43V2Vi
Q29yZTMwaG9zdE5hbWVOZWVkc0RlY29kaW5nV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UK
IF9fWk43V2ViQ29yZTMwaG9zdE5hbWVOZWVkc0VuY29kaW5nV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTMwb3ZlcnJpZGVVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzRVJL
TjNXVEY2VmVjdG9ySU5TMF82U3RyaW5nRUxtMEVOUzBfMTVDcmFzaE9uT3ZlcmZsb3dFRUUKIF9f
Wk43V2ViQ29yZTMxQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTVlbXB0eUV2Ci1fX1pO
N1dlYkNvcmUzMUNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU2c2hhcmVkRXYKK19fWk43
V2ViQ29yZTMxQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTlzaW5nbGV0b25FdgogX19a
TjdXZWJDb3JlMzFlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyRVJLTlNfM1VSTEVTMl8K
IF9fWk43V2ViQ29yZTMzc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzRVJLTjNXVEY2
U3RyaW5nRQogX19aTjdXZWJDb3JlMzZsYXJnZXN0UmVjdFdpdGhBc3BlY3RSYXRpb0luc2lkZVJl
Y3RFZlJLTlNfOUZsb2F0UmVjdEUKQEAgLTE2MTMsNyArMTYxMyw3IEBAIF9fWk43V2ViQ29yZTlQ
YWdlQ2FjaGUxMHNldE1heFNpemVFagogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTE0cHJ1bmVUb1Np
emVOb3dFak5TXzEzUHJ1bmluZ1JlYXNvbkUKIF9fWk43V2ViQ29yZTlQYWdlQ2FjaGUzNG1hcmtQ
YWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGNFdgogX19aTjdXZWJDb3JlOVBhZ2VDYWNoZTZy
ZW1vdmVFUk5TXzExSGlzdG9yeUl0ZW1FCi1fX1pON1dlYkNvcmU5UGFnZUNhY2hlNnNoYXJlZEV2
CitfX1pON1dlYkNvcmU5UGFnZUNhY2hlOXNpbmdsZXRvbkV2CiBfX1pON1dlYkNvcmU5UGFnZUdy
b3VwOXBhZ2VHcm91cEVSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIxMW1v
dXNlRXhpdGVkRXYKIF9fWk43V2ViQ29yZTlTY3JvbGxiYXIxMm1vdXNlRW50ZXJlZEV2CkBAIC0y
NzYwLDcgKzI3NjAsNyBAQCBfX1pON1dlYkNvcmUyM2F0Qm91bmRhcnlPZkdyYW51bGFyaXR5RVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FTlNfMTVUZXh0R3JhbnVsYXJpdAogX19aTjdXZWJDb3JlMjRE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIxNG1hcmtlcnNJblJhbmdlRVBOU181UmFuZ2VFTlNfMTRE
b2N1bWVudE1hcmtlcjExTWFya2VyVHlwZXNFCiBfX1pON1dlYkNvcmUyNEZsb2F0aW5nUG9pbnRF
bnZpcm9ubWVudDIxZW5hYmxlRGVub3JtYWxTdXBwb3J0RXYKIF9fWk43V2ViQ29yZTI0RmxvYXRp
bmdQb2ludEVudmlyb25tZW50MjVzYXZlTWFpblRocmVhZEVudmlyb25tZW50RXYKLV9fWk43V2Vi
Q29yZTI0RmxvYXRpbmdQb2ludEVudmlyb25tZW50NnNoYXJlZEV2CitfX1pON1dlYkNvcmUyNEZs
b2F0aW5nUG9pbnRFbnZpcm9ubWVudDlzaW5nbGV0b25FdgogX19aTjdXZWJDb3JlMjRhY3F1aXJl
TGluZUJyZWFrSXRlcmF0b3JFTjNXVEYxMFN0cmluZ1ZpZXdFUktOUzBfMTJBdG9taWNTdHJpbmdF
UEt0ak5TXzIxTGluZUJyZWFrSXRlcmF0b3JNb2RlRWIKIF9fWk43V2ViQ29yZTI0Y2hhcmFjdGVy
c0Fyb3VuZFBvc2l0aW9uRVJLTlNfMTVWaXNpYmxlUG9zaXRpb25FUmlTM19TM18KIF9fWk43V2Vi
Q29yZTI0Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5RVA4TlNTdHJpbmcKQEAgLTMxMzcsOCArMzEz
Nyw4IEBAIF9fWk5LN1dlYkNvcmU3RWxlbWVudDI1Y29udGFpbnNGdWxsU2NyZWVuRWxlbWVudEV2
CiAKICNpZiBFTkFCTEUoR0FNRVBBRCkKIF9fWk43V2ViQ29yZTE1R2FtZXBhZFByb3ZpZGVyMTdz
ZXRTaGFyZWRQcm92aWRlckVSUzBfCi1fX1pON1dlYkNvcmUxNUdhbWVwYWRQcm92aWRlcjZzaGFy
ZWRFdgotX19aTjdXZWJDb3JlMThISURHYW1lcGFkUHJvdmlkZXI2c2hhcmVkRXYKK19fWk43V2Vi
Q29yZTE1R2FtZXBhZFByb3ZpZGVyOXNpbmdsZXRvbkV2CitfX1pON1dlYkNvcmUxOEhJREdhbWVw
YWRQcm92aWRlcjlzaW5nbGV0b25FdgogI2VuZGlmCiAKICNpZiBFTkFCTEUoR0VPTE9DQVRJT04p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9BbGdv
cml0aG1EaWN0aW9uYXJ5LmNwcAppbmRleCA3NjlkNzJkZTA4OGExNzRlY2MwM2M4ZjczZDEyNjRk
ZjNkNGExNDJhLi42NGQ1NmQ5NzBhNzRlNWRjMWFlYWEzODU5NWI1NmJkMWU2MzQ2ZmUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0FsZ29yaXRobURpY3Rp
b25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvQWxnb3Jp
dGhtRGljdGlvbmFyeS5jcHAKQEAgLTc5LDcgKzc5LDcgQEAgYm9vbCBKU0NyeXB0b0FsZ29yaXRo
bURpY3Rpb25hcnk6OmdldEFsZ29yaXRobUlkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHUKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmICghQ3J5cHRvQWxnb3Jp
dGhtUmVnaXN0cnk6OnNoYXJlZCgpLmdldElkZW50aWZpZXJGb3JOYW1lKGFsZ29yaXRobU5hbWUs
IGFsZ29yaXRobUlkZW50aWZpZXIpKSB7CisgICAgaWYgKCFDcnlwdG9BbGdvcml0aG1SZWdpc3Ry
eTo6c2luZ2xldG9uKCkuZ2V0SWRlbnRpZmllckZvck5hbWUoYWxnb3JpdGhtTmFtZSwgYWxnb3Jp
dGhtSWRlbnRpZmllcikpIHsKICAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIE5PVF9TVVBQ
T1JURURfRVJSKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0su
Y3BwCmluZGV4IDAyZmExYzA1Y2NjZWJlNzY2ZmNjZDk2NDdjOTcxNGJjYWU4YWI0NzMuLmE4OTE3
ZDc1ZGE0ZDg0NjA0NGFmMWFlMjllMWE5Y2U0MWQ1ZjMzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ3J5cHRvS2V5U2VyaWFsaXphdGlvbkpXSy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDcnlwdG9LZXlTZXJpYWxpemF0aW9uSldLLmNw
cApAQCAtMTcwLDQ5ICsxNzAsNTAgQEAgYm9vbCBKU0NyeXB0b0tleVNlcmlhbGl6YXRpb25KV0s6
OnJlY29uY2lsZUFsZ29yaXRobShzdGQ6OnVuaXF1ZV9wdHI8Q3J5cHRvQWxnb3IKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYXV0byYgYWxnb3JpdGhtUmVnaXN0eSA9IENyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q3J5
cHRvQWxnb3JpdGhtPiBhbGdvcml0aG07CiAgICAgc3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29y
aXRobVBhcmFtZXRlcnM+IHBhcmFtZXRlcnM7CiAgICAgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9
PSAiSFMyNTYiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CisgICAg
ICAgIGFsZ29yaXRobSA9IGFsZ29yaXRobVJlZ2lzdHkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlk
ZW50aWZpZXI6OkhNQUMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gY3JlYXRlSE1BQ1BhcmFtZXRl
cnMoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzI1Nik7CiAgICAgfSBlbHNlIGlmICht
X2p3a0FsZ29yaXRobU5hbWUgPT0gIkhTMzg0IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlw
dG9BbGdvcml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OkhNQUMpOworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0aG1SZWdpc3R5LmNyZWF0
ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKTsKICAgICAgICAgcGFyYW1ldGVycyA9
IGNyZWF0ZUhNQUNQYXJhbWV0ZXJzKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlNIQV8zODQp
OwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJIUzUxMiIpIHsKLSAgICAg
ICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShD
cnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpITUFDKTsKKyAgICAgICAgYWxnb3JpdGhtID0gYWxn
b3JpdGhtUmVnaXN0eS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6SE1BQyk7CiAg
ICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVITUFDUGFyYW1ldGVycyhDcnlwdG9BbGdvcml0aG1J
ZGVudGlmaWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9
PSAiUlMyNTYiKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1Mx
X3YxXzUpOworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0aG1SZWdpc3R5LmNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFfNSk7CiAgICAgICAgIHBhcmFt
ZXRlcnMgPSBjcmVhdGVSU0FLZXlQYXJhbWV0ZXJzV2l0aEhhc2goQ3J5cHRvQWxnb3JpdGhtSWRl
bnRpZmllcjo6U0hBXzI1Nik7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0g
IlJTMzg0IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6
c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92
MV81KTsKKyAgICAgICAgYWxnb3JpdGhtID0gYWxnb3JpdGhtUmVnaXN0eS5jcmVhdGUoQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6UlNBU1NBX1BLQ1MxX3YxXzUpOwogICAgICAgICBwYXJhbWV0
ZXJzID0gY3JlYXRlUlNBS2V5UGFyYW1ldGVyc1dpdGhIYXNoKENyeXB0b0FsZ29yaXRobUlkZW50
aWZpZXI6OlNIQV8zODQpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09ICJS
UzUxMiIpIHsKLSAgICAgICAgYWxnb3JpdGhtID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNo
YXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FTU0FfUEtDUzFfdjFf
NSk7CisgICAgICAgIGFsZ29yaXRobSA9IGFsZ29yaXRobVJlZ2lzdHkuY3JlYXRlKENyeXB0b0Fs
Z29yaXRobUlkZW50aWZpZXI6OlJTQVNTQV9QS0NTMV92MV81KTsKICAgICAgICAgcGFyYW1ldGVy
cyA9IGNyZWF0ZVJTQUtleVBhcmFtZXRlcnNXaXRoSGFzaChDcnlwdG9BbGdvcml0aG1JZGVudGlm
aWVyOjpTSEFfNTEyKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlNB
MV81IikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeTo6c2hh
cmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OlJTQUVTX1BLQ1MxX3YxXzUp
OworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0aG1SZWdpc3R5LmNyZWF0ZShDcnlwdG9BbGdv
cml0aG1JZGVudGlmaWVyOjpSU0FFU19QS0NTMV92MV81KTsKICAgICAgICAgcGFyYW1ldGVycyA9
IHN0ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVs
c2UgaWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiUlNBLU9BRVAiKSB7Ci0gICAgICAgIGFsZ29y
aXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxn
b3JpdGhtSWRlbnRpZmllcjo6UlNBX09BRVApOworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0
aG1SZWdpc3R5LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpSU0FfT0FFUCk7CiAg
ICAgICAgIHBhcmFtZXRlcnMgPSBjcmVhdGVSU0FLZXlQYXJhbWV0ZXJzV2l0aEhhc2goQ3J5cHRv
QWxnb3JpdGhtSWRlbnRpZmllcjo6U0hBXzEpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0
aG1OYW1lID09ICJBMTI4Q0JDIikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdvcml0
aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFF
U19DQkMpOworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0aG1SZWdpc3R5LmNyZWF0ZShDcnlw
dG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0
ZDo6bWFrZV91bmlxdWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2Ug
aWYgKG1fandrQWxnb3JpdGhtTmFtZSA9PSAiQTE5MkNCQyIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpBRVNfQ0JDKTsKKyAgICAgICAgYWxnb3JpdGhtID0gYWxnb3JpdGhtUmVn
aXN0eS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CiAgICAgICAg
IHBhcmFtZXRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+
KCk7CiAgICAgfSBlbHNlIGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkEyNTZDQkMiKSB7Ci0g
ICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVh
dGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0NCQyk7CisgICAgICAgIGFsZ29yaXRo
bSA9IGFsZ29yaXRobVJlZ2lzdHkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFF
U19DQkMpOwogICAgICAgICBwYXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdv
cml0aG1QYXJhbWV0ZXJzPigpOwogICAgIH0gZWxzZSBpZiAobV9qd2tBbGdvcml0aG1OYW1lID09
ICJBMTI4S1ciKSB7Ci0gICAgICAgIGFsZ29yaXRobSA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5
OjpzaGFyZWQoKS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllcjo6QUVTX0tXKTsKKyAg
ICAgICAgYWxnb3JpdGhtID0gYWxnb3JpdGhtUmVnaXN0eS5jcmVhdGUoQ3J5cHRvQWxnb3JpdGht
SWRlbnRpZmllcjo6QUVTX0tXKTsKICAgICAgICAgcGFyYW1ldGVycyA9IHN0ZDo6bWFrZV91bmlx
dWU8Q3J5cHRvQWxnb3JpdGhtUGFyYW1ldGVycz4oKTsKICAgICB9IGVsc2UgaWYgKG1fandrQWxn
b3JpdGhtTmFtZSA9PSAiQTE5MktXIikgewotICAgICAgICBhbGdvcml0aG0gPSBDcnlwdG9BbGdv
cml0aG1SZWdpc3RyeTo6c2hhcmVkKCkuY3JlYXRlKENyeXB0b0FsZ29yaXRobUlkZW50aWZpZXI6
OkFFU19LVyk7CisgICAgICAgIGFsZ29yaXRobSA9IGFsZ29yaXRobVJlZ2lzdHkuY3JlYXRlKENy
eXB0b0FsZ29yaXRobUlkZW50aWZpZXI6OkFFU19LVyk7CiAgICAgICAgIHBhcmFtZXRlcnMgPSBz
dGQ6Om1ha2VfdW5pcXVlPENyeXB0b0FsZ29yaXRobVBhcmFtZXRlcnM+KCk7CiAgICAgfSBlbHNl
IGlmIChtX2p3a0FsZ29yaXRobU5hbWUgPT0gIkEyNTZLVyIpIHsKLSAgICAgICAgYWxnb3JpdGht
ID0gQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLmNyZWF0ZShDcnlwdG9BbGdvcml0
aG1JZGVudGlmaWVyOjpBRVNfS1cpOworICAgICAgICBhbGdvcml0aG0gPSBhbGdvcml0aG1SZWdp
c3R5LmNyZWF0ZShDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyOjpBRVNfS1cpOwogICAgICAgICBw
YXJhbWV0ZXJzID0gc3RkOjptYWtlX3VuaXF1ZTxDcnlwdG9BbGdvcml0aG1QYXJhbWV0ZXJzPigp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIHRocm93VHlwZUVycm9yKG1fZXhlYywgIlVuc3VwcG9y
dGVkIEpXSyBhbGdvcml0aG0gIiArIG1fandrQWxnb3JpdGhtTmFtZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N1YnRsZUNyeXB0b0N1c3RvbS5jcHAKaW5kZXggYjJh
NjQ4ODhkZmE2NWNkMWQ5MzQ1M2IxZjJjNmRiMDE2OWE0MjI5Ny4uNmJhZWZjZDZlYmQxOTQ1MTY5
YmE0YWQyYTNhZmJhMjFjZGZhNjQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNTdWJ0bGVDcnlwdG9DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU3VidGxlQ3J5cHRvQ3VzdG9tLmNwcApAQCAtNjcsNyArNjcsNyBAQCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPENyeXB0b0FsZ29yaXRobT4gY3JlYXRlQWxnb3JpdGhtRnJvbUpTVmFs
dWUoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBh
dXRvIHJlc3VsdCA9IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQoKS5jcmVhdGUoYWxn
b3JpdGhtSWRlbnRpZmllcik7CisgICAgYXV0byByZXN1bHQgPSBDcnlwdG9BbGdvcml0aG1SZWdp
c3RyeTo6c2luZ2xldG9uKCkuY3JlYXRlKGFsZ29yaXRobUlkZW50aWZpZXIpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgTk9UX1NVUFBPUlRFRF9FUlIp
OwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8v
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0
b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcAppbmRleCA3ZjRlZWUzNGE0Yzg5Y2RiZjg2MTk5MmFkOTk1
YzFhM2YxNWQ0YWE1Li40MGRkMmM5MzVkMzUzODUwNTY1NmM1ZjVjMzU0ZDViMzQwNDAyNjY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5j
cHAKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DcnlwdG9BbGdv
cml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpCitDcnlwdG9B
bGdvcml0aG1SZWdpc3RyeSYgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpCiB7
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5PiByZWdp
c3RyeTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0FsZ29yaXRo
bVJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0
cnkuaAppbmRleCBmMDk0ODE0MWY4MzVmOWZiOWE0OTYwMzA2NTExYWFmODBlYTZiNTNhLi5iZDY0
YjE0MTc5OGYxOWQzYWY5N2ExN2FiYTc0Njk1ZDk5MDY4ZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jcnlwdG8vQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnkuaApAQCAtNDUsNyArNDUsNyBAQCBj
bGFzcyBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeSB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5PjsKIAogcHVibGljOgotICAgIHN0YXRpYyBD
cnlwdG9BbGdvcml0aG1SZWdpc3RyeSYgc2hhcmVkKCk7CisgICAgc3RhdGljIENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5JiBzaW5nbGV0b24oKTsKIAogICAgIGJvb2wgZ2V0SWRlbnRpZmllckZvck5h
bWUoY29uc3QgU3RyaW5nJiwgQ3J5cHRvQWxnb3JpdGhtSWRlbnRpZmllciYpOwogICAgIFN0cmlu
ZyBuYW1lRm9ySWRlbnRpZmllcihDcnlwdG9BbGdvcml0aG1JZGVudGlmaWVyKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9DcnlwdG9LZXkuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3J5cHRvL0NyeXB0b0tleS5jcHAKaW5kZXggYmEyZjAyYTlhZDViZGVlOWY3NmQ5ZDY3NDEwMjE5
YjQ3ODI1OWE2Mi4uNTNkMWMxZWI1NDVmNjE0MWVlMDUxNzI2NWFiMTNjNjk4MjVkOTYzYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3J5cHRvL0NyeXB0b0tleS5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgU3RyaW5nIENy
eXB0b0tleTo6dHlwZSgpIGNvbnN0CiAKIHZvaWQgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURl
c2NyaXB0aW9uKENyeXB0b0FsZ29yaXRobURlc2NyaXB0aW9uQnVpbGRlciYgYnVpbGRlcikgY29u
c3QKIHsKLSAgICBidWlsZGVyLmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5Ojpz
aGFyZWQoKS5uYW1lRm9ySWRlbnRpZmllcihtX2FsZ29yaXRobSkpOworICAgIGJ1aWxkZXIuYWRk
KCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5hbWVGb3JJZGVu
dGlmaWVyKG1fYWxnb3JpdGhtKSk7CiAgICAgLy8gU3ViY2xhc3NlcyB3aWxsIGFkZCBvdGhlciBr
ZXlzLgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8va2V5cy9DcnlwdG9L
ZXlITUFDLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3Bw
CmluZGV4IDVmYTEzODQxYmQ5ZTcwMzY5OGE1MGVkOWRmZmVmZGU0YzViMzY0ZDQuLmI1NTFmN2E5
ZWM2MDg2NDVjYjMwODM1Mzg0YWM3ZGUxN2FhM2Q5ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2NyeXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Ny
eXB0by9rZXlzL0NyeXB0b0tleUhNQUMuY3BwCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgQ3J5cHRv
S2V5SE1BQzo6YnVpbGRBbGdvcml0aG1EZXNjcmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlw
dGlvbkJ1aWxkZXImCiAgICAgQ3J5cHRvS2V5OjpidWlsZEFsZ29yaXRobURlc2NyaXB0aW9uKGJ1
aWxkZXIpOwogCiAgICAgYXV0byBoYXNoRGVzY3JpcHRpb25CdWlsZGVyID0gYnVpbGRlci5jcmVh
dGVFbXB0eUNsb25lKCk7Ci0gICAgaGFzaERlc2NyaXB0aW9uQnVpbGRlci0+YWRkKCJuYW1lIiwg
Q3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNoYXJlZCgpLm5hbWVGb3JJZGVudGlmaWVyKG1faGFz
aCkpOworICAgIGhhc2hEZXNjcmlwdGlvbkJ1aWxkZXItPmFkZCgibmFtZSIsIENyeXB0b0FsZ29y
aXRobVJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpKTsKICAg
ICBidWlsZGVyLmFkZCgiaGFzaCIsICpoYXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKIAogICAgIGJ1
aWxkZXIuYWRkKCJsZW5ndGgiLCBtX2tleS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3J5cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3J5
cHRvL21hYy9DcnlwdG9LZXlSU0FNYWMuY3BwCmluZGV4IGI1NmFjMjI5NGIwNmI3YjY4Nzk2N2Q0
MTUzZmU3MzZhYmQ3ZmZiMDQuLmIzM2E2NGU1N2FjYWI0OWE2NWE1NmI4NzI5ODI0ZGY2YjUwMWFj
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2NyeXB0by9tYWMvQ3J5cHRvS2V5UlNBTWFj
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jcnlwdG8vbWFjL0NyeXB0b0tleVJTQU1hYy5jcHAK
QEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIENyeXB0b0tleVJTQTo6YnVpbGRBbGdvcml0aG1EZXNj
cmlwdGlvbihDcnlwdG9BbGdvcml0aG1EZXNjcmlwdGlvbkJ1aWxkZXImCiAKICAgICBpZiAobV9y
ZXN0cmljdGVkVG9TcGVjaWZpY0hhc2gpIHsKICAgICAgICAgYXV0byBoYXNoRGVzY3JpcHRpb25C
dWlsZGVyID0gYnVpbGRlci5jcmVhdGVFbXB0eUNsb25lKCk7Ci0gICAgICAgIGhhc2hEZXNjcmlw
dGlvbkJ1aWxkZXItPmFkZCgibmFtZSIsIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5OjpzaGFyZWQo
KS5uYW1lRm9ySWRlbnRpZmllcihtX2hhc2gpKTsKKyAgICAgICAgaGFzaERlc2NyaXB0aW9uQnVp
bGRlci0+YWRkKCJuYW1lIiwgQ3J5cHRvQWxnb3JpdGhtUmVnaXN0cnk6OnNpbmdsZXRvbigpLm5h
bWVGb3JJZGVudGlmaWVyKG1faGFzaCkpOwogICAgICAgICBidWlsZGVyLmFkZCgiaGFzaCIsICpo
YXNoRGVzY3JpcHRpb25CdWlsZGVyKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5jcHAKaW5kZXggYjNhZDYxOTdlMmI3MWUxYWQ4MzgxZjNjNzNjNmRl
ZGM0ZTAwNThiOC4uZWFlNjJiYzcxZjg2MzgwYzcyNTE2YjdlNzBkNzFjZTdhZTNiNTA1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcApAQCAtNjgsNyArNjgs
NyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6YWRkSXRlbShQYXNzUmVmUHRyPEhpc3RvcnlJdGVt
PiBwcnBJdGVtKQogICAgICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRy
aWVzLmxhc3QoKTsKICAgICAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAg
ICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRlbSk7Ci0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigp
LnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTc4LDcgKzc4LDcgQEAgdm9p
ZCBCYWNrRm9yd2FyZExpc3Q6OmFkZEl0ZW0oUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gcHJwSXRl
bSkKICAgICAgICAgUmVmUHRyPEhpc3RvcnlJdGVtPiBpdGVtID0gbV9lbnRyaWVzWzBdOwogICAg
ICAgICBtX2VudHJpZXMucmVtb3ZlKDApOwogICAgICAgICBtX2VudHJ5SGFzaC5yZW1vdmUoaXRl
bSk7Ci0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAgICAg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoKml0ZW0pOwogICAgICAgICBtX2N1cnJlbnQt
LTsKICAgICB9CiAKQEAgLTE3NSw3ICsxNzUsNyBAQCB2b2lkIEJhY2tGb3J3YXJkTGlzdDo6c2V0
Q2FwYWNpdHkoaW50IHNpemUpCiAgICAgICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IG1f
ZW50cmllcy5sYXN0KCk7CiAgICAgICAgIG1fZW50cmllcy5yZW1vdmVMYXN0KCk7CiAgICAgICAg
IG1fZW50cnlIYXNoLnJlbW92ZShpdGVtKTsKLSAgICAgICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5y
ZW1vdmUoKml0ZW0pOworICAgICAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRl
bSk7CiAgICAgfQogCiAgICAgaWYgKCFzaXplKQpAQCAtMjQ1LDcgKzI0NSw3IEBAIGJvb2wgQmFj
a0ZvcndhcmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogICAgIGZvciAoYXV0byYgaXRlbSA6
IG1fZW50cmllcykgewogICAgICAgICBpZiAoaXRlbS0+aXNJblBhZ2VDYWNoZSgpKSB7CiAgICAg
ICAgICAgICBkaWRSZW1vdmVBdExlYXN0T25lSXRlbSA9IHRydWU7Ci0gICAgICAgICAgICBQYWdl
Q2FjaGU6OnNoYXJlZCgpLnJlbW92ZSgqaXRlbSk7CisgICAgICAgICAgICBQYWdlQ2FjaGU6OnNp
bmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGRp
ZFJlbW92ZUF0TGVhc3RPbmVJdGVtOwpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wgQmFja0Zvcndh
cmRMaXN0OjpjbGVhckFsbFBhZ2VDYWNoZXMoKQogdm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsb3Nl
KCkKIHsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBtX2VudHJpZXMpCi0gICAgICAgIFBhZ2VDYWNo
ZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24o
KS5yZW1vdmUoKml0ZW0pOwogICAgIG1fZW50cmllcy5jbGVhcigpOwogICAgIG1fZW50cnlIYXNo
LmNsZWFyKCk7CiAgICAgbV9wYWdlID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRGcmFtZS5jcHAKaW5kZXggZWNmNGVhODZlN2EyNWI5ZGM0YjMyMWJiYTY5ZGI3ZjA1NjQ0ZjEx
Ni4uZTY1Y2U2ZTY2ZmMxZjU5ODllYTZjMzM1MGEyNjk2MGM3MjUwOTE3OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCBDYWNoZWRGcmFt
ZTo6Q2FjaGVkRnJhbWUoRnJhbWUmIGZyYW1lKQogCiAgICAgZnJhbWUubG9hZGVyKCkuY2xpZW50
KCkuc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUodGhpcyk7CiAKLSAgICBpZiAobV9pc0Nv
bXBvc2l0ZWQgJiYgUGFnZUNhY2hlOjpzaGFyZWQoKS5zaG91bGRDbGVhckJhY2tpbmdTdG9yZXMo
KSkKKyAgICBpZiAobV9pc0NvbXBvc2l0ZWQgJiYgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zaG91
bGRDbGVhckJhY2tpbmdTdG9yZXMoKSkKICAgICAgICAgZnJhbWUudmlldygpLT5jbGVhckJhY2tp
bmdTdG9yZXMoKTsKIAogICAgIC8vIGRvY3VtZW50V2lsbFN1c3BlbmRGb3JQYWdlQ2FjaGUoKSBj
YW4gc2V0IHVwIGEgbGF5b3V0IHRpbWVyIG9uIHRoZSBGcmFtZVZpZXcsIHNvIGNsZWFyIHRpbWVy
cyBhZnRlciB0aGF0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5
SXRlbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNwcAppbmRleCAx
YjUyNWRmMjhjNDQ3NmZmMjBmMzI2NTExYTNhMTRhYzU1MmJkNjFjLi5jM2MzNjdmNDNjNDM1NWU0
NjkyNGQzMjg1M2UwZDdhNjM3ZGQ1YjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0hpc3RvcnlJdGVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJ
dGVtLmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgSGlzdG9yeUl0ZW06OnNldFVSTFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIAogdm9pZCBIaXN0b3J5SXRlbTo6c2V0VVJMKGNv
bnN0IFVSTCYgdXJsKQogewotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCp0aGlzKTsK
KyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqdGhpcyk7CiAgICAgc2V0VVJMU3Ry
aW5nKHVybC5zdHJpbmcoKSk7CiAgICAgY2xlYXJEb2N1bWVudFN0YXRlKCk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKaW5kZXggMjJkNjgwMjU4ZjNjZDRhYWRhODI3ZDM4YTc4
N2I3YjBiNjQ3NDM2Mi4uOTYyMDk5MDM4NWEzYzM1MDE0MDkyYjBjOWViZWY4ZTBjOGFjZGFkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcApAQCAtMjkxLDcgKzI5MSw3IEBAIHN0
YXRpYyB2b2lkIGxvZ0NhbkNhY2hlUGFnZURlY2lzaW9uKFBhZ2UmIHBhZ2UpCiAgICAgZGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQubG9nRGlhZ25vc3RpY01lc3NhZ2VXaXRoUmVzdWx0KERpYWdub3N0
aWNMb2dnaW5nS2V5czo6cGFnZUNhY2hlS2V5KCksIGVtcHR5U3RyaW5nKCksIHJlamVjdFJlYXNv
bnMgPyBEaWFnbm9zdGljTG9nZ2luZ1Jlc3VsdEZhaWwgOiBEaWFnbm9zdGljTG9nZ2luZ1Jlc3Vs
dFBhc3MpOwogfQogCi1QYWdlQ2FjaGUmIFBhZ2VDYWNoZTo6c2hhcmVkKCkKK1BhZ2VDYWNoZSYg
UGFnZUNhY2hlOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxQYWdl
Q2FjaGU+IGdsb2JhbFBhZ2VDYWNoZTsKICAgICByZXR1cm4gZ2xvYmFsUGFnZUNhY2hlOwpAQCAt
NDg0LDcgKzQ4NCw3IEBAIENhY2hlZFBhZ2UqIFBhZ2VDYWNoZTo6Z2V0KEhpc3RvcnlJdGVtJiBp
dGVtLCBQYWdlKiBwYWdlKSBjb25zdAogICAgIGlmIChjYWNoZWRQYWdlLT5oYXNFeHBpcmVkKCkp
IHsKICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIk5vdCByZXN0b3JpbmcgcGFnZSBmb3IgJXMgZnJv
bSBiYWNrL2ZvcndhcmQgY2FjaGUgYmVjYXVzZSBjYWNoZSBlbnRyeSBoYXMgZXhwaXJlZCIsIGl0
ZW0udXJsKCkuc3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwogICAgICAgICBsb2dQYWdlQ2FjaGVG
YWlsdXJlRGlhZ25vc3RpY01lc3NhZ2UocGFnZSwgRGlhZ25vc3RpY0xvZ2dpbmdLZXlzOjpleHBp
cmVkS2V5KCkpOwotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnJlbW92ZShpdGVtKTsKKyAg
ICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUoaXRlbSk7CiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIH0KICAgICByZXR1cm4gY2FjaGVkUGFnZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L1BhZ2VDYWNoZS5oCmluZGV4IDk1MzZhOWY4NmRmMjE0ZGEzMWFjNGFmZTllMzc0MjdhNDg2NTM5
MWYuLjBmMmZiNDk2MzgyYjc1ZWNjNzk2NzViMGM5ZjA5MjYyYWExMDcxNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9QYWdlQ2FjaGUuaApAQCAtNDQsNyArNDQsNyBAQCBjbGFzcyBQYWdlQ2FjaGUgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIC8vIEZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgZ2xvYmFsIHBhZ2Ug
Y2FjaGUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhZ2VDYWNoZSYgc2hhcmVkKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFBhZ2VDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICBi
b29sIGNhbkNhY2hlKFBhZ2UqKSBjb25zdDsKIApAQCAtNzMsNyArNzMsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXMoYm9vbCBmbGFnKSB7IG1fc2hvdWxk
Q2xlYXJCYWNraW5nU3RvcmVzID0gZmxhZzsgfQogCiBwcml2YXRlOgotICAgIFBhZ2VDYWNoZSgp
ID0gZGVmYXVsdDsgLy8gVXNlIHNoYXJlZCgpIGluc3RlYWQuCisgICAgUGFnZUNhY2hlKCkgPSBk
ZWZhdWx0OyAvLyBVc2Ugc2luZ2xldG9uKCkgaW5zdGVhZC4KICAgICB+UGFnZUNhY2hlKCkgPSBk
ZWxldGU7IC8vIE1ha2Ugc3VyZSBub2JvZHkgYWNjaWRlbnRhbGx5IGNhbGxzIGRlbGV0ZSAtLSBX
ZWJDb3JlIGRvZXMgbm90IGRlbGV0ZSBzaW5nbGV0b25zLgogCiAgICAgc3RhdGljIGJvb2wgY2Fu
Q2FjaGVQYWdlQ29udGFpbmluZ1RoaXNGcmFtZShGcmFtZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuY3BwCmlu
ZGV4IDhkMWVjNDJmM2ExMGYwMmZlMGE4OWE0MmExNjRhZDZmYmZjNTY1MjkuLmEwZjI4ZGM4MDU4
NGQ2ZjdmZmZkMDg0MzU1MjY5NjkxMmZhMGNjMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5jcHAKQEAgLTE1
MSw3ICsxNTEsNyBAQCBib29sIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGVJdGVtOjph
bGxvd3NSZXF1ZXN0KFN0b3JlZENyZWRlbnRpYWxzIGluY2x1ZAogICAgIHJldHVybiB0cnVlOwog
fQogCi1Dcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlJiBDcm9zc09yaWdpblByZWZsaWdo
dFJlc3VsdENhY2hlOjpzaGFyZWQoKQorQ3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSYg
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZTo6c2luZ2xldG9uKCkKIHsKICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Q3Jvc3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZS5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Nyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGUuaAppbmRleCBlN2QyODFiNzkxN2YwMDZj
NzI3NjMzOWQzOGM4MWFjZDNkZTA3OGE2Li5mNDc4NWZmZjI4ODhhYmU4YjExNWE3ZmQ4ODFjMTVk
OWQ5OTU1MjJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvQ3Jvc3NPcmlnaW5Q
cmVmbGlnaHRSZXN1bHRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Dcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgQ3Jvc3NP
cmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3Jv
c3NPcmlnaW5QcmVmbGlnaHRSZXN1bHRDYWNoZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
CiBwdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIENyb3NzT3JpZ2luUHJlZmxpZ2h0
UmVzdWx0Q2FjaGUmIHNoYXJlZCgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgYXBwZW5k
RW50cnkoY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFVSTCYsIHN0ZDo6dW5pcXVlX3B0cjxD
cm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlSXRlbT4pOwogICAgIGJvb2wgY2FuU2tpcFBy
ZWZsaWdodChjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29uc3QgVVJMJiwgU3RvcmVkQ3JlZGVudGlh
bHMsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBjb25zdCBIVFRQSGVhZGVyTWFwJiByZXF1ZXN0SGVh
ZGVycyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRUaHJlYWRh
YmxlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVM
b2FkZXIuY3BwCmluZGV4IDk1Mjk4MTE4MmQwZDNkNGJlZGZmYTA0YjFkM2IzZTFhN2Q5MzJhN2Yu
LmUxYWIxMzg5MThkMWQ5N2M3MjA4MzFmZjU4NzI4ZGNkZGIzOWU3ZmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFRocmVhZGFibGVMb2FkZXIuY3BwCkBAIC0xMDQs
NyArMTA0LDcgQEAgdm9pZCBEb2N1bWVudFRocmVhZGFibGVMb2FkZXI6Om1ha2VDcm9zc09yaWdp
bkFjY2Vzc1JlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXMKICAgICAgICAgbV9zaW1wbGVSZXF1
ZXN0ID0gZmFsc2U7CiAgICAgICAgIG1fYWN0dWFsUmVxdWVzdCA9IFdURjo6bW92ZShjcm9zc09y
aWdpblJlcXVlc3QpOwogCi0gICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENh
Y2hlOjpzaGFyZWQoKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKCks
IG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFk
ZXJGaWVsZHMoKSkpCisgICAgICAgIGlmIChDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hl
OjpzaW5nbGV0b24oKS5jYW5Ta2lwUHJlZmxpZ2h0KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5n
KCksIG1fYWN0dWFsUmVxdWVzdC0+dXJsKCksIG1fb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzKCks
IG1fYWN0dWFsUmVxdWVzdC0+aHR0cE1ldGhvZCgpLCBtX2FjdHVhbFJlcXVlc3QtPmh0dHBIZWFk
ZXJGaWVsZHMoKSkpCiAgICAgICAgICAgICBwcmVmbGlnaHRTdWNjZXNzKCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIG1ha2VDcm9zc09yaWdpbkFjY2Vzc1JlcXVlc3RXaXRoUHJlZmxpZ2h0
KCptX2FjdHVhbFJlcXVlc3QpOwpAQCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgRG9jdW1lbnRUaHJl
YWRhYmxlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5hcHBlbmRFbnRyeShzZWN1cml0eU9y
aWdpbigpLT50b1N0cmluZygpLCBtX2FjdHVhbFJlcXVlc3QtPnVybCgpLCBXVEY6Om1vdmUocHJl
ZmxpZ2h0UmVzdWx0KSk7CisgICAgICAgIENyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6
OnNpbmdsZXRvbigpLmFwcGVuZEVudHJ5KHNlY3VyaXR5T3JpZ2luKCktPnRvU3RyaW5nKCksIG1f
YWN0dWFsUmVxdWVzdC0+dXJsKCksIFdURjo6bW92ZShwcmVmbGlnaHRSZXN1bHQpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoIW1fc2FtZU9yaWdpblJlcXVlc3QgJiYgbV9vcHRpb25zLmNy
b3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9PSBVc2VBY2Nlc3NDb250cm9sKSB7CiAgICAgICAgICAg
ICBpZiAoIXBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhyZXNwb25zZSwgbV9vcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMoKSwgc2VjdXJpdHlPcmlnaW4oKSwgYWNjZXNzQ29udHJvbEVycm9yRGVzY3Jp
cHRpb24pKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA3MzE5MDg4
NzVmMWEwZGJhMzM3MDJiNzgxNThhMDI3NDUxYWU2M2ZiLi4wNTlmMGZmOGU0ZmMxNmY2ZjA5M2Ex
Y2QwYWMyNzllMmM0NzA5NzRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJh
bWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAK
QEAgLTE3NDEsNyArMTc0MSw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNvbW1pdFByb3Zpc2lvbmFs
TG9hZCgpCiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4gY2FjaGVkUGFnZTsKICAg
ICBpZiAobV9sb2FkaW5nRnJvbUNhY2hlZFBhZ2UgJiYgaGlzdG9yeSgpLnByb3Zpc2lvbmFsSXRl
bSgpKQotICAgICAgICBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFyZWQoKS50YWtlKCpoaXN0
b3J5KCkucHJvdmlzaW9uYWxJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICAgICAgY2FjaGVk
UGFnZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkudGFrZSgqaGlzdG9yeSgpLnByb3Zpc2lvbmFs
SXRlbSgpLCBtX2ZyYW1lLnBhZ2UoKSk7CiAKICAgICBMT0coUGFnZUNhY2hlLCAiV2ViQ29yZUxv
YWRpbmcgJXM6IEFib3V0IHRvIGNvbW1pdCBwcm92aXNpb25hbCBsb2FkIGZyb20gcHJldmlvdXMg
VVJMICclcycgdG8gbmV3IFVSTCAnJXMnIiwgbV9mcmFtZS50cmVlKCkudW5pcXVlTmFtZSgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCksCiAgICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKSA/IG1fZnJh
bWUuZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkudXRm
OCgpLmRhdGEoKSA6ICIiLApAQCAtMTc1OCwxMSArMTc1OCwxMiBAQCB2b2lkIEZyYW1lTG9hZGVy
Ojpjb21taXRQcm92aXNpb25hbExvYWQoKQogICAgICAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJl
LCAiUHJ1bmluZyBwYWdlIGNhY2hlIGJlY2F1c2UgdW5kZXIgbWVtb3J5IHByZXNzdXJlIGF0OiAl
cyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwogICAgICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBy
dW5pbmcgcGFnZSBjYWNoZSB0byAwIGR1ZSB0byBtZW1vcnkgcHJlc3N1cmUiKTsKICAgICAgICAg
ICAgIC8vIERvbid0IGNhY2hlIGFueSBwYWdlIGlmIHdlIGFyZSB1bmRlciBtZW1vcnkgcHJlc3N1
cmUuCi0gICAgICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIFBy
dW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAgICAgICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkucHJ1bmVUb1NpemVOb3coMCwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUp
OwogICAgICAgICB9IGVsc2UgaWYgKHN5c3RlbU1lbW9yeUxldmVsKCkgPD0gbWVtb3J5TGV2ZWxU
aHJlc2hvbGRUb1BydW5lUGFnZUNhY2hlKSB7CiAgICAgICAgICAgICBMT0coTWVtb3J5UHJlc3N1
cmUsICJQcnVuaW5nIHBhZ2UgY2FjaGUgYmVjYXVzZSBzeXN0ZW0gbWVtb3J5IGxldmVsIGlzICVk
IGF0OiAlcyIsIHN5c3RlbU1lbW9yeUxldmVsKCksIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwotICAg
ICAgICAgICAgTE9HKFBhZ2VDYWNoZSwgIlBydW5pbmcgcGFnZSBjYWNoZSB0byAlZCBkdWUgdG8g
bG93IG1lbW9yeSAobGV2ZWwgJWQgbGVzcyBvciBlcXVhbCB0byAlZCB0aHJlc2hvbGQpIiwgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5tYXhTaXplKCkgLyAyLCBzeXN0ZW1NZW1vcnlMZXZlbCgpLCBtZW1v
cnlMZXZlbFRocmVzaG9sZFRvUHJ1bmVQYWdlQ2FjaGUpOwotICAgICAgICAgICAgUGFnZUNhY2hl
OjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdyhQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUoKSAv
IDIsIFBydW5pbmdSZWFzb246Ok1lbW9yeVByZXNzdXJlKTsKKyAgICAgICAgICAgIGF1dG8mIHBh
Z2VDYWNoZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCk7CisgICAgICAgICAgICBMT0coUGFnZUNh
Y2hlLCAiUHJ1bmluZyBwYWdlIGNhY2hlIHRvICVkIGR1ZSB0byBsb3cgbWVtb3J5IChsZXZlbCAl
ZCBsZXNzIG9yIGVxdWFsIHRvICVkIHRocmVzaG9sZCkiLCBwYWdlQ2FjaGUubWF4U2l6ZSgpIC8g
Miwgc3lzdGVtTWVtb3J5TGV2ZWwoKSwgbWVtb3J5TGV2ZWxUaHJlc2hvbGRUb1BydW5lUGFnZUNh
Y2hlKTsKKyAgICAgICAgICAgIHBhZ2VDYWNoZS5wcnVuZVRvU2l6ZU5vdyhwYWdlQ2FjaGUubWF4
U2l6ZSgpIC8gMiwgUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1cmUpOwogICAgICAgICB9CiAg
ICAgfQogI2VuZGlmCkBAIC0xNzcyLDggKzE3NzMsOCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjb21t
aXRQcm92aXNpb25hbExvYWQoKQogICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIGNh
Y2hlIHRoZSBwYWdlIHdlIGFyZSBuYXZpZ2F0aW5nIGF3YXkgZnJvbSBpbnRvIHRoZSBiYWNrL2Zv
cndhcmQgY2FjaGUuCiAgICAgLy8gV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSBiZWNhdXNlIHdlIGtu
b3cgZm9yIHN1cmUgdGhhdCBhIG5ldyBwYWdlIGlzIGFib3V0IHRvIGJlIGxvYWRlZC4KICAgICBI
aXN0b3J5SXRlbSYgaXRlbSA9ICpoaXN0b3J5KCkuY3VycmVudEl0ZW0oKTsKLSAgICBpZiAoIW1f
ZnJhbWUudHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6c2hhcmVkKCkuY2FuQ2FjaGUobV9m
cmFtZS5wYWdlKCkpICYmICFpdGVtLmlzSW5QYWdlQ2FjaGUoKSkKLSAgICAgICAgUGFnZUNhY2hl
OjpzaGFyZWQoKS5hZGQoaXRlbSwgKm1fZnJhbWUucGFnZSgpKTsKKyAgICBpZiAoIW1fZnJhbWUu
dHJlZSgpLnBhcmVudCgpICYmIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkuY2FuQ2FjaGUobV9mcmFt
ZS5wYWdlKCkpICYmICFpdGVtLmlzSW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgUGFnZUNhY2hlOjpz
aW5nbGV0b24oKS5hZGQoaXRlbSwgKm1fZnJhbWUucGFnZSgpKTsKIAogICAgIGlmIChtX2xvYWRU
eXBlICE9IEZyYW1lTG9hZFR5cGU6OlJlcGxhY2UpCiAgICAgICAgIGNsb3NlT2xkRGF0YVNvdXJj
ZXMoKTsKQEAgLTMxNTksNyArMzE2MCw3IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWREaWZmZXJl
bnREb2N1bWVudEl0ZW0oSGlzdG9yeUl0ZW0mIGl0ZW0sIEZyYW1lTG9hZFR5cGUgbG9hCiAgICAg
Ly8gUmVtZW1iZXIgdGhpcyBpdGVtIHNvIHdlIGNhbiB0cmF2ZXJzZSBhbnkgY2hpbGQgaXRlbXMg
YXMgY2hpbGQgZnJhbWVzIGxvYWQKICAgICBoaXN0b3J5KCkuc2V0UHJvdmlzaW9uYWxJdGVtKCZp
dGVtKTsKIAotICAgIGlmIChDYWNoZWRQYWdlKiBjYWNoZWRQYWdlID0gUGFnZUNhY2hlOjpzaGFy
ZWQoKS5nZXQoaXRlbSwgbV9mcmFtZS5wYWdlKCkpKSB7CisgICAgaWYgKENhY2hlZFBhZ2UqIGNh
Y2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLmdldChpdGVtLCBtX2ZyYW1lLnBhZ2Uo
KSkpIHsKICAgICAgICAgYXV0byBkb2N1bWVudExvYWRlciA9IGNhY2hlZFBhZ2UtPmRvY3VtZW50
TG9hZGVyKCk7CiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zZXRUcmlnZ2VyaW5nQWN0aW9uKE5h
dmlnYXRpb25BY3Rpb24oZG9jdW1lbnRMb2FkZXItPnJlcXVlc3QoKSwgbG9hZFR5cGUsIGZhbHNl
KSk7CiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zZXRMYXN0Q2hlY2tlZFJlcXVlc3QoUmVzb3Vy
Y2VSZXF1ZXN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5j
cHAKaW5kZXggODMzZTU4ODRiYWEwN2IzNWIxYjM1ZTVmNGJhYzM3ZGIzOWM5ZGRhMi4uYWNmOTA5
MDZlYWRkMjA5ZDBkMDRiNGE4ZGY4NzBlODBmNWU5N2RlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBIaXN0
b3J5Q29udHJvbGxlcjo6aW52YWxpZGF0ZUN1cnJlbnRJdGVtQ2FjaGVkUGFnZSgpCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIFdoZW4gd2UgYXJlIHByZS1jb21taXQsIHRoZSBjdXJyZW50SXRl
bSBpcyB3aGVyZSBhbnkgcGFnZSBjYWNoZSBkYXRhIHJlc2lkZXMuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPENhY2hlZFBhZ2U+IGNhY2hlZFBhZ2UgPSBQYWdlQ2FjaGU6OnNoYXJlZCgpLnRha2UoKmN1
cnJlbnRJdGVtKCksIG1fZnJhbWUucGFnZSgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVk
UGFnZT4gY2FjaGVkUGFnZSA9IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkudGFrZSgqY3VycmVudEl0
ZW0oKSwgbV9mcmFtZS5wYWdlKCkpOwogICAgIGlmICghY2FjaGVkUGFnZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMzYsNyArMzM2LDcgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6dXBkYXRl
Rm9yUmVsb2FkKCkKICNlbmRpZgogCiAgICAgaWYgKG1fY3VycmVudEl0ZW0pIHsKLSAgICAgICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5yZW1vdmUoKm1fY3VycmVudEl0ZW0pOworICAgICAgICBQYWdl
Q2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqbV9jdXJyZW50SXRlbSk7CiAgICAgCiAgICAgICAg
IGlmIChtX2ZyYW1lLmxvYWRlcigpLmxvYWRUeXBlKCkgPT0gRnJhbWVMb2FkVHlwZTo6UmVsb2Fk
IHx8IG1fZnJhbWUubG9hZGVyKCkubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlOjpSZWxvYWRG
cm9tT3JpZ2luKQogICAgICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9J
dGVtKG1fY3VycmVudEl0ZW0uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4
IGNiMzk0ZWE2NTc3ODg3MjYzNTZjMTg1NDg1YTVmMjhkMTFmOTM1OTEuLmVhMTYxNThlNzBjYTA2
MThiMmZjMjZiYTU5NjRmNWJiNjFhZTg4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
QEAgLTQ1Myw3ICs0NTMsNyBAQCBET01XaW5kb3c6On5ET01XaW5kb3coKQogCiAjaWYgRU5BQkxF
KEdBTUVQQUQpCiAgICAgaWYgKG1fZ2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudCkKLSAgICAgICAg
R2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpLnVucmVnaXN0ZXJET01XaW5kb3codGhpcyk7CisgICAg
ICAgIEdhbWVwYWRNYW5hZ2VyOjpzaW5nbGV0b24oKS51bnJlZ2lzdGVyRE9NV2luZG93KHRoaXMp
OwogI2VuZGlmCiB9CiAKQEAgLTUxOSw3ICs1MTksNyBAQCB2b2lkIERPTVdpbmRvdzo6d2lsbERl
dGFjaERvY3VtZW50RnJvbUZyYW1lKCkKIHZvaWQgRE9NV2luZG93OjppbmNyZW1lbnRHYW1lcGFk
RXZlbnRMaXN0ZW5lckNvdW50KCkKIHsKICAgICBpZiAoKyttX2dhbWVwYWRFdmVudExpc3RlbmVy
Q291bnQgPT0gMSkKLSAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyRE9N
V2luZG93KHRoaXMpOworICAgICAgICBHYW1lcGFkTWFuYWdlcjo6c2luZ2xldG9uKCkucmVnaXN0
ZXJET01XaW5kb3codGhpcyk7CiB9CiAKIHZvaWQgRE9NV2luZG93OjpkZWNyZW1lbnRHYW1lcGFk
RXZlbnRMaXN0ZW5lckNvdW50KCkKQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIERPTVdpbmRvdzo6
ZGVjcmVtZW50R2FtZXBhZEV2ZW50TGlzdGVuZXJDb3VudCgpCiAgICAgQVNTRVJUKG1fZ2FtZXBh
ZEV2ZW50TGlzdGVuZXJDb3VudCk7CiAKICAgICBpZiAoIS0tbV9nYW1lcGFkRXZlbnRMaXN0ZW5l
ckNvdW50KQotICAgICAgICBHYW1lcGFkTWFuYWdlcjo6c2hhcmVkKCkudW5yZWdpc3RlckRPTVdp
bmRvdyh0aGlzKTsKKyAgICAgICAgR2FtZXBhZE1hbmFnZXI6OnNpbmdsZXRvbigpLnVucmVnaXN0
ZXJET01XaW5kb3codGhpcyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVn
UGFnZU92ZXJsYXlzLmNwcAppbmRleCBiNGFiNmNhMDlhMDUzNzUwNzMxODI5NGY4ZDkyYjljMzFl
MGE4MmI0Li5jZTExNDhiYjBlMDkyNDBmMzYwMWNkZmVmN2I1ZTgzMmQ0MzM3Nzk0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBA
IHZvaWQgUmVnaW9uT3ZlcmxheTo6cmVjb21wdXRlUmVnaW9uKCkKICAgICAgICAgbV9vdmVybGF5
LT5zZXROZWVkc0Rpc3BsYXkoKTsKIH0KIAotRGVidWdQYWdlT3ZlcmxheXMmIERlYnVnUGFnZU92
ZXJsYXlzOjpzaGFyZWQoKQorRGVidWdQYWdlT3ZlcmxheXMmIERlYnVnUGFnZU92ZXJsYXlzOjpz
aW5nbGV0b24oKQogewogICAgIGlmICghc2hhcmVkRGVidWdPdmVybGF5cykKICAgICAgICAgc2hh
cmVkRGVidWdPdmVybGF5cyA9IG5ldyBEZWJ1Z1BhZ2VPdmVybGF5czsKQEAgLTI5Niw3ICsyOTYs
NyBAQCB2b2lkIERlYnVnUGFnZU92ZXJsYXlzOjpzZXR0aW5nc0NoYW5nZWQoTWFpbkZyYW1lJiBm
cmFtZSkKICAgICBpZiAoIWFjdGl2ZU92ZXJsYXlSZWdpb25zICYmICFoYXNPdmVybGF5cyhmcmFt
ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIERlYnVnUGFnZU92ZXJsYXlzOjpzaGFyZWQoKS51
cGRhdGVPdmVybGF5UmVnaW9uVmlzaWJpbGl0eShmcmFtZSwgYWN0aXZlT3ZlcmxheVJlZ2lvbnMp
OworICAgIERlYnVnUGFnZU92ZXJsYXlzOjpzaW5nbGV0b24oKS51cGRhdGVPdmVybGF5UmVnaW9u
VmlzaWJpbGl0eShmcmFtZSwgYWN0aXZlT3ZlcmxheVJlZ2lvbnMpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RlYnVnUGFnZU92ZXJsYXlzLmgKaW5kZXggMWY2NDFmZDI4YTQyMzJjYjQ3OTUz
ZDYyMGY1YmY0ZGY1NDgwNmJlYy4uNTQ2MTBhMjQ0YmI2OTQ3YjBkOThhYjZmMzRlNGY1MWViMWNj
MzliYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuaApAQCAtMzcsNyAr
MzcsNyBAQCBjbGFzcyBSZWdpb25PdmVybGF5OwogCiBjbGFzcyBEZWJ1Z1BhZ2VPdmVybGF5cyB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIERlYnVnUGFnZU92ZXJsYXlzJiBzaGFyZWQoKTsKKyAgICBz
dGF0aWMgRGVidWdQYWdlT3ZlcmxheXMmIHNpbmdsZXRvbigpOwogCiAgICAgZW51bSBjbGFzcyBS
ZWdpb25UeXBlIHsKICAgICAgICAgV2hlZWxFdmVudEhhbmRsZXJzLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNw
cAppbmRleCA3OGNiMTkzNTMzODliNzY4OGU0N2I1YjVmNmIyZjUwMDBkMDQ3ZTk3Li45ODhhZDA2
ZGNjOTRjYjgxZmQ4MDRiMWUxNGI4Zjc4N2JlMmFlZWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApA
QCAtOTg5LDcgKzk4OSw3IEBAIHZvaWQgRnJhbWU6OnNldFBhZ2VBbmRUZXh0Wm9vbUZhY3RvcnMo
ZmxvYXQgcGFnZVpvb21GYWN0b3IsIGZsb2F0IHRleHRab29tRmFjdG9yCiAgICAgfQogCiAgICAg
aWYgKGlzTWFpbkZyYW1lKCkpCi0gICAgICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2Vz
Rm9yRnVsbFN0eWxlUmVjYWxjKCpwYWdlKTsKKyAgICAgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24o
KS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnBhZ2UpOwogfQogCiBmbG9hdCBGcmFtZTo6
ZnJhbWVTY2FsZUZhY3RvcigpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA3ZDk3YWVmMGUy
YmEyMjJlNTU5ZTVjYmY4ZGViMjg2ZGEyZGU3MDdjLi4yN2MwNGI1OTU4ZGNiYWYyZGI1NWY2ZmJl
MjNhNTE3YmY2ZDIxNTUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTgzOSw5ICs4MzksOSBAQCB2
b2lkIFBhZ2U6OnNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IHNjYWxlRmFjdG9yKQogICAgIHNl
dE5lZWRzUmVjYWxjU3R5bGVJbkFsbEZyYW1lcygpOwogCiAgICAgbWFpbkZyYW1lKCkuZGV2aWNl
T3JQYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJr
UGFnZXNGb3JEZXZpY2VTY2FsZUNoYW5nZWQoKnRoaXMpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xl
dG9uKCkubWFya1BhZ2VzRm9yRGV2aWNlU2NhbGVDaGFuZ2VkKCp0aGlzKTsKIAotICAgIFBhZ2VD
YWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlzKTsKKyAgICBQ
YWdlQ2FjaGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7
CiAgICAgR3JhcGhpY3NDb250ZXh0Ojp1cGRhdGVEb2N1bWVudE1hcmtlclJlc291cmNlcygpOwog
CiAgICAgbWFpbkZyYW1lKCkucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlkQ2hhbmdlRGV2aWNl
U2NhbGVGYWN0b3IoKTsKQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIFBhZ2U6OnNldFBhZ2luYXRp
b24oY29uc3QgUGFnaW5hdGlvbiYgcGFnaW5hdGlvbikKICAgICBtX3BhZ2luYXRpb24gPSBwYWdp
bmF0aW9uOwogCiAgICAgc2V0TmVlZHNSZWNhbGNTdHlsZUluQWxsRnJhbWVzKCk7Ci0gICAgUGFn
ZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOworICAg
IFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yRnVsbFN0eWxlUmVjYWxjKCp0aGlz
KTsKIH0KIAogdW5zaWduZWQgUGFnZTo6cGFnZUNvdW50KCkgY29uc3QKQEAgLTE2NjEsNyArMTY2
MSw3IEBAIHZvaWQgUGFnZTo6c2V0VmlzaXRlZExpbmtTdG9yZShSZWY8VmlzaXRlZExpbmtTdG9y
ZT4mJiB2aXNpdGVkTGlua1N0b3JlKQogICAgIG1fdmlzaXRlZExpbmtTdG9yZS0+YWRkUGFnZSgq
dGhpcyk7CiAKICAgICBpbnZhbGlkYXRlU3R5bGVzRm9yQWxsTGlua3MoKTsKLSAgICBQYWdlQ2Fj
aGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvckZ1bGxTdHlsZVJlY2FsYygqdGhpcyk7CisgICAgUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5tYXJrUGFnZXNGb3JGdWxsU3R5bGVSZWNhbGMoKnRoaXMpOwog
fQogCiBTZXNzaW9uSUQgUGFnZTo6c2Vzc2lvbklEKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwLmNwcAppbmRleCBkYWMyNmYyNzhkN2ExNzUyMWYyOWQ3ZmEyY2QxMWM1NDYyZTI5NGI3Li5h
MDhhOTI5YmVmYmQzYjkzZDA2NTc0MjEwMTM0NzYxYWNlNTBjMjBmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlR3JvdXAuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgdm9pZCBQYWdlR3JvdXA6OmNhcHRpb25Q
cmVmZXJlbmNlc0NoYW5nZWQoKQogewogICAgIGZvciAoYXV0byBpdCA9IG1fcGFnZXMuYmVnaW4o
KSwgZW5kID0gbV9wYWdlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAoKml0KS0+
Y2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFy
a1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOworICAgIFBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkubWFya1BhZ2VzRm9yQ2FwdGlvblByZWZlcmVuY2VzQ2hhbmdlZCgpOwogfQogCiBD
YXB0aW9uVXNlclByZWZlcmVuY2VzKiBQYWdlR3JvdXA6OmNhcHRpb25QcmVmZXJlbmNlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGY3YmRjNGM2MDAwNDVkOTcyZTJkZDZkZjYxMDI2
OTQ3NWQ3YmNmYzQuLjUzZDJmOTU1NWYzMDE2ZjIyYWVlN2Y2YjQ2Y2MyZDJjOWI0ZjIxNDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCkBAIC01MTIsNyArNTEyLDcgQEAgdm9pZCBTZXR0aW5n
czo6c2V0VXNlc1BhZ2VDYWNoZShib29sIHVzZXNQYWdlQ2FjaGUpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghbV91c2VzUGFnZUNhY2hlKQotICAgICAgICBQYWdlQ2FjaGU6OnNoYXJlZCgp
LnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOworICAgICAgICBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIFBydW5pbmdSZWFzb246Ok5vbmUpOwog
fQogCiB2b2lkIFNldHRpbmdzOjpzZXRGb250UmVuZGVyaW5nTW9kZShGb250UmVuZGVyaW5nTW9k
ZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1Ro
cmVhZC5jcHAKaW5kZXggOWM4ZTJkMTk5M2YyNDJkN2VjYzk1OWZhMmVlM2E1ZjcyMzQxNTU3NS4u
MzExN2Y4ZjI0YTdiYjljOTI3M2QwOGIwZWQ4MDZlYzk2OWU0OWRkZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVGhyZWFkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuY3BwCkBAIC00MCwyMiAr
NDAsMjEgQEAgU2Nyb2xsaW5nVGhyZWFkOjpTY3JvbGxpbmdUaHJlYWQoKQogCiBib29sIFNjcm9s
bGluZ1RocmVhZDo6aXNDdXJyZW50VGhyZWFkKCkKIHsKLSAgICBpZiAoIXNoYXJlZCgpLm1fdGhy
ZWFkSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGN1cnJl
bnRUaHJlYWQoKSA9PSBzaGFyZWQoKS5tX3RocmVhZElkZW50aWZpZXI7CisgICAgYXV0byB0aHJl
YWRJZGVudGlmaWVyID0gU2Nyb2xsaW5nVGhyZWFkOjpzaW5nbGV0b24oKS5tX3RocmVhZElkZW50
aWZpZXI7CisgICAgcmV0dXJuIHRocmVhZElkZW50aWZpZXIgJiYgY3VycmVudFRocmVhZCgpID09
IHRocmVhZElkZW50aWZpZXI7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nVGhyZWFkOjpkaXNwYXRjaChz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGZ1bmN0aW9uKQogewotICAgIHNoYXJlZCgpLmNyZWF0ZVRo
cmVhZElmTmVlZGVkKCk7CisgICAgYXV0byYgc2Nyb2xsaW5nVGhyZWFkID0gU2Nyb2xsaW5nVGhy
ZWFkOjpzaW5nbGV0b24oKTsKKyAgICBzY3JvbGxpbmdUaHJlYWQuY3JlYXRlVGhyZWFkSWZOZWVk
ZWQoKTsKIAogICAgIHsKLSAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2so
c2hhcmVkKCkubV9mdW5jdGlvbnNNdXRleCk7Ci0gICAgICAgIHNoYXJlZCgpLm1fZnVuY3Rpb25z
LmFwcGVuZChmdW5jdGlvbik7CisgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBs
b2NrKHNpbmdsZXRvbigpLm1fZnVuY3Rpb25zTXV0ZXgpOworICAgICAgICBzY3JvbGxpbmdUaHJl
YWQubV9mdW5jdGlvbnMuYXBwZW5kKGZ1bmN0aW9uKTsKICAgICB9CiAKLSAgICBzaGFyZWQoKS53
YWtlVXBSdW5Mb29wKCk7CisgICAgc2Nyb2xsaW5nVGhyZWFkLndha2VVcFJ1bkxvb3AoKTsKIH0K
IAogdm9pZCBTY3JvbGxpbmdUaHJlYWQ6OmRpc3BhdGNoQmFycmllcihzdGQ6OmZ1bmN0aW9uPHZv
aWQgKCk+IGZ1bmN0aW9uKQpAQCAtNjUsNyArNjQsNyBAQCB2b2lkIFNjcm9sbGluZ1RocmVhZDo6
ZGlzcGF0Y2hCYXJyaWVyKHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gZnVuY3Rpb24pCiAgICAgfSk7
CiB9CiAKLVNjcm9sbGluZ1RocmVhZCYgU2Nyb2xsaW5nVGhyZWFkOjpzaGFyZWQoKQorU2Nyb2xs
aW5nVGhyZWFkJiBTY3JvbGxpbmdUaHJlYWQ6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFNjcm9sbGluZ1RocmVhZD4gc2Nyb2xsaW5nVGhyZWFkOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUaHJlYWQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCmluZGV4IDdmMTM2
OGU2M2I0YjMzNTQ4ZDliZTI5OWZkODEzOGY0MjJlY2ZhOTcuLjI2MmNkZjE4YTk2NDgyNDdkOTk3
YjVjMmQ4YjMxNTVkNDQ3YWZhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1RocmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RocmVhZC5oCkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAKICAgICBT
Y3JvbGxpbmdUaHJlYWQoKTsKIAotICAgIHN0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNoYXJlZCgp
OworICAgIHN0YXRpYyBTY3JvbGxpbmdUaHJlYWQmIHNpbmdsZXRvbigpOwogCiAgICAgdm9pZCBj
cmVhdGVUaHJlYWRJZk5lZWRlZCgpOwogICAgIHN0YXRpYyB2b2lkIHRocmVhZENhbGxiYWNrKHZv
aWQqIHNjcm9sbGluZ1RocmVhZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HYW1lcGFkUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR2FtZXBhZFBy
b3ZpZGVyLmNwcAppbmRleCAwNTA0YTY4YjhlNTc5ZTJjOGUzMWY2NzRiNTUzYTY3MDZiZjkwZjNm
Li5iMGY0OTI3ZjEyM2IxMDk5ZjRjMDhiNjVlNTVmYzFhMTBlNDM4MGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyKiBzaGFyZWRQcm92aWRl
ciA9IG51bGxwdHI7CiAKLUdhbWVwYWRQcm92aWRlciYgR2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQo
KQorR2FtZXBhZFByb3ZpZGVyJiBHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpCiB7CiAgICAg
aWYgKCFzaGFyZWRQcm92aWRlcikgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8R2Ft
ZXBhZFByb3ZpZGVyPiBkZWZhdWx0UHJvdmlkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HYW1lcGFkUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dh
bWVwYWRQcm92aWRlci5oCmluZGV4IDI0YTljN2U0MjQ0OWI5MDgwZmYyZDEwM2VlNzljMDVjMGQ0
NGUyMDIuLjhkMWM1MzE0YWQ0YWI0NjA2ZTg5YTQyZTBiZTc4MDJlNWFkMThmNWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dhbWVwYWRQcm92aWRlci5oCkBAIC0zOSw3ICszOSw3IEBAIGNs
YXNzIEdhbWVwYWRQcm92aWRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2FtZXBhZFByb3Zp
ZGVyKCkgeyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyJiBz
aGFyZWQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgR2FtZXBhZFByb3ZpZGVyJiBzaW5n
bGV0b24oKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBzZXRTaGFyZWRQcm92aWRl
cihHYW1lcGFkUHJvdmlkZXImKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydE1vbml0b3JpbmdH
YW1lcGFkcyhHYW1lcGFkUHJvdmlkZXJDbGllbnQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL01lbW9yeVByZXNzdXJlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9NZW1vcnlQcmVzc3VyZUhhbmRsZXIuY3BwCmluZGV4IGI1MDJkZWIzMGVlM2VjNGY1
OWU2NDRkODk4YmM2MDc1YzFkM2U3ZDcuLmU1MjQ2OTYxZjNmYTE0NTc5ZDE2N2Y4MWNhZGM1Mjg1
ZjNlNzQ4MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL01lbW9yeVByZXNz
dXJlSGFuZGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTWVtb3J5UHJlc3N1
cmVIYW5kbGVyLmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIHZvaWQgTWVtb3J5UHJlc3N1cmVIYW5k
bGVyOjpyZWxlYXNlQ3JpdGljYWxNZW1vcnkoKQogICAgICAgICBSZWxpZWZMb2dnZXIgbG9nKCJF
bXB0eSB0aGUgUGFnZUNhY2hlIik7CiAgICAgICAgIC8vIFJpZ2h0IG5vdywgdGhlIG9ubHkgcmVh
c29uIHdlIGNhbGwgcmVsZWFzZSBjcml0aWNhbCBtZW1vcnkgd2hpbGUgbm90IHVuZGVyIG1lbW9y
eSBwcmVzc3VyZSBpcyBpZiB0aGUgcHJvY2VzcyBpcyBhYm91dCB0byBiZSBzdXNwZW5kZWQuCiAg
ICAgICAgIFBydW5pbmdSZWFzb24gcHJ1bmluZ1JlYXNvbiA9IG1lbW9yeVByZXNzdXJlSGFuZGxl
cigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpID8gUHJ1bmluZ1JlYXNvbjo6TWVtb3J5UHJlc3N1
cmUgOiBQcnVuaW5nUmVhc29uOjpQcm9jZXNzU3VzcGVuZGVkOwotICAgICAgICBQYWdlQ2FjaGU6
OnNoYXJlZCgpLnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24pOworICAgICAgICBQYWdl
Q2FjaGU6OnNpbmdsZXRvbigpLnBydW5lVG9TaXplTm93KDAsIHBydW5pbmdSZWFzb24pOwogICAg
IH0KIAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKaW5kZXggNGZiZDk5OWQ2Zjc5NDkwNDk2NjBmOWFkN2U4Zjc5NDY4Y2JhYzgyMC4u
MDY0ODAwZGQ3NjAzNTljMDFlYWI5MThmY2E2MmVhZTY3NTczNWFjOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTEyNyw3ICsxMjcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcHVyZ2VUaW1lci5zdGFydE9uZVNob3Qoc2NyYXRjaEJ1
ZmZlclB1cmdlSW50ZXJ2YWwpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgU2NyYXRjaEJ1ZmZl
ciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFNjcmF0Y2hCdWZmZXImIHNpbmdsZXRvbigpOwogCiBw
cml2YXRlOgogICAgIHZvaWQgdGltZXJGaXJlZCgpCkBAIC0xNTksNyArMTU5LDcgQEAgcHJpdmF0
ZToKICNlbmRpZgogfTsKIAotU2NyYXRjaEJ1ZmZlciYgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkK
K1NjcmF0Y2hCdWZmZXImIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgREVQUkVD
QVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFNjcmF0Y2hCdWZmZXIsIHNjcmF0Y2hCdWZmZXIsICgp
KTsKICAgICByZXR1cm4gc2NyYXRjaEJ1ZmZlcjsKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lkIFNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRmxvYXRSZQogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91
dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRSb3Vu
ZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QpCiB7Ci0gICAg
bV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihs
YXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5n
bGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOwogICAgIGlmICghbV9s
YXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NSw3ICs1NzUsNyBAQCB2b2lkIFNo
YWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdy
YXBoaWNzQ29udGV4dCwgYwogICAgIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0Lm1vdmUobV9s
YXllckNvbnRleHRUcmFuc2xhdGlvbik7CiAKICAgICAvLyBPbmx5IHJlZHJhdyBpbiB0aGUgc2Ny
YXRjaCBidWZmZXIgaWYgaXRzIGNhY2hlZCBjb250ZW50cyBkb24ndCBtYXRjaCBvdXIgbmVlZHMK
LSAgICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENhY2hl
ZFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQiwgYnVmZmVyUmVsYXRpdmVTaGFkb3dlZFJlY3QsIHNoYWRvd2VkUmVjdC5yYWRpaSgpLCBt
X2xheWVyU2l6ZSk7CisgICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVmZmVyOjpzaW5n
bGV0b24oKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBDb2xvcjo6YmxhY2ss
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGJ1ZmZlclJlbGF0aXZlU2hhZG93ZWRSZWN0LCBzaGFkb3dl
ZFJlY3QucmFkaWkoKSwgbV9sYXllclNpemUpOwogICAgIGlmIChyZWRyYXdOZWVkZWQpIHsKICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250
ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqc2hh
ZG93Q29udGV4dCk7CkBAIC01OTcsMTIgKzU5NywxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
YwogICAgIAogICAgIGRyYXdTaGFkb3dCdWZmZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICBtX2xh
eWVySW1hZ2UgPSAwOwotICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRj
aEJ1ZmZlclB1cmdlKCk7CisgICAgU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVT
Y3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFk
b3dXaXRob3V0VGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBJ
bnRSZWN0JiBsYXllclJlY3QpCiB7Ci0gICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6
c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKKyAgICBtX2xheWVy
SW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVy
UmVjdC5zaXplKCkpOwogICAgIGlmICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAK
QEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhv
dXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgYnVmZmVyUmVs
YXRpdmVIb2xlUmVjdC5tb3ZlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwogCiAgICAgLy8g
T25seSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0cyBjYWNoZWQgY29udGVudHMg
ZG9uJ3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVm
ZmVyOjpzaGFyZWQoKS5zZXRDYWNoZWRJbnNldFNoYWRvd1ZhbHVlcyhtX2JsdXJSYWRpdXMsIENv
bG9yOjpibGFjaywgQ29sb3JTcGFjZURldmljZVJHQiwgYnVmZmVyUmVsYXRpdmVSZWN0LCBidWZm
ZXJSZWxhdGl2ZUhvbGVSZWN0LCBob2xlUmVjdC5yYWRpaSgpKTsKKyAgICBib29sIHJlZHJhd05l
ZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZEluc2V0U2hhZG93VmFs
dWVzKG1fYmx1clJhZGl1cywgQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZm
ZXJSZWxhdGl2ZVJlY3QsIGJ1ZmZlclJlbGF0aXZlSG9sZVJlY3QsIGhvbGVSZWN0LnJhZGlpKCkp
OwogICAgIGlmIChyZWRyYXdOZWVkZWQpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CkBAIC02MzgsNyArNjM4
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LAogICAgIAogICAgIGRyYXdTaGFkb3dCdWZmZXIo
Z3JhcGhpY3NDb250ZXh0KTsKICAgICBtX2xheWVySW1hZ2UgPSAwOwotICAgIFNjcmF0Y2hCdWZm
ZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CisgICAgU2NyYXRjaEJ1
ZmZlcjo6c2luZ2xldG9uKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKIH0KIAogLyoK
QEAgLTY3NSw3ICs2NzUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhv
dXRUaWxpbmcoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAKIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBo
b2xlUmVjdCwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplLCBjb25zdCBJbnRTaXplJiBlZGdl
U2l6ZSkKIHsKLSAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRT
Y3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CisgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1
ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogICAgIGlm
ICghbV9sYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NCw3ICs2ODQsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoR3JhcGhpY3NDb250ZXh0
KiBncmFwaGljc0NvbnRleHQsIGNvbgogICAgIEZsb2F0UmVjdCB0ZW1wbGF0ZUhvbGUgPSBGbG9h
dFJlY3QoZWRnZVNpemUud2lkdGgoKSwgZWRnZVNpemUuaGVpZ2h0KCksIHRlbXBsYXRlU2l6ZS53
aWR0aCgpIC0gMiAqIGVkZ2VTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSAtIDIg
KiBlZGdlU2l6ZS5oZWlnaHQoKSk7CiAKICAgICAvLyBPbmx5IHJlZHJhdyBpbiB0aGUgc2NyYXRj
aCBidWZmZXIgaWYgaXRzIGNhY2hlZCBjb250ZW50cyBkb24ndCBtYXRjaCBvdXIgbmVlZHMKLSAg
ICBib29sIHJlZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNldENhY2hlZElu
c2V0U2hhZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1w
bGF0ZUJvdW5kcywgdGVtcGxhdGVIb2xlLCBob2xlUmVjdC5yYWRpaSgpKTsKKyAgICBib29sIHJl
ZHJhd05lZWRlZCA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNldENhY2hlZEluc2V0U2hh
ZG93VmFsdWVzKG1fYmx1clJhZGl1cywgbV9jb2xvciwgbV9jb2xvclNwYWNlLCB0ZW1wbGF0ZUJv
dW5kcywgdGVtcGxhdGVIb2xlLCBob2xlUmVjdC5yYWRpaSgpKTsKICAgICBpZiAocmVkcmF3TmVl
ZGVkKSB7CiAgICAgICAgIC8vIERyYXcgc2hhZG93IGludG8gYSBuZXcgSW1hZ2VCdWZmZXIuCiAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29u
dGV4dCgpOwpAQCAtNzM1LDE5ICs3MzUsMjAgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb24KICAg
ICBkcmF3TGF5ZXJQaWVjZXMoZ3JhcGhpY3NDb250ZXh0LCBkZXN0SG9sZUJvdW5kcywgaG9sZVJl
Y3QucmFkaWkoKSwgZWRnZVNpemUsIHRlbXBsYXRlU2l6ZSwgSW5uZXJTaGFkb3cpOwogCiAgICAg
bV9sYXllckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNj
cmF0Y2hCdWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNjaGVk
dWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBG
bG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6
ZSwgY29uc3QgSW50U2l6ZSYgZWRnZVNpemUpCiB7Ci0gICAgbV9sYXllckltYWdlID0gU2NyYXRj
aEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOworICAgIGF1
dG8mIHNjcmF0Y2hCdWZmZXIgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKTsKKyAgICBtX2xh
eWVySW1hZ2UgPSBzY3JhdGNoQnVmZmVyLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsK
ICAgICBpZiAoIW1fbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRmxvYXRSZWN0
IHRlbXBsYXRlU2hhZG93ID0gRmxvYXRSZWN0KGVkZ2VTaXplLndpZHRoKCksIGVkZ2VTaXplLmhl
aWdodCgpLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSAtIDIgKiBlZGdlU2l6ZS53aWR0aCgpLCB0ZW1w
bGF0ZVNpemUuaGVpZ2h0KCkgLSAyICogZWRnZVNpemUuaGVpZ2h0KCkpOwogCiAgICAgLy8gT25s
eSByZWRyYXcgaW4gdGhlIHNjcmF0Y2ggYnVmZmVyIGlmIGl0cyBjYWNoZWQgY29udGVudHMgZG9u
J3QgbWF0Y2ggb3VyIG5lZWRzCi0gICAgYm9vbCByZWRyYXdOZWVkZWQgPSBTY3JhdGNoQnVmZmVy
OjpzaGFyZWQoKS5zZXRDYWNoZWRTaGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBt
X2NvbG9yU3BhY2UsIHRlbXBsYXRlU2hhZG93LCBzaGFkb3dlZFJlY3QucmFkaWkoKSwgbV9sYXll
clNpemUpOworICAgIGJvb2wgcmVkcmF3TmVlZGVkID0gc2NyYXRjaEJ1ZmZlci5zZXRDYWNoZWRT
aGFkb3dWYWx1ZXMobV9ibHVyUmFkaXVzLCBtX2NvbG9yLCBtX2NvbG9yU3BhY2UsIHRlbXBsYXRl
U2hhZG93LCBzaGFkb3dlZFJlY3QucmFkaWkoKSwgbV9sYXllclNpemUpOwogICAgIGlmIChyZWRy
YXdOZWVkZWQpIHsKICAgICAgICAgLy8gRHJhdyBzaGFkb3cgaW50byB0aGUgSW1hZ2VCdWZmZXIu
CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+
Y29udGV4dCgpOwpAQCAtNzgwLDcgKzc4MSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRoVGlsaW5nKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zCiAg
ICAgZHJhd0xheWVyUGllY2VzKGdyYXBoaWNzQ29udGV4dCwgc2hhZG93Qm91bmRzLCBzaGFkb3dl
ZFJlY3QucmFkaWkoKSwgZWRnZVNpemUsIHRlbXBsYXRlU2l6ZSwgT3V0ZXJTaGFkb3cpOwogCiAg
ICAgbV9sYXllckltYWdlID0gMDsKLSAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVs
ZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNj
aGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0xh
eWVyUGllY2VzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIHNoYWRvd0JvdW5kcywgY29uc3QgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkmIHJhZGlpLCBj
b25zdCBJbnRTaXplJiBidWZmZXJQYWRkaW5nLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUs
IFNoYWRvd0RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC04OTEsMTIgKzg5MiwxMyBAQCBHcmFwaGlj
c0NvbnRleHQqIFNoYWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpj
b250ZXh0LCBjb25zdCBGbAogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJC
b3VuZGluZ1JlY3QoY29udGV4dCwgbGF5ZXJBcmVhLCBjb250ZXh0LT5jbGlwQm91bmRzKCkpOwog
CiAgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIFdlIHJlc2V0IHRoZSBzY3JhdGNoIGJ1ZmZlciB2
YWx1ZXMgaGVyZSwgYmVjYXVzZSB0aGUgYnVmZmVyIHdpbGwgbm8gbG9uZ2VyIGNvbnRhaW4KICAg
ICAvLyBkYXRhIGZyb20gYW55IHByZXZpb3VzIHJlY3RhbmdsZSBvciBpbnNldCBzaGFkb3dzIGRy
YXduIHZpYSB0aGUgdGlsaW5nIHBhdGguCi0gICAgU2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2V0
Q2FjaGVkU2hhZG93VmFsdWVzKEZsb2F0U2l6ZSgpLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VE
ZXZpY2VSR0IsIEludFJlY3QoKSwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoKSwgbV9sYXllclNp
emUpOwotICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0
Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CisgICAgYXV0byYgc2NyYXRjaEJ1ZmZlciA9IFNj
cmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpOworICAgIHNjcmF0Y2hCdWZmZXIuc2V0Q2FjaGVkU2hh
ZG93VmFsdWVzKEZsb2F0U2l6ZSgpLCBDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0Is
IEludFJlY3QoKSwgRmxvYXRSb3VuZGVkUmVjdDo6UmFkaWkoKSwgbV9sYXllclNpemUpOworICAg
IG1fbGF5ZXJJbWFnZSA9IHNjcmF0Y2hCdWZmZXIuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Qu
c2l6ZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJ
bWFnZS0+Y29udGV4dCgpOwogICAgIHNoYWRvd0NvbnRleHQtPnNhdmUoKTsKQEAgLTkxOSw3ICs5
MjEsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCkKICAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xv
clNwYWNlRGV2aWNlUkdCLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50KG1fbGF5ZXJPcmlnaW4p
LCBtX2xheWVyU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIG1fbGF5ZXJTaXplKSwgY29u
dGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOwogCiAgICAgbV9sYXllckltYWdlID0gMDsKLSAg
ICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwor
ICAgIFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdl
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3Bw
CmluZGV4IGI3NTU5YjAwYmY5YmU1ZTMyODczOWM3NTgzYzMyY2IzMjViMjVjNGQuLmM3ZTgzMWQ4
Y2M2ZDFmMGE5Yzc5OWUyN2E0MzUyNDg1NWM2NjNjYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0
LmNwcApAQCAtMjIwLDE0ICsyMjAsMTQgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6bGF5ZXJU
cmVlRGlkQ2hhbmdlKCkKICAgICAvLyBUaGUgbGF5ZXIgdHJlZSBpcyBjaGFuZ2luZyBhcyBhIHJl
c3VsdCBvZiBzb21lb25lIG1vZGlmeWluZyBhIFBsYXRmb3JtQ0FMYXllciB0aGF0IGRvZXNuJ3QK
ICAgICAvLyBoYXZlIGEgY29ycmVzcG9uZGluZyBHcmFwaGljc0xheWVyLiBTY2hlZHVsZSBhIGZs
dXNoIHNpbmNlIHdlIHdvbid0IHNjaGVkdWxlIG9uZSB0aHJvdWdoIHRoZQogICAgIC8vIG5vcm1h
bCBHcmFwaGljc0xheWVyIG1lY2hhbmlzbXMuCi0gICAgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2hh
cmVkKCkuZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbih0aGlzKTsKKyAgICBMYXllckNoYW5n
ZXNGbHVzaGVyOjpzaW5nbGV0b24oKS5mbHVzaFBlbmRpbmdMYXllckNoYW5nZXNTb29uKHRoaXMp
OwogfQogCiB2b2lkIENBQ0ZMYXllclRyZWVIb3N0OjpkZXN0cm95UmVuZGVyZXIoKQogewogICAg
IG1fcm9vdExheWVyID0gMDsKICAgICBtX3Jvb3RDaGlsZExheWVyID0gMDsKLSAgICBMYXllckNo
YW5nZXNGbHVzaGVyOjpzaGFyZWQoKS5jYW5jZWxQZW5kaW5nRmx1c2godGhpcyk7CisgICAgTGF5
ZXJDaGFuZ2VzRmx1c2hlcjo6c2luZ2xldG9uKCkuY2FuY2VsUGVuZGluZ0ZsdXNoKHRoaXMpOwog
fQogCiBzdGF0aWMgdm9pZCBnZXREaXJ0eVJlY3RzKEhXTkQgd2luZG93LCBWZWN0b3I8Q0dSZWN0
PiYgb3V0UmVjdHMpCkBAIC0yNzAsNyArMjcwLDcgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6
cGFpbnQoKQogdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5kaW5nR3JhcGhpY3NMYXll
ckNoYW5nZXNTb29uKCkKIHsKICAgICBtX3Nob3VsZEZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJD
aGFuZ2VzID0gdHJ1ZTsKLSAgICBMYXllckNoYW5nZXNGbHVzaGVyOjpzaGFyZWQoKS5mbHVzaFBl
bmRpbmdMYXllckNoYW5nZXNTb29uKHRoaXMpOworICAgIExheWVyQ2hhbmdlc0ZsdXNoZXI6OnNp
bmdsZXRvbigpLmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc1Nvb24odGhpcyk7CiB9CiAKIHZvaWQg
Q0FDRkxheWVyVHJlZUhvc3Q6OnNldFNob3VsZEludmVydENvbG9ycyhib29sKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hhbmdlc0Zs
dXNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVy
Q2hhbmdlc0ZsdXNoZXIuY3BwCmluZGV4IDRiMDM2Y2E0MGNmOGJkYTA2NTY4ZGUwZmE1MWI0ZjAz
MWM4NWIyNjcuLjM5MTg3NTVlZTdhZjU4ZDZjOWVkMjJjMGNkZmU4YzkyYjI5NmQ3OTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5n
ZXNGbHVzaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vTGF5ZXJDaGFuZ2VzRmx1c2hlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1MYXllckNoYW5nZXNGbHVzaGVyJiBMYXllckNoYW5nZXNGbHVzaGVyOjpz
aGFyZWQoKQorTGF5ZXJDaGFuZ2VzRmx1c2hlciYgTGF5ZXJDaGFuZ2VzRmx1c2hlcjo6c2luZ2xl
dG9uKCkKIHsKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoTGF5ZXJDaGFuZ2Vz
Rmx1c2hlciwgZmx1c2hlciwgKCkpOwogICAgIHJldHVybiBmbHVzaGVyOwpAQCAtNzQsNyArNzQs
NyBAQCBMUkVTVUxUIExheWVyQ2hhbmdlc0ZsdXNoZXI6Omhvb2tDYWxsYmFjayhpbnQgY29kZSwg
V1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbQogICAgIC8vIGNyYXNoIGZvciBkZWJ1Z2dpbmcg
cHVycG9zZXMgaWYgYW4gZXhjZXB0aW9uIGlzIGhpdC4gCiAgICAgRXhjZXB0aW9uUmVnaXN0cmF0
aW9uIHJlZ2lzdHJhdGlvblN0cnVjdDsgLy8gTm90ZTogbXVzdCBiZSBzdGFjayBhbGxvY2F0ZWQu
CiAgICAgU3RydWN0dXJlZEV4Y2VwdGlvbkhhbmRsZXJTdXBwcmVzc29yIHN1cHJlc3NvcihyZWdp
c3RyYXRpb25TdHJ1Y3QpOwotICAgIHJldHVybiBzaGFyZWQoKS5ob29rRmlyZWQoY29kZSwgd1Bh
cmFtLCBsUGFyYW0pOworICAgIHJldHVybiBzaW5nbGV0b24oKS5ob29rRmlyZWQoY29kZSwgd1Bh
cmFtLCBsUGFyYW0pOwogfQogCiBMUkVTVUxUIExheWVyQ2hhbmdlc0ZsdXNoZXI6Omhvb2tGaXJl
ZChpbnQgY29kZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vTGF5ZXJDaGFuZ2Vz
Rmx1c2hlci5oCmluZGV4IGZjYjMxZTdiOWRlMjI0ZjcyNzU4ZDU2NmRkODJjMTI2MjIxMDI5Yzcu
LjI4ZTY2Yjk4NTM5ZjAzZDcxMTRlNmE4MjA3MjAxNGZlMTZiZjBkMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9MYXllckNoYW5nZXNGbHVzaGVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0xheWVyQ2hh
bmdlc0ZsdXNoZXIuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBBYnN0cmFjdENBQ0ZMYXllclRy
ZWVIb3N0OwogY2xhc3MgTGF5ZXJDaGFuZ2VzRmx1c2hlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoTGF5ZXJDaGFuZ2VzRmx1c2hlcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExheWVyQ2hh
bmdlc0ZsdXNoZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBMYXllckNoYW5nZXNGbHVzaGVyJiBz
aW5nbGV0b24oKTsKIAogICAgIHZvaWQgZmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzU29vbihBYnN0
cmFjdENBQ0ZMYXllclRyZWVIb3N0Kik7CiAgICAgdm9pZCBjYW5jZWxQZW5kaW5nRmx1c2goQWJz
dHJhY3RDQUNGTGF5ZXJUcmVlSG9zdCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJvbm1lbnQuY3BwCmluZGV4IGU3
MDM2YzE3YjRmOTJkYWVlMWUyNTBiMDlhNjAwY2RmZGQ4OTdkY2IuLmQxNmI5NTM4NGViNzA1YTE0
YWZhNWQ5MjJhMmYxNGUzYWMwZjA1MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy93YWsvRmxvYXRpbmdQb2ludEVudmlyb25tZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9pbnRFbnZpcm9ubWVudC5jcHAKQEAgLTMz
LDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GbG9hdGluZ1BvaW50RW52aXJv
bm1lbnQmIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2hhcmVkKCkKK0Zsb2F0aW5nUG9pbnRF
bnZpcm9ubWVudCYgRmxvYXRpbmdQb2ludEVudmlyb25tZW50OjpzaW5nbGV0b24oKQogewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ+IGZsb2F0aW5n
UG9pbnRFbnZpcm9ubWVudDsKICAgICByZXR1cm4gZmxvYXRpbmdQb2ludEVudmlyb25tZW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50
RW52aXJvbm1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvRmxvYXRpbmdQ
b2ludEVudmlyb25tZW50LmgKaW5kZXggMDNmNGQzZjBmYmNkMjQ1NmY1YThkYmU3M2RhNjhmYTkz
MDE5NjhhOS4uNjUxMWJmMGUwNzU5YjE1MjdjYWFhNGUzM2VhN2FlM2ExYWQ3ZDI4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL3dhay9GbG9hdGluZ1BvaW50RW52aXJv
bm1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mvd2FrL0Zsb2F0aW5nUG9p
bnRFbnZpcm9ubWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNhdmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKICAgICB2b2lkIHByb3BhZ2F0
ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEZs
b2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgc2hhcmVkKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudCYgc2luZ2xldG9uKCk7CiAKIHByaXZhdGU6CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVh
ZC5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy93YWsvV2ViQ29yZVRocmVhZC5tbQpp
bmRleCA0YjA5ZDFmMDZkYTgyMzhmNzM2MDQzNWMxN2YzYTE5YTk1YzNiM2M5Li5kOWQxMzk2NTI5
ZmQ4ZTM3ZGFhMDc3MDEyYjcxOGU2MDI3ZDY0NjM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3Mvd2FrL1dlYkNvcmVUaHJlYWQubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL3dhay9XZWJDb3JlVGhyZWFkLm1tCkBAIC02NDIsNyArNjQyLDcgQEAgTk9f
UkVUVVJOCiAjZW5kaWYKIHZvaWQgKlJ1bldlYlRocmVhZCh2b2lkICphcmcpCiB7Ci0gICAgRmxv
YXRpbmdQb2ludEVudmlyb25tZW50OjpzaGFyZWQoKS5wcm9wYWdhdGVNYWluVGhyZWFkRW52aXJv
bm1lbnQoKTsKKyAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNpbmdsZXRvbigpLnByb3Bh
Z2F0ZU1haW5UaHJlYWRFbnZpcm9ubWVudCgpOwogCiAgICAgVU5VU0VEX1BBUkFNKGFyZyk7CiAg
ICAgLy8gV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZv
cmUgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCkgc2luY2UgdGhlCkBAIC03NTcsNyArNzU3LDcg
QEAgc3RhdGljIHZvaWQgU3RhcnRXZWJUaHJlYWQoKQogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
cmVzdWx0ID09IDAsICJzdGFydHVwIGxvY2sgZmFpbGVkIHdpdGggY29kZTolZCIsIHJlc3VsdCk7
CiAKICAgICAvLyBQcm9wYWdhdGUgdGhlIG1haW5UaHJlYWQncyBmZW52IHRvIHdvcmtlcnMgJiB0
aGUgd2ViIHRocmVhZC4KLSAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgpLnNh
dmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKKyAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6
OnNpbmdsZXRvbigpLnNhdmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsKIAogICAgIHB0aHJlYWRf
Y3JlYXRlKCZ3ZWJUaHJlYWQsICZ0YXR0ciwgUnVuV2ViVGhyZWFkLCBOVUxMKTsKICAgICBwdGhy
ZWFkX2F0dHJfZGVzdHJveSgmdGF0dHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvSElER2FtZXBhZFByb3ZpZGVyLmNwcAppbmRleCAyNGYxYjA4NDc1Yzc1YzQ5MTM0NjM5
NDFmYTBlNWZhMmIwMWM1ZGJiLi42OTdhNDljNjE4MGFhYjE4ZmMyMzdiMGI4ZTZkOWY0NTdjNjQ0
ODAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFBy
b3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFBy
b3ZpZGVyLmNwcApAQCAtNzMsNyArNzMsNyBAQCBzdGF0aWMgdm9pZCBkZXZpY2VWYWx1ZXNDaGFu
Z2VkQ2FsbGJhY2sodm9pZCogY29udGV4dCwgSU9SZXR1cm4gcmVzdWx0LCB2b2lkKiwgSQogICAg
IGxpc3RlbmVyLT52YWx1ZXNDaGFuZ2VkKHZhbHVlKTsKIH0KIAotSElER2FtZXBhZFByb3ZpZGVy
JiBISURHYW1lcGFkUHJvdmlkZXI6OnNoYXJlZCgpCitISURHYW1lcGFkUHJvdmlkZXImIEhJREdh
bWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
SElER2FtZXBhZFByb3ZpZGVyPiBzaGFyZWRMaXN0ZW5lcjsKICAgICByZXR1cm4gc2hhcmVkTGlz
dGVuZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBh
ZFByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSElER2FtZXBhZFByb3Zp
ZGVyLmgKaW5kZXggODBlMzBlZWNiMDUzMTY1OTU2MDIxMGYzYmVjYzdkODZlYzI1MjljZC4uNWEw
NjhkZjZiYjE5ZDU0NTgwYmQ1NzE3ZWYxYWQ2YzM3ZTg5MDkzZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hJREdhbWVwYWRQcm92aWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9ISURHYW1lcGFkUHJvdmlkZXIuaApAQCAtNDYsNyArNDYsNyBA
QCBjbGFzcyBISURHYW1lcGFkUHJvdmlkZXIgOiBwdWJsaWMgR2FtZXBhZFByb3ZpZGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShISURHYW1lcGFkUHJvdmlkZXIpOwogICAgIGZyaWVuZCBj
bGFzcyBOZXZlckRlc3Ryb3llZDxISURHYW1lcGFkUHJvdmlkZXI+OwogcHVibGljOgotICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBISURHYW1lcGFkUHJvdmlkZXImIHNoYXJlZCgpOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBISURHYW1lcGFkUHJvdmlkZXImIHNpbmdsZXRvbigpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHN0YXJ0TW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQcm92aWRlckNs
aWVudCopOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wTW9uaXRvcmluZ0dhbWVwYWRzKEdhbWVwYWRQ
cm92aWRlckNsaWVudCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuY3BwCmluZGV4IDM4OTEzOGM5YjQwZWY1MTc5
ZThjNGZiYjU5OWU0N2Q5YjA4Yzg2NGIuLmNjNWE1Y2JlMWYyYTg5MjgxMTljODI4MmViMDdkYTA1
MzNkMzUxMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtQ2VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIE1l
ZGlhU3RyZWFtQ2VudGVyKiYgbWVkaWFTdHJlYW1DZW50ZXJPdmVycmlkZSgpCiAgICAgcmV0dXJu
IG92ZXJyaWRlOwogfQogCi1NZWRpYVN0cmVhbUNlbnRlciYgTWVkaWFTdHJlYW1DZW50ZXI6OnNo
YXJlZCgpCitNZWRpYVN0cmVhbUNlbnRlciYgTWVkaWFTdHJlYW1DZW50ZXI6OnNpbmdsZXRvbigp
CiB7CiAgICAgTWVkaWFTdHJlYW1DZW50ZXIqIG92ZXJyaWRlID0gbWVkaWFTdHJlYW1DZW50ZXJP
dmVycmlkZSgpOwogICAgIGlmIChvdmVycmlkZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbUNlbnRlci5oCmluZGV4IDdkNTQwYjk0
ZGU5NTg2MDRjN2E0NDA0YjczYjA1ZDBkZTQzMzEzMzIuLmU2OTdmMDJlMGQ1NGI2NzY1NGMzOGEx
N2NmM2E0MDI4NmEzZGMyYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtQ2VudGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1DZW50ZXIuaApAQCAtNDksNyArNDksNyBAQCBjbGFz
cyBNZWRpYVN0cmVhbUNlbnRlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+TWVkaWFTdHJlYW1D
ZW50ZXIoKTsKIAotICAgIHN0YXRpYyBNZWRpYVN0cmVhbUNlbnRlciYgc2hhcmVkKCk7CisgICAg
c3RhdGljIE1lZGlhU3RyZWFtQ2VudGVyJiBzaW5nbGV0b24oKTsKICAgICBzdGF0aWMgdm9pZCBz
ZXRTaGFyZWRTdHJlYW1DZW50ZXIoTWVkaWFTdHJlYW1DZW50ZXIqKTsKIAogICAgIHZpcnR1YWwg
dm9pZCB2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3RyZWFtQ3Jl
YXRpb25DbGllbnQ+LCBQYXNzUmVmUHRyPE1lZGlhQ29uc3RyYWludHM+IGF1ZGlvQ29uc3RyYWlu
dHMsIFBhc3NSZWZQdHI8TWVkaWFDb25zdHJhaW50cz4gdmlkZW9Db25zdHJhaW50cykgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL0FWQ2Fw
dHVyZURldmljZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9BVkNhcHR1cmVEZXZpY2VNYW5hZ2VyLmgKaW5kZXggOGVmZTQxNTk5NGE3ZTA2NjMyNDY2
ZWE1NWQ2MGEyMjZmYWM1M2M1Yy4uYTM4OTNjMGU0MzE1NTliYzhjOGQ2MjA3NDkyODY0NjhiYTU2
M2EwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L0FWQ2FwdHVyZURldmljZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5oCkBAIC00NSw3ICs0NSw3IEBA
IGNsYXNzIENhcHR1cmVEZXZpY2U7CiAKIGNsYXNzIEFWQ2FwdHVyZURldmljZU1hbmFnZXIgewog
cHVibGljOgotICAgIHN0YXRpYyBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyJiBzaGFyZWQoKTsKKyAg
ICBzdGF0aWMgQVZDYXB0dXJlRGV2aWNlTWFuYWdlciYgc2luZ2xldG9uKCk7CiAgICAgc3RhdGlj
IGJvb2wgaXNBdmFpbGFibGUoKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZv
Pj4gZ2V0U291cmNlc0luZm8oY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvQVZDYXB0dXJlRGV2aWNlTWFuYWdlci5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VN
YW5hZ2VyLm1tCmluZGV4IDlhZmQ5ZWRhYWZhYzIxZGNjMDFlMmQzZjhkOGFjNzMxOWRhZTRjZjUu
LmIwYjI2ZjZjMzU1NjBkYjQ1NjI4ZDA4YTdlYjEyYmU1OWUzZWVhYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNhcHR1cmVEZXZpY2VNYW5h
Z2VyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9BVkNh
cHR1cmVEZXZpY2VNYW5hZ2VyLm1tCkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGljIFZlY3RvcjxD
YXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZUxpc3QoKQogICAgIGlmIChmaXJzdFRpbWUgJiYg
IWNhcHR1cmVEZXZpY2VMaXN0LnNpemUoKSkgewogICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTsK
ICAgICAgICAgcmVmcmVzaENhcHR1cmVEZXZpY2VMaXN0KCk7Ci0gICAgICAgIEFWQ2FwdHVyZURl
dmljZU1hbmFnZXI6OnNoYXJlZCgpLnJlZ2lzdGVyRm9yRGV2aWNlTm90aWZpY2F0aW9ucygpOwor
ICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS5yZWdpc3RlckZvckRl
dmljZU5vdGlmaWNhdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4gY2FwdHVyZURldmljZUxp
c3Q7CkBAIC0xNzQsNyArMTc0LDcgQEAgYm9vbCBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjppc0F2
YWlsYWJsZSgpCiAgICAgcmV0dXJuIEFWRm91bmRhdGlvbkxpYnJhcnkoKTsKIH0KIAotQVZDYXB0
dXJlRGV2aWNlTWFuYWdlciYgQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkKK0FWQ2Fw
dHVyZURldmljZU1hbmFnZXImIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpCiB7
CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKEFWQ2FwdHVyZURldmljZU1hbmFn
ZXIsIG1hbmFnZXIsICgpKTsKICAgICByZXR1cm4gbWFuYWdlcjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRlck1hYy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTWVkaWFTdHJlYW1D
ZW50ZXJNYWMuY3BwCmluZGV4IDhkOGQ5MGRmMTRjMmNmY2FiMmQwYjU3ZThhOWY1YTg3NmU0YzU0
ZmYuLjUzNGU0N2UxMjU3NTNhOWY1NmIzYzFkN2Y3N2YyMTFmZmM2N2JjMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9NZWRpYVN0cmVhbUNlbnRl
ck1hYy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01l
ZGlhU3RyZWFtQ2VudGVyTWFjLmNwcApAQCAtNjUsNyArNjUsNyBAQCB2b2lkIE1lZGlhU3RyZWFt
Q2VudGVyTWFjOjp2YWxpZGF0ZVJlcXVlc3RDb25zdHJhaW50cyhQYXNzUmVmUHRyPE1lZGlhU3Ry
ZWFtQ3JlYQogCiAgICAgaWYgKGF1ZGlvQ29uc3RyYWludHMpIHsKICAgICAgICAgU3RyaW5nIGlu
dmFsaWRDb25zdHJhaW50OwotICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQo
KS52ZXJpZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6QXVkaW8s
IGF1ZGlvQ29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRp
YVR5cGUoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBp
bnZhbGlkQ29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBjbGllbnQtPmNvbnN0cmFpbnRzSW52YWxpZChpbnZhbGlkQ29u
c3RyYWludCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC03NCw3ICs3NCw3IEBAIHZvaWQgTWVk
aWFTdHJlYW1DZW50ZXJNYWM6OnZhbGlkYXRlUmVxdWVzdENvbnN0cmFpbnRzKFBhc3NSZWZQdHI8
TWVkaWFTdHJlYW1DcmVhCiAKICAgICBpZiAodmlkZW9Db25zdHJhaW50cykgewogICAgICAgICBT
dHJpbmcgaW52YWxpZENvbnN0cmFpbnQ7Ci0gICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6
OnNoYXJlZCgpLnZlcmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNl
OjpWaWRlbywgdmlkZW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOworICAg
ICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaW5nbGV0b24oKS52ZXJpZnlDb25zdHJhaW50
c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMu
Z2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgaWYgKCFpbnZhbGlkQ29uc3RyYWlu
dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNsaWVudC0+Y29uc3RyYWludHNJbnZhbGlkKGlu
dmFsaWRDb25zdHJhaW50KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTk1LDEzICs5NSwxMyBA
QCB2b2lkIE1lZGlhU3RyZWFtQ2VudGVyTWFjOjpjcmVhdGVNZWRpYVN0cmVhbShQYXNzUmVmUHRy
PE1lZGlhU3RyZWFtQ3JlYXRpb25DbGllbgogICAgIAogICAgIGlmIChhdWRpb0NvbnN0cmFpbnRz
KSB7CiAgICAgICAgIFN0cmluZyBpbnZhbGlkQ29uc3RyYWludDsKLSAgICAgICAgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUoTWVk
aWFTdHJlYW1Tb3VyY2U6OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlkQ29u
c3RyYWludCk7CisgICAgICAgIEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRvbigpLnZl
cmlmeUNvbnN0cmFpbnRzRm9yTWVkaWFUeXBlKE1lZGlhU3RyZWFtU291cmNlOjpBdWRpbywgYXVk
aW9Db25zdHJhaW50cy5nZXQoKSwgaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICBpZiAoIWlu
dmFsaWRDb25zdHJhaW50LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgY2xpZW50LT5mYWlsZWRU
b0NyZWF0ZVN0cmVhbVdpdGhDb25zdHJhaW50c0Vycm9yKGludmFsaWRDb25zdHJhaW50KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUmVmUHRyPE1l
ZGlhU3RyZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNo
YXJlZCgpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6
OkF1ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPE1lZGlhU3Ry
ZWFtU291cmNlPiBhdWRpb1NvdXJjZSA9IEFWQ2FwdHVyZURldmljZU1hbmFnZXI6OnNpbmdsZXRv
bigpLmJlc3RTb3VyY2VGb3JUeXBlQW5kQ29uc3RyYWludHMoTWVkaWFTdHJlYW1Tb3VyY2U6OkF1
ZGlvLCBhdWRpb0NvbnN0cmFpbnRzLmdldCgpKTsKICAgICAgICAgQVNTRVJUKGF1ZGlvU291cmNl
KTsKICAgICAgICAgCiAgICAgICAgIGF1ZGlvU291cmNlcy5hcHBlbmQoYXVkaW9Tb3VyY2UucmVs
ZWFzZSgpKTsKQEAgLTEwOSwxMyArMTA5LDEzIEBAIHZvaWQgTWVkaWFTdHJlYW1DZW50ZXJNYWM6
OmNyZWF0ZU1lZGlhU3RyZWFtKFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1DcmVhdGlvbkNsaWVuCiAg
ICAgCiAgICAgaWYgKHZpZGVvQ29uc3RyYWludHMpIHsKICAgICAgICAgU3RyaW5nIGludmFsaWRD
b25zdHJhaW50OwotICAgICAgICBBVkNhcHR1cmVEZXZpY2VNYW5hZ2VyOjpzaGFyZWQoKS52ZXJp
ZnlDb25zdHJhaW50c0Zvck1lZGlhVHlwZShNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVv
Q29uc3RyYWludHMuZ2V0KCksIGludmFsaWRDb25zdHJhaW50KTsKKyAgICAgICAgQVZDYXB0dXJl
RGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkudmVyaWZ5Q29uc3RyYWludHNGb3JNZWRpYVR5cGUo
TWVkaWFTdHJlYW1Tb3VyY2U6OlZpZGVvLCB2aWRlb0NvbnN0cmFpbnRzLmdldCgpLCBpbnZhbGlk
Q29uc3RyYWludCk7CiAgICAgICAgIGlmICghaW52YWxpZENvbnN0cmFpbnQuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICBjbGllbnQtPmZhaWxlZFRvQ3JlYXRlU3RyZWFtV2l0aENvbnN0cmFpbnRz
RXJyb3IoaW52YWxpZENvbnN0cmFpbnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNl
ID0gQVZDYXB0dXJlRGV2aWNlTWFuYWdlcjo6c2hhcmVkKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRD
b25zdHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0
KCkpOworICAgICAgICBSZWZQdHI8TWVkaWFTdHJlYW1Tb3VyY2U+IHZpZGVvU291cmNlID0gQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuYmVzdFNvdXJjZUZvclR5cGVBbmRDb25z
dHJhaW50cyhNZWRpYVN0cmVhbVNvdXJjZTo6VmlkZW8sIHZpZGVvQ29uc3RyYWludHMuZ2V0KCkp
OwogICAgICAgICBBU1NFUlQodmlkZW9Tb3VyY2UpOwogICAgICAgICAKICAgICAgICAgdmlkZW9T
b3VyY2VzLmFwcGVuZCh2aWRlb1NvdXJjZS5yZWxlYXNlKCkpOwpAQCAtMTI4LDcgKzEyOCw3IEBA
IGJvb2wgTWVkaWFTdHJlYW1DZW50ZXJNYWM6OmdldE1lZGlhU3RyZWFtVHJhY2tTb3VyY2VzKFBh
c3NSZWZQdHI8TWVkaWFTdHJlYW1UcmFjCiB7CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2tT
b3VyY2VzUmVxdWVzdENsaWVudD4gcmVxdWVzdENsaWVudCA9IHBycENsaWVudDsKIAotICAgIFZl
Y3RvcjxSZWZQdHI8VHJhY2tTb3VyY2VJbmZvPj4gc291cmNlcyA9IEFWQ2FwdHVyZURldmljZU1h
bmFnZXI6OnNoYXJlZCgpLmdldFNvdXJjZXNJbmZvKHJlcXVlc3RDbGllbnQtPnJlcXVlc3RPcmln
aW4oKSk7CisgICAgVmVjdG9yPFJlZlB0cjxUcmFja1NvdXJjZUluZm8+PiBzb3VyY2VzID0gQVZD
YXB0dXJlRGV2aWNlTWFuYWdlcjo6c2luZ2xldG9uKCkuZ2V0U291cmNlc0luZm8ocmVxdWVzdENs
aWVudC0+cmVxdWVzdE9yaWdpbigpKTsKIAogICAgIHJlcXVlc3RDbGllbnQtPmRpZENvbXBsZXRl
UmVxdWVzdChzb3VyY2VzKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1ZXVlLmNwcAppbmRleCA4NWVhNjY3MWMw
MjA3OTc0MTlhNWQ0YWMzNDZlNWM4NTMzYjg1YmMyLi4zNzA2YjVjMzgwYjQxM2NmYzFiOGUxNjQ1
MmNhOTFiODhlMjIxMThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL0ROU1Jlc29sdmVRdWV1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ETlNSZXNvbHZlUXVldWUuY3BwCkBAIC01MCw3ICs1MCw3IEBAIHN0YXRpYyBjb25zdCBp
bnQgZ01heFJlcXVlc3RzVG9RdWV1ZSA9IDY0OwogLy8gSWYgdGhlcmUgd2VyZSBxdWV1ZWQgbmFt
ZXMgdGhhdCBjb3VsZG4ndCBiZSBzZW50IHNpbXVsdGFuZW91c2x5LCBjaGVjayB0aGUgc3RhdGUg
b2YgcmVzb2x2ZXJzIGFmdGVyIHRoaXMgZGVsYXkuCiBzdGF0aWMgY29uc3QgZG91YmxlIGdSZXRy
eVJlc29sdmluZ0luU2Vjb25kcyA9IDAuMTsKIAotRE5TUmVzb2x2ZVF1ZXVlJiBETlNSZXNvbHZl
UXVldWU6OnNoYXJlZCgpCitETlNSZXNvbHZlUXVldWUmIEROU1Jlc29sdmVRdWV1ZTo6c2luZ2xl
dG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RE5TUmVzb2x2ZVF1ZXVlPiBxdWV1
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNv
bHZlUXVldWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRE5TUmVzb2x2ZVF1
ZXVlLmgKaW5kZXggY2Q5YmEwZmMwZTJhNTZlZjRkYWE0ZmI5NjZkN2M5ZTQzMjk0MGNiZi4uMjdm
MDBkOGJkMDE5Mzc2MDYwMjllNzdhOGUzNzUzNzk4ZTc5NWUxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ETlNSZXNvbHZlUXVldWUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0ROU1Jlc29sdmVRdWV1ZS5oCkBAIC0zOSw3ICszOSw3
IEBAIGNsYXNzIEROU1Jlc29sdmVRdWV1ZSB7CiAgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPERO
U1Jlc29sdmVRdWV1ZT47CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgRE5TUmVzb2x2ZVF1ZXVlJiBz
aGFyZWQoKTsKKyAgICBzdGF0aWMgRE5TUmVzb2x2ZVF1ZXVlJiBzaW5nbGV0b24oKTsKIAogICAg
IHZvaWQgYWRkKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwogICAgIHZvaWQgZGVjcmVtZW50UmVx
dWVzdENvdW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y2YvRE5TQ0ZOZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlND
Rk5ldC5jcHAKaW5kZXggYmQ0MDU3MmQ5ZjFiMGI4NGY1MGIzYTBjYTllNDBkYzIzMWE2MDUwMy4u
ZTZmZWE2ZDBkZDY3M2Q2ZDc1NGUxZTljZDhmMTRiZDFhMTcxYjUxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9ETlNDRk5ldC5jcHAKQEAgLTc3LDcgKzc3LDcg
QEAgYm9vbCBETlNSZXNvbHZlUXVldWU6OnBsYXRmb3JtUHJveHlJc0VuYWJsZWRJblN5c3RlbVBy
ZWZlcmVuY2VzKCkKIAogc3RhdGljIHZvaWQgY2xpZW50Q2FsbGJhY2soQ0ZIb3N0UmVmIHRoZUhv
c3QsIENGSG9zdEluZm9UeXBlLCBjb25zdCBDRlN0cmVhbUVycm9yKiwgdm9pZCopCiB7Ci0gICAg
RE5TUmVzb2x2ZVF1ZXVlOjpzaGFyZWQoKS5kZWNyZW1lbnRSZXF1ZXN0Q291bnQoKTsgLy8gSXQn
cyBvayB0byBjYWxsIHNoYXJlZCgpIGZyb20gYSBzZWNvbmRhcnkgdGhyZWFkLCB0aGUgc3RhdGlj
IHZhcmlhYmxlIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgYnkgbm93LgorICAgIEROU1Jl
c29sdmVRdWV1ZTo6c2luZ2xldG9uKCkuZGVjcmVtZW50UmVxdWVzdENvdW50KCk7IC8vIEl0J3Mg
b2sgdG8gY2FsbCBzaW5nbGV0b24oKSBmcm9tIGEgc2Vjb25kYXJ5IHRocmVhZCwgdGhlIHN0YXRp
YyB2YXJpYWJsZSBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkIGJ5IG5vdy4KICAgICBDRlJl
bGVhc2UodGhlSG9zdCk7CiB9CiAKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIHByZWZldGNoRE5T
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAg
ICBpZiAoaG9zdG5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgRE5TUmVzb2x2
ZVF1ZXVlOjpzaGFyZWQoKS5hZGQoaG9zdG5hbWUpOworICAgIEROU1Jlc29sdmVRdWV1ZTo6c2lu
Z2xldG9uKCkuYWRkKGhvc3RuYW1lKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL0ROU1NvdXAuY3BwCmluZGV4IGNhNDE0ODQ3ZjVmOWRlMTBhNzdi
YWI2MTBiOWM1ZjRjODllZGU3NTkuLmE0ZmIyNGJkNjY3Yjg1MDIwMDc0MDAxYmY5ZTA0ODk5OWZj
YWE0NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9E
TlNTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvRE5T
U291cC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgYm9vbCBETlNSZXNvbHZlUXVldWU6OnBsYXRmb3Jt
UHJveHlJc0VuYWJsZWRJblN5c3RlbVByZWZlcmVuY2VzKCkKIAogc3RhdGljIHZvaWQgcmVzb2x2
ZWRDYWxsYmFjayhTb3VwQWRkcmVzcyosIGd1aW50LCB2b2lkKikKIHsKLSAgICBETlNSZXNvbHZl
UXVldWU6OnNoYXJlZCgpLmRlY3JlbWVudFJlcXVlc3RDb3VudCgpOworICAgIEROU1Jlc29sdmVR
dWV1ZTo6c2luZ2xldG9uKCkuZGVjcmVtZW50UmVxdWVzdENvdW50KCk7CiB9CiAKIHZvaWQgRE5T
UmVzb2x2ZVF1ZXVlOjpwbGF0Zm9ybVJlc29sdmUoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKQEAg
LTYzLDcgKzYzLDcgQEAgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQog
ICAgIGlmIChob3N0bmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEROU1Jl
c29sdmVRdWV1ZTo6c2hhcmVkKCkuYWRkKGhvc3RuYW1lKTsKKyAgICBETlNSZXNvbHZlUXVldWU6
OnNpbmdsZXRvbigpLmFkZChob3N0bmFtZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAppbmRleCBiM2QxYWE4NDlmMDJlYWRjYTdkYWU4MjBmYjYwMWY2YjY1YTAyODY2
Li44N2RlNzU2OTY3MjU0MWQ3MjA0YTMxMjllYmRhNDc5YjAxMmM5ZWIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zMDQsNyArMzA0LDcgQEAgdm9pZCBJbnRlcm5hbHM6
OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSogcGFnZSkKICAgICBBWE9iamVjdENhY2hlOjpk
aXNhYmxlQWNjZXNzaWJpbGl0eSgpOwogI2VuZGlmCiAKLSAgICBNb2NrUGFnZU92ZXJsYXlDbGll
bnQ6OnNoYXJlZCgpLnVuaW5zdGFsbEFsbE92ZXJsYXlzKCk7CisgICAgTW9ja1BhZ2VPdmVybGF5
Q2xpZW50OjpzaW5nbGV0b24oKS51bmluc3RhbGxBbGxPdmVybGF5cygpOwogfQogCiBJbnRlcm5h
bHM6OkludGVybmFscyhEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0yNDMxLDcgKzI0MzEsNyBAQCB2
b2lkIEludGVybmFsczo6aW5zdGFsbE1vY2tQYWdlT3ZlcmxheShjb25zdCBTdHJpbmcmIG92ZXJs
YXlUeXBlLCBFeGNlcHRpb25Db2RlJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgTW9j
a1BhZ2VPdmVybGF5Q2xpZW50OjpzaGFyZWQoKS5pbnN0YWxsT3ZlcmxheShkb2N1bWVudC0+ZnJh
bWUoKS0+bWFpbkZyYW1lKCksIG92ZXJsYXlUeXBlID09ICJ2aWV3IiA/IFBhZ2VPdmVybGF5OjpP
dmVybGF5VHlwZTo6VmlldyA6IFBhZ2VPdmVybGF5OjpPdmVybGF5VHlwZTo6RG9jdW1lbnQpOwor
ICAgIE1vY2tQYWdlT3ZlcmxheUNsaWVudDo6c2luZ2xldG9uKCkuaW5zdGFsbE92ZXJsYXkoZG9j
dW1lbnQtPmZyYW1lKCktPm1haW5GcmFtZSgpLCBvdmVybGF5VHlwZSA9PSAidmlldyIgPyBQYWdl
T3ZlcmxheTo6T3ZlcmxheVR5cGU6OlZpZXcgOiBQYWdlT3ZlcmxheTo6T3ZlcmxheVR5cGU6OkRv
Y3VtZW50KTsKIH0KIAogU3RyaW5nIEludGVybmFsczo6cGFnZU92ZXJsYXlMYXllclRyZWVBc1Rl
eHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CkBAIC0yNDQ0LDcgKzI0NDQsNyBAQCBTdHJpbmcg
SW50ZXJuYWxzOjpwYWdlT3ZlcmxheUxheWVyVHJlZUFzVGV4dChFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKIAotICAgIHJldHVybiBNb2Nr
UGFnZU92ZXJsYXlDbGllbnQ6OnNoYXJlZCgpLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudC0+ZnJh
bWUoKS0+bWFpbkZyYW1lKCkpOworICAgIHJldHVybiBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6OnNp
bmdsZXRvbigpLmxheWVyVHJlZUFzVGV4dChkb2N1bWVudC0+ZnJhbWUoKS0+bWFpbkZyYW1lKCkp
OwogfQogCiB2b2lkIEludGVybmFsczo6c2V0UGFnZU11dGVkKGJvb2wgbXV0ZWQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5jcHAKaW5kZXggYmUw
OWMzZDYwNmMxZDFhY2U3ZDI5MWI2NjlkMTAwNWZmNjAxZTNjNS4uNjFmMTliZjE2NTAxYTlkZmYx
NmQ3YjllODk4MjA0ODRlMjExMTVkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja1BhZ2VPdmVybGF5Q2xpZW50LmNwcApAQCAtMzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLU1vY2tQYWdlT3ZlcmxheUNsaWVudCYgTW9ja1BhZ2VPdmVybGF5Q2xpZW50
OjpzaGFyZWQoKQorTW9ja1BhZ2VPdmVybGF5Q2xpZW50JiBNb2NrUGFnZU92ZXJsYXlDbGllbnQ6
OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1vY2tQYWdlT3Zlcmxh
eUNsaWVudD4gc2hhcmVkQ2xpZW50OwogICAgIHJldHVybiBzaGFyZWRDbGllbnQuZ2V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9Nb2NrUGFnZU92ZXJsYXlDbGllbnQuaAppbmRleCA3
ZDQ2M2YyMzY4MjgyODNiZDdhYTRhYmE4NmJhZWEwZjM4Y2FlODk0Li4xZGQyOTdiMzlhMGQ3Mzhi
N2MxNDIyZGFiNDdiOTEyNGFhZGIxZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL01vY2tQYWdlT3ZlcmxheUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
TW9ja1BhZ2VPdmVybGF5Q2xpZW50LmgKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgTWFpbkZyYW1l
OwogY2xhc3MgTW9ja1BhZ2VPdmVybGF5Q2xpZW50IGZpbmFsIDogcHVibGljIFBhZ2VPdmVybGF5
OjpDbGllbnQgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxNb2NrUGFnZU92ZXJs
YXlDbGllbnQ+OwogcHVibGljOgotICAgIHN0YXRpYyBNb2NrUGFnZU92ZXJsYXlDbGllbnQmIHNo
YXJlZCgpOworICAgIHN0YXRpYyBNb2NrUGFnZU92ZXJsYXlDbGllbnQmIHNpbmdsZXRvbigpOwog
CiAgICAgZXhwbGljaXQgTW9ja1BhZ2VPdmVybGF5Q2xpZW50KCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyVGhyZWFkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyVGhyZWFkLmNwcAppbmRleCAwZmJlYjFkNzE0Yzg0MTVjMjYwMzZlZDBlMzJj
MDllZTBmNWE2YjNhLi4zYzJkY2E1NTFjYTQ2ZjJkYzYwZDFlZjI2MDRiZmE3OGIzMWVkMWM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93b3JrZXJzL1dvcmtlclRocmVhZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJUaHJlYWQuY3BwCkBAIC0xNDEsNyArMTQxLDcg
QEAgdm9pZCBXb3JrZXJUaHJlYWQ6OndvcmtlclRocmVhZCgpCiB7CiAgICAgLy8gUHJvcGFnYXRl
IHRoZSBtYWluVGhyZWFkJ3MgZmVudiB0byB3b3JrZXJzLgogI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgpLnByb3BhZ2F0ZU1haW5UaHJlYWRF
bnZpcm9ubWVudCgpOworICAgIEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2luZ2xldG9uKCku
cHJvcGFnYXRlTWFpblRocmVhZEVudmlyb25tZW50KCk7CiAjZW5kaWYKIAogICAgIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAppbmRleCA2YmU4Mjlh
YjQ0MzNiNzk1OGJiOWMyODZiMjhmZDYzODRlNGVkMDViLi5kMTUwZWNhNDRjOTEwNTYxZjAxMWIw
MWNmNDJmNzI4NTNkYjYxYWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2Vi
RGF0YWJhc2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9JREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgogCi1XZWJEYXRhYmFzZVByb3ZpZGVyJiBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaGFyZWQoKQor
V2ViRGF0YWJhc2VQcm92aWRlciYgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9uKCkKIHsK
ICAgICBzdGF0aWMgV2ViRGF0YWJhc2VQcm92aWRlciYgZGF0YWJhc2VQcm92aWRlciA9IGFkb3B0
UmVmKCpuZXcgV2ViRGF0YWJhc2VQcm92aWRlcikubGVha1JlZigpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYktp
dC9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaAppbmRleCAzMmRjMjdhMTI2ZDk5ZDNhODI0
MzFiYmNlMTAzMGM2YTg5MTU2NDNkLi5jYTIxMTgwZDc0NzM4M2U5MjgzNzFiZmY0MThhZGIwZDY2
NjRhMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92
aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgK
QEAgLTMyLDcgKzMyLDcgQEAKIGNsYXNzIFdlYkRhdGFiYXNlUHJvdmlkZXIgZmluYWwgOiBwdWJs
aWMgV2ViQ29yZTo6RGF0YWJhc2VQcm92aWRlciB7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVz
dHJveWVkPFdlYkRhdGFiYXNlUHJvdmlkZXI+OwogcHVibGljOgotICAgIHN0YXRpYyBXZWJEYXRh
YmFzZVByb3ZpZGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV2ViRGF0YWJhc2VQcm92aWRlciYg
c2luZ2xldG9uKCk7CiAgICAgdmlydHVhbCB+V2ViRGF0YWJhc2VQcm92aWRlcigpOwogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvSGlzdG9yeS9XZWJCYWNrRm9yd2Fy
ZExpc3QubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5t
bQppbmRleCA2YjQ1MDAyMWM0Mjc4NjI2MzYzMjkxMzYzMTAyNzcyYzI1YzEyZTFmLi5lYmZiZDRk
MDA0MTAyM2MyNWMyYzY5ZTg0NzkwODJjOGM0MjYzNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
L21hYy9IaXN0b3J5L1dlYkJhY2tGb3J3YXJkTGlzdC5tbQpAQCAtMzU1LDcgKzM1NSw3IEBAIHN0
YXRpYyBib29sIGJ1bXBlckNhckJhY2tGb3J3YXJkSGFja05lZWRlZCgpCiAKIC0gKE5TVUludGVn
ZXIpcGFnZUNhY2hlU2l6ZQogewotICAgIHJldHVybiBba2l0KGNvcmUoc2VsZiktPnBhZ2UoKSkg
dXNlc1BhZ2VDYWNoZV0gPyBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1heFNpemUoKSA6IDA7CisgICAg
cmV0dXJuIFtraXQoY29yZShzZWxmKS0+cGFnZSgpKSB1c2VzUGFnZUNhY2hlXSA/IFBhZ2VDYWNo
ZTo6c2luZ2xldG9uKCkubWF4U2l6ZSgpIDogMDsKIH0KIAogLSAoaW50KWJhY2tMaXN0Q291bnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGJhZWUzZDA3NTcwYmIzZDNkYzFlZGI3
OGUzMjJjODA4ZTgwMjU3MTEuLjQ0MzFhOTAwMWE5OTRhOWNjNzNiNWJlZTY4NDM5YjU5ZDc5YmIw
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIv
U291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMTIyLDcgKzEyMiw3IEBACiAg
ICAgV2ViQ29yZTo6Y2FjaGVTdG9yYWdlKCkuZW1wdHkoKTsKIAogICAgIC8vIEVtcHR5IHRoZSBD
cm9zcy1PcmlnaW4gUHJlZmxpZ2h0IGNhY2hlCi0gICAgV2ViQ29yZTo6Q3Jvc3NPcmlnaW5QcmVm
bGlnaHRSZXN1bHRDYWNoZTo6c2hhcmVkKCkuZW1wdHkoKTsKKyAgICBXZWJDb3JlOjpDcm9zc09y
aWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaW5nbGV0b24oKS5lbXB0eSgpOwogfQogCiAjaWYg
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDb3Jl
U3RhdGlzdGljcy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ29yZVN0YXRpc3RpY3Mu
bW0KaW5kZXggNTYzZWM4ZTk5MDZkOGFkODE1Njc5MTY2MWJmNDA5N2U1ZGI5MWNiNi4uZThkY2Iy
NDQyMmRlZGJiODRhY2I5ZTgxNGVjM2FhNmVkN2E0ZGRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDb3JlU3RhdGlzdGljcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNvcmVTdGF0aXN0aWNzLm1tCkBAIC0yMjQsMTIgKzIyNCwxMiBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogKyAoaW50KWNhY2hlZFBhZ2VDb3VudAogewotICAgIHJldHVy
biBQYWdlQ2FjaGU6OnNoYXJlZCgpLnBhZ2VDb3VudCgpOworICAgIHJldHVybiBQYWdlQ2FjaGU6
OnNpbmdsZXRvbigpLnBhZ2VDb3VudCgpOwogfQogCiArIChpbnQpY2FjaGVkRnJhbWVDb3VudAog
ewotICAgIHJldHVybiBQYWdlQ2FjaGU6OnNoYXJlZCgpLmZyYW1lQ291bnQoKTsKKyAgICByZXR1
cm4gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5mcmFtZUNvdW50KCk7CiB9CiAKIC8vIERlcHJlY2F0
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBl
UGx1Z2luSG9zdE1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05l
dHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaAppbmRleCAxNDg2ZDkyZDc0NmUxODRjNGEyNzI4ZWVk
MmI1Yzk2Njk0ZWY0ZGFlLi5mY2IyMjBhYWM2OTA3OTU2ZWRmM2YxNzEzNDRlMDQ2ZTY5NWU2MmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBs
dWdpbkhvc3RNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5oCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIE5ldHNj
YXBlUGx1Z2luSG9zdFByb3h5OwogCiBjbGFzcyBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgc2hhcmVkKCk7
CisgICAgc3RhdGljIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIHNpbmdsZXRvbigpOwogICAg
IAogICAgIFBhc3NSZWZQdHI8TmV0c2NhcGVQbHVnaW5JbnN0YW5jZVByb3h5PiBpbnN0YW50aWF0
ZVBsdWdpbihjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIGNwdV90eXBlX3QgcGx1Z2luQXJjaGl0
ZWN0dXJlLCBjb25zdCBTdHJpbmcmIGJ1bmRsZUlkZW50aWZpZXIsIFdlYkhvc3RlZE5ldHNjYXBl
UGx1Z2luVmlldyAqLCBOU1N0cmluZyAqbWltZVR5cGUsIE5TQXJyYXkgKmF0dHJpYnV0ZUtleXMs
IE5TQXJyYXkgKmF0dHJpYnV0ZVZhbHVlcywgTlNTdHJpbmcgKnVzZXJBZ2VudCwgTlNVUkwgKnNv
dXJjZVVSTCwgYm9vbCBmdWxsRnJhbWUsIGJvb2wgaXNQcml2YXRlQnJvd3NpbmdFbmFibGVkLCBi
b29sIGlzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQsIGJvb2wgaG9zdExheWVyc0luV2lu
ZG93U2VydmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdp
bnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIubW0KaW5kZXggMWY5ZmFjYmJkZjIw
NTQ4OTdhZTYxNzFhYzUxODBiZTk3ZjBlZTc4ZC4uNDBlY2IyMDYyMzVhZGZmNmU3NWZjMzQ4YzE5
ZjAwNDVjMDFlNGVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0
ZWQvTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9Q
bHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyLm1tCkBAIC00OSw3ICs0OSw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotTmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlciYgTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVk
KCkKK05ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXImIE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNpbmdsZXRvbigpCiB7CiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKE5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXIsIHBsdWdpbkhvc3RNYW5hZ2VyLCAoKSk7CiAgICAgCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9OZXRzY2FwZVBsdWdpbkhv
c3RQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdFByb3h5Lm1tCmluZGV4IDU3MDVjZmIzYjE3ZWU4YTI1Yzg0NzQ1NzJkMzJlYjMyNmY0
NGI5MWYuLjljZDY1NWM5ZjcxMDUzNWE5ZGYyYWY0NTdkNzA0NDZhNmQ5YjZlNjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1Z2luSG9zdFBy
b3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL05ldHNjYXBlUGx1
Z2luSG9zdFByb3h5Lm1tCkBAIC0xNDYsNyArMTQ2LDcgQEAgdm9pZCBOZXRzY2FwZVBsdWdpbkhv
c3RQcm94eTo6cGx1Z2luSG9zdERpZWQoKQogICAgIGZvciAoUGx1Z2luSW5zdGFuY2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gaW5zdGFuY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAg
ICAgICAgaXQtPnZhbHVlLT5wbHVnaW5Ib3N0RGllZCgpOwogICAgIAotICAgIE5ldHNjYXBlUGx1
Z2luSG9zdE1hbmFnZXI6OnNoYXJlZCgpLnBsdWdpbkhvc3REaWVkKHRoaXMpOworICAgIE5ldHNj
YXBlUGx1Z2luSG9zdE1hbmFnZXI6OnNpbmdsZXRvbigpLnBsdWdpbkhvc3REaWVkKHRoaXMpOwog
ICAgIAogICAgIC8vIFRoZSBwbHVnLWluIGNyYXNoZWQgd2hpbGUgaXRzIG1lbnUgYmFyIHdhcyBo
aWRkZW4uIE1ha2Ugc3VyZSB0byBzaG93IGl0LgogICAgIGlmICghbV9tZW51QmFySXNWaXNpYmxl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvV2ViSG9zdGVk
TmV0c2NhcGVQbHVnaW5WaWV3Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQv
V2ViSG9zdGVkTmV0c2NhcGVQbHVnaW5WaWV3Lm1tCmluZGV4IGU0Mjk3ZmFlYjJmYWI3OWUxNTNj
NmNiN2M1MDY3NTdhMTFiMjExZDkuLjc2MDA1ODM2OTBkNzk2MGM1ZDhhNTlhNzNlNzJkMDI1ZGIy
Y2ZmMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1dlYkhv
c3RlZE5ldHNjYXBlUGx1Z2luVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5z
L0hvc3RlZC9XZWJIb3N0ZWROZXRzY2FwZVBsdWdpblZpZXcubW0KQEAgLTEzMCw3ICsxMzAsNyBA
QCBleHRlcm4gIkMiIHsKICAgICBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCA9IFtbW3Nl
bGYgd2ViVmlld10gcHJlZmVyZW5jZXNdIGFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFibGVkXTsK
ICAgICBfaG9zdHNMYXllcnNJbldpbmRvd1NlcnZlciA9IFtzZWxmIHdpbmRvd0hvc3RzTGF5ZXJz
SW5XaW5kb3dTZXJ2ZXJdOwogCi0gICAgX3Byb3h5ID0gTmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdl
cjo6c2hhcmVkKCkuaW5zdGFudGlhdGVQbHVnaW4oW19wbHVnaW5QYWNrYWdlLmdldCgpIHBhdGhd
LCBbX3BsdWdpblBhY2thZ2UuZ2V0KCkgcGx1Z2luSG9zdEFyY2hpdGVjdHVyZV0sIFtfcGx1Z2lu
UGFja2FnZS5nZXQoKSBidW5kbGVJZGVudGlmaWVyXSwgc2VsZiwgX01JTUVUeXBlLmdldCgpLCBf
YXR0cmlidXRlS2V5cy5nZXQoKSwgX2F0dHJpYnV0ZVZhbHVlcy5nZXQoKSwgdXNlckFnZW50LCBf
c291cmNlVVJMLmdldCgpLAorICAgIF9wcm94eSA9IE5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXI6
OnNpbmdsZXRvbigpLmluc3RhbnRpYXRlUGx1Z2luKFtfcGx1Z2luUGFja2FnZS5nZXQoKSBwYXRo
XSwgW19wbHVnaW5QYWNrYWdlLmdldCgpIHBsdWdpbkhvc3RBcmNoaXRlY3R1cmVdLCBbX3BsdWdp
blBhY2thZ2UuZ2V0KCkgYnVuZGxlSWRlbnRpZmllcl0sIHNlbGYsIF9NSU1FVHlwZS5nZXQoKSwg
X2F0dHJpYnV0ZUtleXMuZ2V0KCksIF9hdHRyaWJ1dGVWYWx1ZXMuZ2V0KCksIHVzZXJBZ2VudCwg
X3NvdXJjZVVSTC5nZXQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbW9kZSA9PSBOUF9GVUxMLCBfaXNQcml2YXRl
QnJvd3NpbmdFbmFibGVkLCBhY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCwgX2hvc3RzTGF5
ZXJzSW5XaW5kb3dTZXJ2ZXIpOwogICAgIGlmICghX3Byb3h5KSAKICAgICAgICAgcmV0dXJuIE5P
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvUGx1Z2lucy9XZWJOZXRzY2FwZVBsdWdp
blBhY2thZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2lu
UGFja2FnZS5tbQppbmRleCA5ZTM0NTgyYTQ2YTcyMTQyOGI5YmFmYWU4NjFkMWNjYjAxMWNlMzk5
Li4xOTA2ZWYzNjdkYjU0YTZjYTJhOGJkMTQ1MzM4MjJhOTEyZTY2YjhmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9QbHVnaW5zL1dlYk5ldHNjYXBlUGx1Z2luUGFja2FnZS5tbQpA
QCAtMjIxLDcgKzIyMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lkKWNy
ZWF0ZVByb3BlcnR5TGlzdEZpbGUKIHsKLSAgICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5hZ2VyOjpz
aGFyZWQoKS5jcmVhdGVQcm9wZXJ0eUxpc3RGaWxlKHBhdGgsIHBsdWdpbkhvc3RBcmNoaXRlY3R1
cmUsIFtzZWxmIGJ1bmRsZUlkZW50aWZpZXJdKTsKKyAgICBOZXRzY2FwZVBsdWdpbkhvc3RNYW5h
Z2VyOjpzaW5nbGV0b24oKS5jcmVhdGVQcm9wZXJ0eUxpc3RGaWxlKHBhdGgsIHBsdWdpbkhvc3RB
cmNoaXRlY3R1cmUsIFtzZWxmIGJ1bmRsZUlkZW50aWZpZXJdKTsKIH0KIAogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
bW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQubW0K
aW5kZXggYzUwYmMyYTRjNzc4NmI3MWExMDc0ZGJjN2ZkYzQxNTY2OWJjZjQ0OC4uODNkNDg2NTk0
MWFmYzc2MTA1ZTczOWE4ZTlkYmE5ZTUzNGEyZGMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5tbQpAQCAtMjk3LDcgKzI5Nyw3
IEBAIFBhZ2UqIFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW1lKiBmcmFtZSwgY29u
c3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0CiAKICNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VT
UykgJiYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKG5ld1dlYlZpZXcpCi0g
ICAgICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkuZGlkQ3Jl
YXRlV2luZG93KCk7CisgICAgICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6
c2luZ2xldG9uKCkuZGlkQ3JlYXRlV2luZG93KCk7CiAjZW5kaWYKICAgICAKICAgICByZXR1cm4g
Y29yZShuZXdXZWJWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggODQ0NzE2NDMxNGQ1NTRmNDU2
OTFlOWMyMjk4YzZlNGRjM2ZiYjA1NC4uZTFmMzdkYmIwNWZhMzI1ZjM3MDVlNzk0NzJiZGI1ODAy
M2M2ZTQ0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTg0Miw3ICs4NDIsNyBAQCBGcmFtZSogV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoQ3JlYXRlUGFnZShjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uJikKICAgICAKICNpZiBVU0UoUExVR0lOX0hPU1RfUFJPQ0VTUykgJiYgRU5BQkxFKE5FVFND
QVBFX1BMVUdJTl9BUEkpCiAgICAgaWYgKG5ld1dlYlZpZXcpCi0gICAgICAgIFdlYktpdDo6TmV0
c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2hhcmVkKCkuZGlkQ3JlYXRlV2luZG93KCk7CisgICAg
ICAgIFdlYktpdDo6TmV0c2NhcGVQbHVnaW5Ib3N0TWFuYWdlcjo6c2luZ2xldG9uKCkuZGlkQ3Jl
YXRlV2luZG93KCk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgcmV0dXJuIGNvcmUoW25ld1dlYlZp
ZXcgbWFpbkZyYW1lXSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpdGVkTGlua1N0b3JlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5tbQppbmRleCA0ZjJlMjIxNzAyNWVlNTdhMWZhMzQ4
MTJiZTZkZmZjZGUyOWNiZDU0Li4zMzJmNmViMDAxOTE5NjRjYjI2OWVlMTJlMGNkNGY2MWU2ZmFi
ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNp
dGVkTGlua1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2l0ZWRMaW5rU3RvcmUubW0KQEAgLTc0LDcgKzc0LDcgQEAgdm9pZCBXZWJWaXNpdGVkTGlu
a1N0b3JlOjpyZW1vdmVBbGxWaXNpdGVkTGlua3MoKQogewogICAgIGZvciAoYXV0byYgdmlzaXRl
ZExpbmtTdG9yZSA6IHZpc2l0ZWRMaW5rU3RvcmVzKCkpCiAgICAgICAgIHZpc2l0ZWRMaW5rU3Rv
cmUtPnJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5t
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5n
bGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQg
V2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmsoTlNTdHJpbmcgKnVybFN0cmluZykK
QEAgLTEwMyw3ICsxMDMsNyBAQCB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0
ZWRMaW5rKE5TU3RyaW5nICp1cmxTdHJpbmcpCiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5yZW1v
dmUobGlua0hhc2gpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlc0ZvckxpbmsobGlua0hhc2gpOwot
ICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2Fs
YygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtT
dHlsZVJlY2FsYygpOwogfQogCiBib29sIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OmlzTGlua1Zpc2l0
ZWQoUGFnZSYgcGFnZSwgTGlua0hhc2ggbGlua0hhc2gsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29u
c3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBX
ZWJWaXNpdGVkTGlua1N0b3JlOjphZGRWaXNpdGVkTGlua0hhc2goTGlua0hhc2ggbGlua0hhc2gp
CiAgICAgbV92aXNpdGVkTGlua0hhc2hlcy5hZGQobGlua0hhc2gpOwogCiAgICAgaW52YWxpZGF0
ZVN0eWxlc0ZvckxpbmsobGlua0hhc2gpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1Bh
Z2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9u
KCkubWFya1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIFdlYlZp
c2l0ZWRMaW5rU3RvcmU6OnJlbW92ZVZpc2l0ZWRMaW5rSGFzaGVzKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCAwYzA1ZjJjNTA4ODgwZGE4OWRkNDRlZDQyZDgxODUyM2Mz
ZTQxZjNlLi43NGFkNTVhOTQ2ZWQ4ZTM5NzA0YTZkZDNiYTg0OGFiYzg4MDEwZWEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC04NDksNyArODQ5LDcgQEAgc3RhdGljIHZv
aWQgV2ViS2l0SW5pdGlhbGl6ZUdhbWVwYWRQcm92aWRlcklmTmVjZXNzYXJ5KCkKICAgICBpZiAo
aW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEdhbWVwYWRQcm92aWRlcjo6c2hh
cmVkKCkuc2V0U2hhcmVkUHJvdmlkZXIoSElER2FtZXBhZFByb3ZpZGVyOjpzaGFyZWQoKSk7Cisg
ICAgR2FtZXBhZFByb3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRTaGFyZWRQcm92aWRlcihISURHYW1l
cGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpKTsKICAgICBpbml0aWFsaXplZCA9IHRydWU7CiB9CiAj
ZW5kaWYKQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplR2Ft
ZXBhZFByb3ZpZGVySWZOZWNlc3NhcnkoKQogICAgIHBhZ2VDb25maWd1cmF0aW9uLmFsdGVybmF0
aXZlVGV4dENsaWVudCA9IG5ldyBXZWJBbHRlcm5hdGl2ZVRleHRDbGllbnQoc2VsZik7CiAgICAg
cGFnZUNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1lID0gbmV3IFdlYkZyYW1l
TG9hZGVyQ2xpZW50OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVu
dCA9IG5ldyBXZWJQcm9ncmVzc1RyYWNrZXJDbGllbnQoc2VsZik7Ci0gICAgcGFnZUNvbmZpZ3Vy
YXRpb24uZGF0YWJhc2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaGFyZWQoKTsK
KyAgICBwYWdlQ29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJv
dmlkZXI6OnNpbmdsZXRvbigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3Bh
Y2VQcm92aWRlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigp
OwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0
ZS0+Z3JvdXAtPnVzZXJDb250ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9u
LnZpc2l0ZWRMaW5rU3RvcmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7
CkBAIC0xMTkwLDcgKzExOTAsNyBAQCBzdGF0aWMgdm9pZCBXZWJLaXRJbml0aWFsaXplR2FtZXBh
ZFByb3ZpZGVySWZOZWNlc3NhcnkoKQogICAgIHBhZ2VDb25maWd1cmF0aW9uLmluc3BlY3RvckNs
aWVudCA9IG5ldyBXZWJJbnNwZWN0b3JDbGllbnQoc2VsZik7CiAgICAgcGFnZUNvbmZpZ3VyYXRp
b24ubG9hZGVyQ2xpZW50Rm9yTWFpbkZyYW1lID0gbmV3IFdlYkZyYW1lTG9hZGVyQ2xpZW50Owog
ICAgIHBhZ2VDb25maWd1cmF0aW9uLnByb2dyZXNzVHJhY2tlckNsaWVudCA9IG5ldyBXZWJQcm9n
cmVzc1RyYWNrZXJDbGllbnQoc2VsZik7Ci0gICAgcGFnZUNvbmZpZ3VyYXRpb24uZGF0YWJhc2VQ
cm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaGFyZWQoKTsKKyAgICBwYWdlQ29uZmln
dXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0gJldlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRv
bigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9ICZf
cHJpdmF0ZS0+Z3JvdXAtPnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpOwogICAgIHBhZ2VDb25m
aWd1cmF0aW9uLnVzZXJDb250ZW50Q29udHJvbGxlciA9ICZfcHJpdmF0ZS0+Z3JvdXAtPnVzZXJD
b250ZW50Q29udHJvbGxlcigpOwogICAgIHBhZ2VDb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3Rv
cmUgPSAmX3ByaXZhdGUtPmdyb3VwLT52aXNpdGVkTGlua1N0b3JlKCk7CkBAIC0xODY4LDEyICsx
ODY4LDEyIEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAjaWYg
RU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiArICh2b2lkKV9lbmFibGVSZW1vdGVJbnNwZWN0b3IK
IHsKLSAgICBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLnN0YXJ0KCk7CisgICAgUmVtb3RlSW5z
cGVjdG9yOjpzaW5nbGV0b24oKS5zdGFydCgpOwogfQogCiArICh2b2lkKV9kaXNhYmxlUmVtb3Rl
SW5zcGVjdG9yCiB7Ci0gICAgUmVtb3RlSW5zcGVjdG9yOjpzaGFyZWQoKS5zdG9wKCk7CisgICAg
UmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKS5zdG9wKCk7CiB9CiAKICsgKHZvaWQpX2Rpc2Fi
bGVBdXRvU3RhcnRSZW1vdGVJbnNwZWN0b3IKQEAgLTE4ODMsMTIgKzE4ODMsMTIgQEAgc3RhdGlj
IGJvb2wgZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKIAogKyAoQk9PTClfaXNSZW1vdGVJ
bnNwZWN0b3JFbmFibGVkCiB7Ci0gICAgcmV0dXJuIFJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCku
ZW5hYmxlZCgpOworICAgIHJldHVybiBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLmVuYWJs
ZWQoKTsKIH0KIAogKyAoQk9PTClfaGFzUmVtb3RlSW5zcGVjdG9yU2Vzc2lvbgogewotICAgIHJl
dHVybiBSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgpLmhhc0FjdGl2ZURlYnVnU2Vzc2lvbigpOwor
ICAgIHJldHVybiBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLmhhc0FjdGl2ZURlYnVnU2Vz
c2lvbigpOwogfQogCiAtIChCT09MKWFsbG93c1JlbW90ZUluc3BlY3Rpb24KQEAgLTE5MjYsNyAr
MTkyNiw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJkb3duRW5hYmxlZCgpCiAtICh2
b2lkKV9zZXRIb3N0QXBwbGljYXRpb25Qcm9jZXNzSWRlbnRpZmllcjoocGlkX3QpcGlkIGF1ZGl0
VG9rZW46KGF1ZGl0X3Rva2VuX3QpYXVkaXRUb2tlbgogewogICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGF1ZGl0RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlKG51bGxwdHIsIChjb25zdCBVSW50
OCopJmF1ZGl0VG9rZW4sIHNpemVvZihhdWRpdFRva2VuKSkpOwotICAgIFJlbW90ZUluc3BlY3Rv
cjo6c2hhcmVkKCkuc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKHBpZCwgYXVkaXREYXRhKTsK
KyAgICBSZW1vdGVJbnNwZWN0b3I6OnNpbmdsZXRvbigpLnNldFBhcmVudFByb2Nlc3NJbmZvcm1h
dGlvbihwaWQsIGF1ZGl0RGF0YSk7CiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogI2VuZGlm
IC8vIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpAQCAtNzkxNSw5ICs3OTE1LDExIEBAIHN0YXRp
YyBpbmxpbmUgdWludDY0X3Qgcm91bmRVcFRvUG93ZXJPZjIodWludDY0X3QgbnVtKQogCiAgICAg
bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1h
eERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNl
dERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25J
bnRlcnZhbCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNp
emUpOworCisgICAgYXV0byYgcGFnZUNhY2hlID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKTsKKyAg
ICBwYWdlQ2FjaGUuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKICNpZiBQTEFURk9STShJT1Mp
Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRTaG91bGRDbGVhckJhY2tpbmdTdG9yZXModHJ1
ZSk7CisgICAgcGFnZUNhY2hlLnNldFNob3VsZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKICAg
ICBuc3VybENhY2hlTWVtb3J5Q2FwYWNpdHkgPSBzdGQ6Om1heChuc3VybENhY2hlTWVtb3J5Q2Fw
YWNpdHksIFtuc3VybENhY2hlIG1lbW9yeUNhcGFjaXR5XSk7CiAgICAgQ0ZVUkxDYWNoZVJlZiBj
ZkNhY2hlOwogICAgIGlmIChbbnN1cmxDYWNoZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9y
KF9DRlVSTENhY2hlKV0gJiYgKGNmQ2FjaGUgPSBbbnN1cmxDYWNoZSBfQ0ZVUkxDYWNoZV0pKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vV2ViQ2FjaGUuY3BwIGIvU291cmNlL1dlYktp
dC93aW4vV2ViQ2FjaGUuY3BwCmluZGV4IDdjMmMwY2Y5MTUzOTE3MWE2MTUxMmE5NTU2Y2QxZjJi
NDY1ZmE5YWIuLmRhMjcyNmI3MTE5NzRiMTIxMWE2ZDNkYWFiMTdlYTE5MzY0YWVkNzggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L3dpbi9XZWJDYWNoZS5jcHAKQEAgLTIxNSw3ICsyMTUsNyBAQCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIFdlYkNhY2hlOjplbXB0eSggdm9pZCkKICAgICBXZWJDb3JlOjpjYWNoZVN0b3JhZ2Uo
KS5lbXB0eSgpOwogCiAgICAgLy8gRW1wdHkgdGhlIENyb3NzLU9yaWdpbiBQcmVmbGlnaHQgY2Fj
aGUKLSAgICBXZWJDb3JlOjpDcm9zc09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQo
KS5lbXB0eSgpOworICAgIFdlYkNvcmU6OkNyb3NzT3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6
OnNpbmdsZXRvbigpLmVtcHR5KCk7CiAKICAgICByZXR1cm4gU19PSzsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
d2luL1dlYkNvcmVTdGF0aXN0aWNzLmNwcAppbmRleCBiNDMwNzFjMjUyOGRhNmU3OGU4YmQxMjcx
NTEwZmMxNTdiNGE3MzdiLi4xNjgwMjY1YWQ4MmY4ZmJiMjY0MjQzZjYxMmFjZTA2YWI2MjZlZjRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3RhdGlzdGljcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC93aW4vV2ViQ29yZVN0YXRpc3RpY3MuY3BwCkBAIC0zMjcsNyArMzI3
LDcgQEAgSFJFU1VMVCBXZWJDb3JlU3RhdGlzdGljczo6Y2FjaGVkUGFnZUNvdW50KElOVCogY291
bnQpCiAgICAgaWYgKCFjb3VudCkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgICpj
b3VudCA9IFBhZ2VDYWNoZTo6c2hhcmVkKCkucGFnZUNvdW50KCk7CisgICAgKmNvdW50ID0gUGFn
ZUNhY2hlOjpzaW5nbGV0b24oKS5wYWdlQ291bnQoKTsKICAgICByZXR1cm4gU19PSzsKIH0KIApA
QCAtMzM2LDYgKzMzNiw2IEBAIEhSRVNVTFQgV2ViQ29yZVN0YXRpc3RpY3M6OmNhY2hlZEZyYW1l
Q291bnQoSU5UKiBjb3VudCkKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwogCi0gICAgKmNvdW50ID0gUGFnZUNhY2hlOjpzaGFyZWQoKS5mcmFtZUNvdW50KCk7Cisg
ICAgKmNvdW50ID0gUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5mcmFtZUNvdW50KCk7CiAgICAgcmV0
dXJuIFNfT0s7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9y
dC9XZWJWaXNpdGVkTGlua1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuY3BwCmluZGV4IDQ5YzAzNzYyZTk3YzlhMWU3YmFkYjM3
NGZhZjFjNmIzMTcyZjdiNWMuLmMyYjE5ZjEwOTk4OTQwNzdjYjczNzI5NGFkMDQ2NTUyMDcxMThm
ZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0
ZWRMaW5rU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2l0ZWRMaW5rU3RvcmUuY3BwCkBAIC0zNCw3ICszNCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBzdGF0aWMgYm9vbCBzX3Nob3VsZFRyYWNrVmlzaXRlZExpbmtzOwogCi1XZWJW
aXNpdGVkTGlua1N0b3JlJiBXZWJWaXNpdGVkTGlua1N0b3JlOjpzaGFyZWQoKQorV2ViVmlzaXRl
ZExpbmtTdG9yZSYgV2ViVmlzaXRlZExpbmtTdG9yZTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0
aWMgV2ViVmlzaXRlZExpbmtTdG9yZSYgdmlzaXRlZExpbmtTdG9yZSA9ICphZG9wdFJlZihuZXcg
V2ViVmlzaXRlZExpbmtTdG9yZSkubGVha1JlZigpOwogICAgIApAQCAtNjIsOCArNjIsOCBAQCB2
b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnNldFNob3VsZFRyYWNrVmlzaXRlZExpbmtzKGJvb2wg
c2hvdWxkVHJhY2tWaXNpdGVkTGluawogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnJlbW92
ZUFsbFZpc2l0ZWRMaW5rcygpCiB7Ci0gICAgc2hhcmVkKCkucmVtb3ZlVmlzaXRlZExpbmtIYXNo
ZXMoKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5
bGVSZWNhbGMoKTsKKyAgICBXZWJWaXNpdGVkTGlua1N0b3JlOjpzaW5nbGV0b24oKS5yZW1vdmVW
aXNpdGVkTGlua0hhc2hlcygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2Vz
Rm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIFdlYlZpc2l0ZWRMaW5rU3Rv
cmU6OmFkZFZpc2l0ZWRMaW5rKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQpAQCAtMTE2LDcgKzEx
Niw3IEBAIHZvaWQgV2ViVmlzaXRlZExpbmtTdG9yZTo6YWRkVmlzaXRlZExpbmtIYXNoKExpbmtI
YXNoIGxpbmtIYXNoKQogICAgIG1fdmlzaXRlZExpbmtIYXNoZXMuYWRkKGxpbmtIYXNoKTsKIAog
ICAgIGludmFsaWRhdGVTdHlsZXNGb3JMaW5rKGxpbmtIYXNoKTsKLSAgICBQYWdlQ2FjaGU6OnNo
YXJlZCgpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKKyAgICBQYWdlQ2Fj
aGU6OnNpbmdsZXRvbigpLm1hcmtQYWdlc0ZvclZpc2l0ZWRMaW5rU3R5bGVSZWNhbGMoKTsKIH0K
IAogdm9pZCBXZWJWaXNpdGVkTGlua1N0b3JlOjpyZW1vdmVWaXNpdGVkTGlua0hhc2hlcygpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpdGVkTGlu
a1N0b3JlLmgKaW5kZXggN2U3YTA3NDc1MTJhMDk2OWQ2ZmFiZDA4NWI4OTA1MjdhOWIxNzU3OC4u
NjRhOTgwZjFmYTQ1YzgwNGZmNjY1N2E0ZWVmYTJiYTZkNmE2NGYxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViVmlzaXRlZExpbmtTdG9yZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2l0ZWRMaW5rU3RvcmUuaApA
QCAtMzIsNyArMzIsNyBAQAogCiBjbGFzcyBXZWJWaXNpdGVkTGlua1N0b3JlIGZpbmFsIDogcHVi
bGljIFdlYkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUgewogcHVibGljOgotICAgIHN0YXRpYyBXZWJW
aXNpdGVkTGlua1N0b3JlJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV2ViVmlzaXRlZExpbmtTdG9y
ZSYgc2luZ2xldG9uKCk7CiAgICAgV2ViVmlzaXRlZExpbmtTdG9yZSgpOwogICAgIHZpcnR1YWwg
fldlYlZpc2l0ZWRMaW5rU3RvcmUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4v
V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCBmNGQ1ZTdm
OGE3YmM3MTNiNzhkODc0N2QwNmQwY2NiMTljNzBkZGM3Li45OWQzNTNjMDA5N2YyODAzNThlYmRj
MzVmMGUwMGUzMGUyNjRhYmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcApAQCAtNjc1LDcgKzY3NSw3
IEBAIHZvaWQgV2ViVmlldzo6c2V0Q2FjaGVNb2RlbChXZWJDYWNoZU1vZGVsIGNhY2hlTW9kZWwp
CiAKICAgICBtZW1vcnlDYWNoZSgpLnNldENhcGFjaXRpZXMoY2FjaGVNaW5EZWFkQ2FwYWNpdHks
IGNhY2hlTWF4RGVhZENhcGFjaXR5LCBjYWNoZVRvdGFsQ2FwYWNpdHkpOwogICAgIG1lbW9yeUNh
Y2hlKCkuc2V0RGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbChkZWFkRGVjb2RlZERhdGFE
ZWxldGlvbkludGVydmFsKTsKLSAgICBQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldE1heFNpemUocGFn
ZUNhY2hlU2l6ZSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5zZXRNYXhTaXplKHBhZ2VD
YWNoZVNpemUpOwogCiAjaWYgVVNFKENGTkVUV09SSykKICAgICAvLyBEb24ndCBzaHJpbmsgYSBi
aWcgZGlzayBjYWNoZSwgc2luY2UgdGhhdCB3b3VsZCBjYXVzZSBjaHVybi4KQEAgLTI4MDUsMTAg
KzI4MDUsMTAgQEAgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJWaWV3Ojppbml0V2l0aEZy
YW1lKAogICAgIGNvbmZpZ3VyYXRpb24uZHJhZ0NsaWVudCA9IG5ldyBXZWJEcmFnQ2xpZW50KHRo
aXMpOwogICAgIGNvbmZpZ3VyYXRpb24uaW5zcGVjdG9yQ2xpZW50ID0gbV9pbnNwZWN0b3JDbGll
bnQ7CiAgICAgY29uZmlndXJhdGlvbi5sb2FkZXJDbGllbnRGb3JNYWluRnJhbWUgPSBuZXcgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ7Ci0gICAgY29uZmlndXJhdGlvbi5kYXRhYmFzZVByb3ZpZGVyID0g
JldlYkRhdGFiYXNlUHJvdmlkZXI6OnNoYXJlZCgpOworICAgIGNvbmZpZ3VyYXRpb24uZGF0YWJh
c2VQcm92aWRlciA9ICZXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKTsKICAgICBjb25m
aWd1cmF0aW9uLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlciA9IFdlYlN0b3JhZ2VOYW1lc3BhY2VQ
cm92aWRlcjo6Y3JlYXRlKGxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChtX3ByZWZlcmVuY2VzLmdl
dCgpKSk7CiAgICAgY29uZmlndXJhdGlvbi5wcm9ncmVzc1RyYWNrZXJDbGllbnQgPSBzdGF0aWNf
Y2FzdDxXZWJGcmFtZUxvYWRlckNsaWVudCo+KGNvbmZpZ3VyYXRpb24ubG9hZGVyQ2xpZW50Rm9y
TWFpbkZyYW1lKTsKLSAgICBjb25maWd1cmF0aW9uLnZpc2l0ZWRMaW5rU3RvcmUgPSAmV2ViVmlz
aXRlZExpbmtTdG9yZTo6c2hhcmVkKCk7CisgICAgY29uZmlndXJhdGlvbi52aXNpdGVkTGlua1N0
b3JlID0gJldlYlZpc2l0ZWRMaW5rU3RvcmU6OnNpbmdsZXRvbigpOwogCiAgICAgbV9wYWdlID0g
bmV3IFBhZ2UoY29uZmlndXJhdGlvbik7CiAgICAgcHJvdmlkZUdlb2xvY2F0aW9uVG8obV9wYWdl
LCBuZXcgV2ViR2VvbG9jYXRpb25DbGllbnQodGhpcykpOwpAQCAtNjQ2NCw3ICs2NDY0LDcgQEAg
SFJFU1VMVCBXZWJWaWV3OjpoaXN0b3J5RGVsZWdhdGUoSVdlYkhpc3RvcnlEZWxlZ2F0ZSoqIGhp
c3RvcnlEZWxlZ2F0ZSkKIAogSFJFU1VMVCBXZWJWaWV3OjphZGRWaXNpdGVkTGlua3MoQlNUUiog
dmlzaXRlZFVSTHMsIHVuc2lnbmVkIHZpc2l0ZWRVUkxDb3VudCkKIHsKLSAgICBhdXRvJiB2aXNp
dGVkTGlua1N0b3JlID0gV2ViVmlzaXRlZExpbmtTdG9yZTo6c2hhcmVkKCk7CisgICAgYXV0byYg
dmlzaXRlZExpbmtTdG9yZSA9IFdlYlZpc2l0ZWRMaW5rU3RvcmU6OnNpbmdsZXRvbigpOwogICAg
IFBhZ2VHcm91cCYgZ3JvdXAgPSBjb3JlKHRoaXMpLT5ncm91cCgpOwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2aXNpdGVkVVJMQ291bnQ7ICsraSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCA4NWE5
MDAwODc5ZDQyOGY0Yjc1ZTJmMDczMmJmZmE3MmNkYjUxNGZkLi45ZTU5ZWJlM2ExZjVmM2U5YjBm
MzIwYTdiMDM5MTYwM2ZiZWUxNTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcApAQCAtNDcsNyArNDcsNyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLURhdGFiYXNlUHJvY2VzcyYg
RGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKQorRGF0YWJhc2VQcm9jZXNzJiBEYXRhYmFzZVByb2Nl
c3M6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERhdGFiYXNlUHJv
Y2Vzcz4gZGF0YWJhc2VQcm9jZXNzOwogICAgIHJldHVybiBkYXRhYmFzZVByb2Nlc3M7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXgg
YjJiMjRlZWExM2ZmYjgxZjNjZjc5MDQ3ZGZjNzAxODQ0M2Y1YWExNi4uNmVhZWVkZmFiNWQ2N2Ji
YmI5MjQ1OGQwMWQxYjdiODcwM2NiMWYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAtNDgsNyArNDgsNyBAQCBjbGFzcyBEYXRh
YmFzZVByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBwdWJsaWMgV2ViT3JpZ2luRGF0YU1h
bmFnZXJTdXBwbGVtZQogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlUHJvY2Vzcyk7
CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz47CiBwdWJs
aWM6Ci0gICAgc3RhdGljIERhdGFiYXNlUHJvY2VzcyYgc2hhcmVkKCk7CisgICAgc3RhdGljIERh
dGFiYXNlUHJvY2VzcyYgc2luZ2xldG9uKCk7CiAgICAgfkRhdGFiYXNlUHJvY2VzcygpOwogCiAg
ICAgY29uc3QgU3RyaW5nJiBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRhYmFzZVByb2Nlc3NJREJDb25uZWN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvRGF0YWJhc2VQ
cm9jZXNzSURCQ29ubmVjdGlvbi5jcHAKaW5kZXggOGJkMDZiM2M5MWU4Y2NiYzAyMGJkOWEwNTli
ZTg4YmJlZWFmYWZiZC4uNjAzNTg4MDY3Njk3OWVmZDgyMWZlOTFhZjg4MWI4NTZkYzJmNDk4NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9EYXRh
YmFzZVByb2Nlc3NJREJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvSW5kZXhlZERCL0RhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb24uY3BwCkBAIC03
MSw3ICs3MSw3IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbjo6ZGlzY29ubmVj
dGVkRnJvbVdlYlByb2Nlc3MoKQogCiB2b2lkIERhdGFiYXNlUHJvY2Vzc0lEQkNvbm5lY3Rpb246
OmVzdGFibGlzaENvbm5lY3Rpb24oY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFNl
Y3VyaXR5T3JpZ2luRGF0YSYgb3BlbmluZ09yaWdpbiwgY29uc3QgU2VjdXJpdHlPcmlnaW5EYXRh
JiBtYWluRnJhbWVPcmlnaW4pCiB7Ci0gICAgbV91bmlxdWVJREJEYXRhYmFzZSA9IERhdGFiYXNl
UHJvY2Vzczo6c2hhcmVkKCkuZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShVbmlxdWVJREJE
YXRhYmFzZUlkZW50aWZpZXIoZGF0YWJhc2VOYW1lLCBvcGVuaW5nT3JpZ2luLCBtYWluRnJhbWVP
cmlnaW4pKTsKKyAgICBtX3VuaXF1ZUlEQkRhdGFiYXNlID0gRGF0YWJhc2VQcm9jZXNzOjpzaW5n
bGV0b24oKS5nZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllcihkYXRhYmFzZU5hbWUsIG9wZW5pbmdPcmlnaW4sIG1haW5GcmFtZU9yaWdpbikpOwog
ICAgIG1fdW5pcXVlSURCRGF0YWJhc2UtPnJlZ2lzdGVyQ29ubmVjdGlvbigqdGhpcyk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9JbmRleGVkREIvVW5p
cXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4
ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggYjMwMTIyNWEwYTBiYmJjNTRjMmJmYmIz
ZTEyYTg4ZjE1MDE2NGYxNi4uMTVjN2YxMWRjMDcyN2M3OGZhOWEzNmQ3MGIyNWZkOTdlYTY1Mjdh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0luZGV4ZWREQi9V
bmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNz
L0luZGV4ZWREQi9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVW5pcXVl
SURCRGF0YWJhc2U6OlVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IFVuaXF1ZUlEQkRhdGFiYXNlSWRl
bnRpZmllciYgaWRlbnRpZmkKICAgICAvLyBFYWNoIHVuaXF1ZSBJbmRleGVkIERhdGFiYXNlIGV4
aXN0cyBpbiBhIGRpcmVjdG9yeSBuYW1lZCBmb3IgdGhlIGRhdGFiYXNlLCB3aGljaCBleGlzdHMg
aW4gYSBkaXJlY3RvcnkgcmVwcmVzZW50aW5nIGl0cyBvcGVuaW5nIG9yaWdpbi4KICAgICBtX2Rh
dGFiYXNlUmVsYXRpdmVEaXJlY3RvcnkgPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJh
c2VGaWxlbmFtZUlkZW50aWZpZXIoaWRlbnRpZmllci5vcGVuaW5nT3JpZ2luKCkpLCBmaWxlbmFt
ZUZvckRhdGFiYXNlTmFtZSgpKTsKIAotICAgIERhdGFiYXNlUHJvY2Vzczo6c2hhcmVkKCkuZW5z
dXJlSW5kZXhlZERhdGFiYXNlUmVsYXRpdmVQYXRoRXhpc3RzKG1fZGF0YWJhc2VSZWxhdGl2ZURp
cmVjdG9yeSk7CisgICAgRGF0YWJhc2VQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVJbmRleGVk
RGF0YWJhc2VSZWxhdGl2ZVBhdGhFeGlzdHMobV9kYXRhYmFzZVJlbGF0aXZlRGlyZWN0b3J5KTsK
IH0KIAogVW5pcXVlSURCRGF0YWJhc2U6On5VbmlxdWVJREJEYXRhYmFzZSgpCkBAIC0xMTgsNyAr
MTE4LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6dW5yZWdpc3RlckNvbm5lY3Rpb24oRGF0
YWJhc2VQcm9jZXNzSURCQ29ubmVjdGlvbiYgY29ubmUKIAogICAgIGlmIChtX2Nvbm5lY3Rpb25z
LmlzRW1wdHkoKSAmJiBtX3BlbmRpbmdUcmFuc2FjdGlvblJvbGxiYWNrcy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgc2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNo
dXRkb3duKTsKLSAgICAgICAgRGF0YWJhc2VQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVVbmlxdWVJ
REJEYXRhYmFzZSgqdGhpcyk7CisgICAgICAgIERhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCku
cmVtb3ZlVW5pcXVlSURCRGF0YWJhc2UoKnRoaXMpOwogICAgIH0KIH0KIApAQCAtMTEyNSw3ICsx
MTI1LDcgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6ZmluYWxpemVSb2xsYmFjayhjb25zdCBX
ZWJLaXQ6OklEQklkZW50aWZpZXImIHRyYW5zYWN0aW8KICAgICAgICAgcmVzZXRUcmFuc2FjdGlv
bih0cmFuc2FjdGlvbklkLCBbdGhpcywgdHJhbnNhY3Rpb25JZF0oYm9vbCkgewogICAgICAgICAg
ICAgaWYgKG1fYWNjZXB0aW5nTmV3UmVxdWVzdHMgJiYgbV9jb25uZWN0aW9ucy5pc0VtcHR5KCkg
JiYgbV9wZW5kaW5nVHJhbnNhY3Rpb25Sb2xsYmFja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICAgICAgc2h1dGRvd24oVW5pcXVlSURCRGF0YWJhc2VTaHV0ZG93blR5cGU6Ok5vcm1hbFNodXRk
b3duKTsKLSAgICAgICAgICAgICAgICBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZVVu
aXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBEYXRhYmFzZVByb2Nlc3M6
OnNpbmdsZXRvbigpLnJlbW92ZVVuaXF1ZUlEQkRhdGFiYXNlKCp0aGlzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMTM0LDcgKzExMzQsNyBAQCB2b2lkIFVuaXF1
ZUlEQkRhdGFiYXNlOjpmaW5hbGl6ZVJvbGxiYWNrKGNvbnN0IFdlYktpdDo6SURCSWRlbnRpZmll
ciYgdHJhbnNhY3RpbwogU3RyaW5nIFVuaXF1ZUlEQkRhdGFiYXNlOjphYnNvbHV0ZURhdGFiYXNl
RGlyZWN0b3J5KCkgY29uc3QKIHsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOwotICAg
IHJldHVybiBEYXRhYmFzZVByb2Nlc3M6OnNoYXJlZCgpLmFic29sdXRlSW5kZXhlZERhdGFiYXNl
UGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChtX2RhdGFiYXNlUmVsYXRpdmVEaXJlY3Rvcnkp
OworICAgIHJldHVybiBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpLmFic29sdXRlSW5kZXhl
ZERhdGFiYXNlUGF0aEZyb21EYXRhYmFzZVJlbGF0aXZlUGF0aChtX2RhdGFiYXNlUmVsYXRpdmVE
aXJlY3RvcnkpOwogfQogCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpwb3N0TWFpblRocmVhZFRh
c2soc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gdGFzaywgRGF0YWJhc2VUYXNrVHlwZSB0YXNr
VHlwZSkKQEAgLTExODksNyArMTE4OSw3IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnBvc3RE
YXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRyPEFzeW5jVGFzaz4gdGFzaywgRGF0YWJhCiAgICAg
bV9kYXRhYmFzZVRhc2tzLmFwcGVuZChXVEY6Om1vdmUodGFzaykpOwogCiAgICAgUmVmUHRyPFVu
aXF1ZUlEQkRhdGFiYXNlPiBkYXRhYmFzZSh0aGlzKTsKLSAgICBEYXRhYmFzZVByb2Nlc3M6OnNo
YXJlZCgpLnF1ZXVlKCkuZGlzcGF0Y2goW2RhdGFiYXNlXSB7CisgICAgRGF0YWJhc2VQcm9jZXNz
OjpzaW5nbGV0b24oKS5xdWV1ZSgpLmRpc3BhdGNoKFtkYXRhYmFzZV0gewogICAgICAgICBkYXRh
YmFzZS0+cGVyZm9ybU5leHREYXRhYmFzZVRhc2soKTsKICAgICB9KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3Ry
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9i
UmVnaXN0cnkuY3BwCmluZGV4IGM2MDE4OGM4NGMyOWM2YmY2ODc3MjFkNzQyNDJjNGFjMjZkOGMz
YzcuLmVhNTIwYTlhZjZiNGJkNTU3OTM1YmE0NDE5ZjUyMjQzNzc1YWE2ZmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0ZpbGVBUEkvTmV0d29ya0Jsb2JSZWdpc3Ry
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3Jr
QmxvYlJlZ2lzdHJ5LmNwcApAQCAtMzksNyArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLU5ldHdvcmtCbG9iUmVnaXN0cnkmIE5ldHdvcmtC
bG9iUmVnaXN0cnk6OnNoYXJlZCgpCitOZXR3b3JrQmxvYlJlZ2lzdHJ5JiBOZXR3b3JrQmxvYlJl
Z2lzdHJ5OjpzaW5nbGV0b24oKQogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE5ldHdvcmtCbG9iUmVnaXN0cnk+IHJlZ2lzdHJ5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvRmlsZUFQSS9OZXR3b3Jr
QmxvYlJlZ2lzdHJ5LmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05l
dHdvcmtCbG9iUmVnaXN0cnkuaAppbmRleCBlNWRiNjNlMzhkY2ZiZmJlYWRmNzEyNjJjOTZkYmM5
ZWJlNjUyYzE3Li4wMDMwZTBjMGVlNTgyNTM5Njc3Y2ViNGU4YmE5YWE5ZjJjODU5NWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05ldHdvcmtCbG9i
UmVnaXN0cnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9GaWxlQVBJL05l
dHdvcmtCbG9iUmVnaXN0cnkuaApAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBOZXR3b3JrQmxvYlJl
Z2lzdHJ5IHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKE5ldHdvcmtCbG9iUmVnaXN0cnkpOwogcHVi
bGljOgogICAgIE5ldHdvcmtCbG9iUmVnaXN0cnkoKTsKLSAgICBzdGF0aWMgTmV0d29ya0Jsb2JS
ZWdpc3RyeSYgc2hhcmVkKCk7CisgICAgc3RhdGljIE5ldHdvcmtCbG9iUmVnaXN0cnkmIHNpbmds
ZXRvbigpOwogCiAgICAgdm9pZCByZWdpc3RlckZpbGVCbG9iVVJMKE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKiwgY29uc3QgV2ViQ29yZTo6VVJMJiwgY29uc3QgU3RyaW5nJiBwYXRoLCBQ
YXNzUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsK
ICAgICB2b2lkIHJlZ2lzdGVyQmxvYlVSTChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcyos
IGNvbnN0IFdlYkNvcmU6OlVSTCYsIFZlY3RvcjxXZWJDb3JlOjpCbG9iUGFydD4sIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDQ2
ZGVhYmVhZmJiMzg3ZTQ2YTVkZjMxZGMwYWNjODkxNjM1Y2RkNGIuLjcwYjZhZmQxMzczZmQ1MjNm
ZTk5MzZjZWNiM2QzMWJkMDQ0Yzg4YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
QEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogICAgICAgICBsb2FkZXItPmFib3J0KCk7CiAgICAg
QVNTRVJUKG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5pc0VtcHR5KCkpOwogCi0gICAgTmV0d29y
a0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkuY29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKHRo
aXMpOwotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcyh0aGlzKTsKKyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS5jb25uZWN0aW9uVG9XZWJQcm9jZXNzRGlkQ2xvc2UodGhpcyk7CisgICAgTmV0d29ya1Byb2Nl
c3M6OnNpbmdsZXRvbigpLnJlbW92ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKHRoaXMp
OwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6
U3RyaW5nUmVmZXJlbmNlKQpAQCAtMTE4LDE0ICsxMTgsMTQgQEAgdm9pZCBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6c2NoZWR1bGVSZXNvdXJjZUxvYWQoY29uc3QgTmV0d29ya1Jlc291
cmNlTG8KIHsKICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShsb2FkUGFyYW1ldGVycywgdGhpcyk7CiAgICAgbV9u
ZXR3b3JrUmVzb3VyY2VMb2FkZXJzLmFkZChsb2FkUGFyYW1ldGVycy5pZGVudGlmaWVyLCBsb2Fk
ZXIpOwotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2No
ZWR1bGVyKCkuc2NoZWR1bGVMb2FkZXIobG9hZGVyLmdldCgpKTsKKyAgICBOZXR3b3JrUHJvY2Vz
czo6c2luZ2xldG9uKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlTG9h
ZGVyKGxvYWRlci5nZXQoKSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnBlcmZvcm1TeW5jaHJvbm91c0xvYWQoY29uc3QgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFt
ZXRlcnMmIGxvYWRQYXJhbWV0ZXJzLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKIHsKICAgICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmNyZWF0ZShsb2FkUGFyYW1ldGVycywgdGhpcywgcmVwbHkpOwog
ICAgIG1fbmV0d29ya1Jlc291cmNlTG9hZGVycy5hZGQobG9hZFBhcmFtZXRlcnMuaWRlbnRpZmll
ciwgbG9hZGVyKTsKLSAgICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNl
TG9hZFNjaGVkdWxlcigpLnNjaGVkdWxlTG9hZGVyKGxvYWRlci5nZXQoKSk7CisgICAgTmV0d29y
a1Byb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKS5zY2hl
ZHVsZUxvYWRlcihsb2FkZXIuZ2V0KCkpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpyZW1vdmVMb2FkSWRlbnRpZmllcihSZXNvdXJjZUxvYWRJZGVudGlmaWVyIGlk
ZW50aWZpZXIpCkBAIC0xNzYsMTggKzE3NiwxOSBAQCBzdGF0aWMgTmV0d29ya1N0b3JhZ2VTZXNz
aW9uJiBzdG9yYWdlU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogdm9pZCBOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6c3RhcnREb3dubG9hZChTZXNzaW9uSUQsIHVpbnQ2NF90IGRv
d25sb2FkSUQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBGSVhN
RTogRG8gc29tZXRoaW5nIHdpdGggdGhlIHNlc3Npb24gSUQuCi0gICAgTmV0d29ya1Byb2Nlc3M6
OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQoZG93bmxvYWRJRCwgcmVx
dWVzdCk7CisgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmRvd25sb2FkTWFuYWdlcigp
LnN0YXJ0RG93bmxvYWQoZG93bmxvYWRJRCwgcmVxdWVzdCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZCh1
aW50NjRfdCBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciwgdWludDY0X3QgZG93bmxvYWRJRCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKIHsKKyAgICBhdXRvJiBuZXR3b3JrUHJvY2VzcyA9IE5ldHdvcmtQcm9jZXNzOjpz
aW5nbGV0b24oKTsKICAgICBpZiAoIW1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyKSB7Ci0gICAg
ICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25s
b2FkKGRvd25sb2FkSUQsIHJlcXVlc3QpOworICAgICAgICBuZXR3b3JrUHJvY2Vzcy5kb3dubG9h
ZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKGRvd25sb2FkSUQsIHJlcXVlc3QpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIgPSBtX25l
dHdvcmtSZXNvdXJjZUxvYWRlcnMuZ2V0KG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyKTsKLSAg
ICBOZXR3b3JrUHJvY2Vzczo6c2hhcmVkKCkuZG93bmxvYWRNYW5hZ2VyKCkuY29udmVydEhhbmRs
ZVRvRG93bmxvYWQoZG93bmxvYWRJRCwgbG9hZGVyLT5oYW5kbGUoKSwgcmVxdWVzdCwgcmVzcG9u
c2UpOworICAgIG5ldHdvcmtQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVU
b0Rvd25sb2FkKGRvd25sb2FkSUQsIGxvYWRlci0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNl
KTsKIAogICAgIC8vIFVuYmxvY2sgdGhlIFVSTCBjb25uZWN0aW9uIG9wZXJhdGlvbiBxdWV1ZS4K
ICAgICBsb2FkZXItPmhhbmRsZSgpLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwpAQCAt
MjI5LDMyICsyMzAsMzIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVn
aXN0ZXJGaWxlQmxvYlVSTChjb25zdCBVUkwmIHVybCwgY29uc3QgU3QKIHsKICAgICBSZWZQdHI8
U2FuZGJveEV4dGVuc2lvbj4gZXh0ZW5zaW9uID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlKGV4
dGVuc2lvbkhhbmRsZSk7CiAKLSAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdp
c3RlckZpbGVCbG9iVVJMKHRoaXMsIHVybCwgcGF0aCwgZXh0ZW5zaW9uLnJlbGVhc2UoKSwgY29u
dGVudFR5cGUpOworICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVy
RmlsZUJsb2JVUkwodGhpcywgdXJsLCBwYXRoLCBleHRlbnNpb24ucmVsZWFzZSgpLCBjb250ZW50
VHlwZSk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlZ2lzdGVy
QmxvYlVSTChjb25zdCBVUkwmIHVybCwgVmVjdG9yPEJsb2JQYXJ0PiBibG9iUGFydHMsIGNvbnN0
IFN0cmluZyYgY29udGVudFR5cGUpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVk
KCkucmVnaXN0ZXJCbG9iVVJMKHRoaXMsIHVybCwgV1RGOjptb3ZlKGJsb2JQYXJ0cyksIGNvbnRl
bnRUeXBlKTsKKyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5yZWdpc3RlckJs
b2JVUkwodGhpcywgdXJsLCBXVEY6Om1vdmUoYmxvYlBhcnRzKSwgY29udGVudFR5cGUpOwogfQog
CiB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWdpc3RlckJsb2JVUkxGcm9t
VVJMKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VSTCkKIHsKLSAgICBOZXR3b3JrQmxv
YlJlZ2lzdHJ5OjpzaGFyZWQoKS5yZWdpc3RlckJsb2JVUkwodGhpcywgdXJsLCBzcmNVUkwpOwor
ICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVyQmxvYlVSTCh0aGlz
LCB1cmwsIHNyY1VSTCk7CiB9CiAKIHZvaWQgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBVUkwmIHNyY1VS
TCwgaW50NjRfdCBzdGFydCwgaW50NjRfdCBlbmQpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3Ry
eTo6c2hhcmVkKCkucmVnaXN0ZXJCbG9iVVJMRm9yU2xpY2UodGhpcywgdXJsLCBzcmNVUkwsIHN0
YXJ0LCBlbmQpOworICAgIE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNpbmdsZXRvbigpLnJlZ2lzdGVy
QmxvYlVSTEZvclNsaWNlKHRoaXMsIHVybCwgc3JjVVJMLCBzdGFydCwgZW5kKTsKIH0KIAogdm9p
ZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3Qg
VVJMJiB1cmwpCiB7Ci0gICAgTmV0d29ya0Jsb2JSZWdpc3RyeTo6c2hhcmVkKCkudW5yZWdpc3Rl
ckJsb2JVUkwodGhpcywgdXJsKTsKKyAgICBOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24o
KS51bnJlZ2lzdGVyQmxvYlVSTCh0aGlzLCB1cmwpOwogfQogCiB2b2lkIE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpibG9iU2l6ZShjb25zdCBVUkwmIHVybCwgdWludDY0X3QmIHJlc3Vs
dFNpemUpCiB7Ci0gICAgcmVzdWx0U2l6ZSA9IE5ldHdvcmtCbG9iUmVnaXN0cnk6OnNoYXJlZCgp
LmJsb2JTaXplKHRoaXMsIHVybCk7CisgICAgcmVzdWx0U2l6ZSA9IE5ldHdvcmtCbG9iUmVnaXN0
cnk6OnNpbmdsZXRvbigpLmJsb2JTaXplKHRoaXMsIHVybCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCmluZGV4IDkwOWFmMGU2MDc2Y2EyNWRlZGNhOTRiZDlhZTg0NTRiNTVjZTk0OWYuLjY5
YTYzODM2NWUxZjUwOTQzNTU5NjdkMTc2ZDdiZmVmNDQwNjQzODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTYwLDcgKzYwLDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1OZXR3
b3JrUHJvY2VzcyYgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpCitOZXR3b3JrUHJvY2VzcyYgTmV0
d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE5l
dHdvcmtQcm9jZXNzPiBuZXR3b3JrUHJvY2VzczsKICAgICByZXR1cm4gbmV0d29ya1Byb2Nlc3M7
CkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6aW5pdGlhbGl6ZUNvbm5l
Y3Rpb24oSVBDOjpDb25uZWN0aW9uKiBjb25uZWN0aW9uKQogICAgIENoaWxkUHJvY2Vzczo6aW5p
dGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVjdGlvbik7CiAKICNpZiBFTkFCTEUoU0VDX0lURU1fU0hJ
TSkKLSAgICBTZWNJdGVtU2hpbTo6c2hhcmVkKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24oY29ubmVj
dGlvbik7CisgICAgU2VjSXRlbVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxpemVDb25uZWN0aW9u
KGNvbm5lY3Rpb24pOwogI2VuZGlmCiAKICAgICBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdXBwbGVtZW50cy5iZWdpbigpOwpAQCAtMjg4LDE0ICsy
ODgsMTUgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0Q2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVz
dEV2YWx1YXRpb24oYm9vbCB2YWx1ZSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6Z2V0TmV0d29y
a1Byb2Nlc3NTdGF0aXN0aWNzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAgTmV0d29ya1Jl
c291cmNlTG9hZFNjaGVkdWxlciYgc2NoZWR1bGVyID0gTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtSZXNvdXJjZUxvYWRTY2hlZHVsZXIoKTsKKyAgICBOZXR3b3JrUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyJiBzY2hlZHVsZXIgPSBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkubmV0d29y
a1Jlc291cmNlTG9hZFNjaGVkdWxlcigpOwogCiAgICAgU3RhdGlzdGljc0RhdGEgZGF0YTsKIAor
ICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpOwog
ICAgIGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJMb2Fkc1BlbmRpbmdDb3VudCIsIHNjaGVk
dWxlci5sb2Fkc1BlbmRpbmdDb3VudCgpKTsKICAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiTG9hZHNBY3RpdmVDb3VudCIsIHNjaGVkdWxlci5sb2Fkc0FjdGl2ZUNvdW50KCkpOwotICAg
IGRhdGEuc3RhdGlzdGljc051bWJlcnMuc2V0KCJEb3dubG9hZHNBY3RpdmVDb3VudCIsIHNoYXJl
ZCgpLmRvd25sb2FkTWFuYWdlcigpLmFjdGl2ZURvd25sb2FkQ291bnQoKSk7Ci0gICAgZGF0YS5z
dGF0aXN0aWNzTnVtYmVycy5zZXQoIk91dHN0YW5kaW5nQXV0aGVudGljYXRpb25DaGFsbGVuZ2Vz
Q291bnQiLCBzaGFyZWQoKS5hdXRoZW50aWNhdGlvbk1hbmFnZXIoKS5vdXRzdGFuZGluZ0F1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlQ291bnQoKSk7CisgICAgZGF0YS5zdGF0aXN0aWNzTnVtYmVycy5z
ZXQoIkRvd25sb2Fkc0FjdGl2ZUNvdW50IiwgbmV0d29ya1Byb2Nlc3MuZG93bmxvYWRNYW5hZ2Vy
KCkuYWN0aXZlRG93bmxvYWRDb3VudCgpKTsKKyAgICBkYXRhLnN0YXRpc3RpY3NOdW1iZXJzLnNl
dCgiT3V0c3RhbmRpbmdBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXNDb3VudCIsIG5ldHdvcmtQcm9j
ZXNzLmF1dGhlbnRpY2F0aW9uTWFuYWdlcigpLm91dHN0YW5kaW5nQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VDb3VudCgpKTsKIAogICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlByb2Nlc3NQb29sOjpEaWRHZXRTdGF0aXN0aWNzKGRhdGEsIGNhbGxiYWNrSUQp
LCAwKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCmluZGV4IGQ1N2Y3NTFhZWI2MTg0YzlmMWZhMTEwYjI4ZjM3ZjIxNjUwMzExZjYuLmFkMWUy
OTFkNDYzNjBhOTJhYmJiZTZkYTc1N2M2NzA5MWVkOTI3MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtNTMsNyArNTMsNyBAQCBjbGFz
cyBOZXR3b3JrUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MsIHByaXZhdGUgRG93bmxvYWRN
YW5hZ2VyOjpDbGllbnQgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxOZXR3b3Jr
UHJvY2Vzcz47CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPERvd25sb2FkTWFuYWdl
cj47CiBwdWJsaWM6Ci0gICAgc3RhdGljIE5ldHdvcmtQcm9jZXNzJiBzaGFyZWQoKTsKKyAgICBz
dGF0aWMgTmV0d29ya1Byb2Nlc3MmIHNpbmdsZXRvbigpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiAgICAgVCogc3VwcGxlbWVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAppbmRleCBkYWM3NWFmNzIx
NjUyNTcxMmNmYTVlNTAzY2FlZjJmMjMwZDRkZWM5Li5jZjdhNDcwODY1NDU1NTQ1NWFlNDg5YTkx
OGY5NTkyM2ExOGE2NzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtS
ZXNvdXJjZUxvYWRQYXJhbWV0ZXJzCiAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdCgpLmh0dHBCb2R5
KCkpIHsKICAgICAgICAgZm9yIChjb25zdCBGb3JtRGF0YUVsZW1lbnQmIGVsZW1lbnQgOiBvcmln
aW5hbFJlcXVlc3QoKS5odHRwQm9keSgpLT5lbGVtZW50cygpKSB7CiAgICAgICAgICAgICBpZiAo
ZWxlbWVudC5tX3R5cGUgPT0gRm9ybURhdGFFbGVtZW50OjpUeXBlOjpFbmNvZGVkQmxvYikKLSAg
ICAgICAgICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVuZFZlY3RvcihOZXR3b3JrQmxvYlJl
Z2lzdHJ5OjpzaGFyZWQoKS5maWxlc0luQmxvYihjb25uZWN0aW9uLCBlbGVtZW50Lm1fdXJsKSk7
CisgICAgICAgICAgICAgICAgbV9maWxlUmVmZXJlbmNlcy5hcHBlbmRWZWN0b3IoTmV0d29ya0Js
b2JSZWdpc3RyeTo6c2luZ2xldG9uKCkuZmlsZXNJbkJsb2IoY29ubmVjdGlvbiwgZWxlbWVudC5t
X3VybCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG9yaWdpbmFsUmVxdWVzdCgpLnVy
bCgpLnByb3RvY29sSXMoImJsb2IiKSkgewogICAgICAgICBBU1NFUlQoIW1fcGFyYW1ldGVycy5y
ZXNvdXJjZVNhbmRib3hFeHRlbnNpb24pOwotICAgICAgICBtX2ZpbGVSZWZlcmVuY2VzLmFwcGVu
ZFZlY3RvcihOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaGFyZWQoKS5maWxlc0luQmxvYihjb25uZWN0
aW9uLCBvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpOworICAgICAgICBtX2ZpbGVSZWZlcmVuY2Vz
LmFwcGVuZFZlY3RvcihOZXR3b3JrQmxvYlJlZ2lzdHJ5OjpzaW5nbGV0b24oKS5maWxlc0luQmxv
Yihjb25uZWN0aW9uLCBvcmlnaW5hbFJlcXVlc3QoKS51cmwoKSkpOwogICAgIH0KIAogICAgIGlm
IChzeW5jaHJvbm91c1JlcGx5KQpAQCAtMTM1LDEzICsxMzUsMTMgQEAgdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnN0YXJ0KCkKICAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gb3JpZ2luYWxSZXF1
ZXN0KCk7CiAKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBpZiAoIU5ldHdvcmtDYWNo
ZTo6c2hhcmVkKCkuaXNFbmFibGVkKCkgfHwgc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkgewor
ICAgIGlmICghTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSB8fCBzZXNzaW9u
SUQoKS5pc0VwaGVtZXJhbCgpKSB7CiAgICAgICAgIHN0YXJ0TmV0d29ya0xvYWQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxv
YWRlcih0aGlzKTsKLSAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLnJldHJpZXZlKG9yaWdpbmFs
UmVxdWVzdCgpLCBbbG9hZGVyXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4g
ZW50cnkpIHsKKyAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJldHJpZXZlKG9yaWdpbmFs
UmVxdWVzdCgpLCBbbG9hZGVyXShzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya0NhY2hlOjpFbnRyeT4g
ZW50cnkpIHsKICAgICAgICAgaWYgKGxvYWRlci0+aGFzT25lUmVmKCkpIHsKICAgICAgICAgICAg
IC8vIFRoZSBsb2FkZXIgaGFzIGJlZW4gYWJvcnRlZCBhbmQgaXMgb25seSBoZWxkIGFsaXZlIGJ5
IHRoaXMgbGFtYmRhLgogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc1LDcgKzE3NSw3IEBAIHZv
aWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydE5ldHdvcmtMb2FkKCkKICAgICAgICAgbV9i
dWZmZXJlZERhdGEgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOwogCiAjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkuaXNFbmFi
bGVkKCkpCisgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpCiAg
ICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNy
ZWF0ZSgpOwogI2VuZGlmCiAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6Y2xlYW51cCgpCiAKICAgICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsK
IAotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1
bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMpOworICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24o
KS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMpOwogCiAg
ICAgbV9oYW5kbGUgPSBudWxscHRyOwogCkBAIC0yNTcsNyArMjU3LDcgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIGNvbnMKICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewogICAgICAg
ICBib29sIHZhbGlkYXRpb25TdWNjZWVkZWQgPSBtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
PT0gMzA0OyAvLyAzMDQgTm90IE1vZGlmaWVkCiAgICAgICAgIGlmICh2YWxpZGF0aW9uU3VjY2Vl
ZGVkKQotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaGFyZWQoKS51cGRhdGUob3JpZ2luYWxS
ZXF1ZXN0KCksICptX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uLCBtX3Jlc3BvbnNlKTsKKyAgICAg
ICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkudXBkYXRlKG9yaWdpbmFsUmVxdWVzdCgp
LCAqbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbiwgbV9yZXNwb25zZSk7CiAgICAgICAgIGlmICgh
dmFsaWRhdGlvblN1Y2NlZWRlZCB8fCBpc0NvbmRpdGlvbmFsUmVxdWVzdChvcmlnaW5hbFJlcXVl
c3QoKSkpCiAgICAgICAgICAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbnVsbHB0cjsK
ICAgICB9CkBAIC0zMTgsNyArMzE4LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91YmxlIGZpbmkKICAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKIAogI2lmIEVOQUJMRShO
RVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmlzRW5hYmxlZCgp
KSB7CisgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKICAg
ICAgICAgaWYgKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pIHsKICAgICAgICAgICAgIC8vIDMw
NCBOb3QgTW9kaWZpZWQKICAgICAgICAgICAgIEFTU0VSVChtX3Jlc3BvbnNlLmh0dHBTdGF0dXND
b2RlKCkgPT0gMzA0KTsKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkRmluaXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmlu
aQogCiAgICAgICAgIGJvb2wgaXNQcml2YXRlID0gc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsK
ICAgICAgICAgaWYgKGhhc0NhY2hlYWJsZVJlZGlyZWN0ICYmICFpc1ByaXZhdGUpCi0gICAgICAg
ICAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLnN0b3JlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3Jl
c3BvbnNlLCBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBO
ZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3Jlc3Bv
bnNlLCBtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLnJlbGVhc2UoKSk7CiAgICAgfQogI2VuZGlmCiAK
QEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFJlc291cmNlSGFuZGxlKiBoYQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgTmV0d29ya1Byb2Nlc3M6OnNoYXJlZCgpLmF1dGhlbnRpY2F0aW9u
TWFuYWdlcigpLmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShtX3BhcmFtZXRlcnMu
d2ViUGFnZUlELCBtX3BhcmFtZXRlcnMud2ViRnJhbWVJRCwgY2hhbGxlbmdlKTsKKyAgICBOZXR3
b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuYXV0aGVudGljYXRpb25NYW5hZ2VyKCkuZGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fcGFyYW1ldGVycy53ZWJQYWdlSUQsIG1fcGFyYW1l
dGVycy53ZWJGcmFtZUlELCBjaGFsbGVuZ2UpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpAQCAtNjMxLDcgKzYzMSw3IEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlQXN5bmMoUmVzb3VyY2VICiAKICAgICAvLyBIYW5kbGUgc2VydmVyIHRydXN0IGV2
YWx1YXRpb24gYXQgcGxhdGZvcm0tbGV2ZWwgaWYgcmVxdWVzdGVkLCBmb3IgcGVyZm9ybWFuY2Ug
cmVhc29ucy4KICAgICBpZiAocHJvdGVjdGlvblNwYWNlLmF1dGhlbnRpY2F0aW9uU2NoZW1lKCkg
PT0gUHJvdGVjdGlvblNwYWNlQXV0aGVudGljYXRpb25TY2hlbWVTZXJ2ZXJUcnVzdEV2YWx1YXRp
b25SZXF1ZXN0ZWQKLSAgICAgICAgJiYgIU5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5jYW5IYW5k
bGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbigpKSB7CisgICAgICAgICYmICFOZXR3b3JrUHJv
Y2Vzczo6c2luZ2xldG9uKCkuY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRpb24oKSkg
ewogICAgICAgICBjb250aW51ZUNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2Uo
ZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5jcHAKaW5kZXggMjcyMDIwY2NjOWVk
NThjZmZmZGNjNzEwYzJhODJiNmY4YjFlYmQ2My4uYzFkYWNjMTJmMzE0YjU3NzA2MTNiMjdkMTQ4
NGM4ZWM5YzY0ZWE3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
Y2FjaGUvTmV0d29ya0NhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9jYWNoZS9OZXR3b3JrQ2FjaGUuY3BwCkBAIC00Myw3ICs0Myw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1OZXR3b3JrQ2FjaGUmIE5ldHdvcmtDYWNoZTo6c2hhcmVkKCkKK05ldHdvcmtD
YWNoZSYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxOZXR3b3JrQ2FjaGU+IGluc3RhbmNlOwogICAgIHJldHVybiBpbnN0YW5jZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5o
IGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKaW5k
ZXggNTdkYTU1Mjk5ZjM3MWU0NTRhNDM0YmVmNTEzMThhOWQ4MmE5NzVmMC4uNTgzY2EwMTk4NmJj
ZGY1MTYxN2Y4ZDUyOTNlZGFiNWI3MmViYWJiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFt
ZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBOZXR3b3JrQ2FjaGUgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKE5ldHdvcmtDYWNoZSk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIE5ldHdvcmtDYWNoZSYg
c2hhcmVkKCk7CisgICAgc3RhdGljIE5ldHdvcmtDYWNoZSYgc2luZ2xldG9uKCk7CiAKICAgICBO
ZXR3b3JrQ2FjaGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvY29jb2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL2NvY29hL05ldHdvcmtQcm9jZXNzQ29jb2EubW0KaW5kZXggMjNmMWQ3ODdmMjMxMjFh
YmEwZjJkNmY4Y2Y4ZTJjNmVkZjNmMGRlMS4uNzYwNDQwOTJjYjE2YTM0NDJjNzZkYmY3NjNiODI2
YmQwYjMwYjkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY29j
b2EvTmV0d29ya1Byb2Nlc3NDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9jb2NvYS9OZXR3b3JrUHJvY2Vzc0NvY29hLm1tCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29u
c3QgTmV0d29ya1Byb2Nlc3NDCiAgICAgaWYgKCFtX2Rpc2tDYWNoZURpcmVjdG9yeS5pc051bGwo
KSkgewogICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjb25zdW1lUGVybWFuZW50bHkocGFyYW1l
dGVycy5kaXNrQ2FjaGVEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwogI2lmIEVOQUJMRShORVRX
T1JLX0NBQ0hFKQotICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2Fj
aGUgJiYgTmV0d29ya0NhY2hlOjpzaGFyZWQoKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0
b3J5KSkgeworICAgICAgICBpZiAocGFyYW1ldGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGUg
JiYgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKG1fZGlza0NhY2hlRGlyZWN0
b3J5KSkgewogICAgICAgICAgICAgUmV0YWluUHRyPE5TVVJMQ2FjaGU+IHVybENhY2hlKGFkb3B0
TlMoW1tOU1VSTENhY2hlIGFsbG9jXSBpbml0V2l0aE1lbW9yeUNhcGFjaXR5OjAgZGlza0NhcGFj
aXR5OjAgZGlza1BhdGg6bmlsXSkpOwogICAgICAgICAgICAgW05TVVJMQ2FjaGUgc2V0U2hhcmVk
VVJMQ2FjaGU6dXJsQ2FjaGUuZ2V0KCldOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTM0LDgg
KzEzNCw5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNo
ZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgICAgIHBhZ2VDYWNoZUNhcGFjaXR5LCB1cmxDYWNoZU1l
bW9yeUNhcGFjaXR5LCB1cmxDYWNoZURpc2tDYXBhY2l0eSk7CiAKICNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLSAgICBpZiAoTmV0d29ya0NhY2hlOjpzaGFyZWQoKS5pc0VuYWJsZWQoKSkgewot
ICAgICAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLnNldE1heGltdW1TaXplKHVybENhY2hlRGlz
a0NhcGFjaXR5KTsKKyAgICBhdXRvJiBuZXR3b3JrQ2FjaGUgPSBOZXR3b3JrQ2FjaGU6OnNpbmds
ZXRvbigpOworICAgIGlmIChuZXR3b3JrQ2FjaGUuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgbmV0
d29ya0NhY2hlLnNldE1heGltdW1TaXplKHVybENhY2hlRGlza0NhcGFjaXR5KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAtMTQ4LDcgKzE0OSw3IEBAIHZvaWQgTmV0d29ya1By
b2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2RlbChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiB2b2lk
IE5ldHdvcmtQcm9jZXNzOjpjbGVhckRpc2tDYWNoZShzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2Nr
Ojp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxl
dGlvbkhhbmRsZXIpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgTmV0d29ya0Nh
Y2hlOjpzaGFyZWQoKS5jbGVhcigpOworICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuY2xl
YXIoKTsKICNlbmRpZgogCiAgICAgaWYgKCFtX2NsZWFyQ2FjaGVEaXNwYXRjaEdyb3VwKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNz
SU9TLm1tIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvaW9zL05ldHdvcmtQcm9jZXNz
SU9TLm1tCmluZGV4IGIyOTlhMzZjMzVhMTg4MjlkMDhhN2JjNWEzYjQzYmY3OTBjMWI3YzEuLjFk
N2UwNTI3Y2Y0MTU2ODFkNjM5MGM0MDE3YTMwMGE2ZDIyODY3NWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2lvcy9OZXR3b3JrUHJvY2Vzc0lPUy5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9pb3MvTmV0d29ya1Byb2Nlc3NJT1MubW0KQEAg
LTgyLDE0ICs4MiwxNCBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpjbGVhckNhY2hlRm9yQWxsT3Jp
Z2lucyh1aW50MzJfdCBjYWNoZXNUb0NsZWFyKQogICAgIGlmIChyZXNvdXJjZUNhY2hlc1RvQ2xl
YXIgPT0gSW5NZW1vcnlSZXNvdXJjZUNhY2hlc09ubHkpCiAgICAgICAgIHJldHVybjsKICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBOZXR3b3JrQ2FjaGU6OnNoYXJlZCgpLmNsZWFyKCk7
CisgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5jbGVhcigpOwogI2VuZGlmCiB9CiAKIHZv
aWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKGNvbnN0
IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogewogI2lmIEVO
QUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0aWFsaXpl
KHRoaXMpOworICAgIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0aWFsaXplKHRoaXMpOwog
I2VuZGlmCiAgICAgcGxhdGZvcm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3NDb2NvYShwYXJhbWV0
ZXJzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9O
ZXR3b3JrUHJvY2Vzc01hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9O
ZXR3b3JrUHJvY2Vzc01hYy5tbQppbmRleCA3MWQwNjNiMWQ3YWEyMjFiYTRiYTc5ZjBiNzQwYTFl
ZDkxNzczMjcyLi5mYWMxMWE0ZjllMjViNzJlZmI3MzE4MGYyYzFmM2NkNTIzYzA0YzllIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvTmV0d29ya1Byb2Nlc3NN
YWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL05ldHdvcmtQcm9j
ZXNzTWFjLm1tCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6cGxhdGZv
cm1Jbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGkKICAg
ICBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKHBhcmFtZXRlcnMpOwogCiAj
aWYgRU5BQkxFKFNFQ19JVEVNX1NISU0pCi0gICAgU2VjSXRlbVNoaW06OnNoYXJlZCgpLmluaXRp
YWxpemUodGhpcyk7CisgICAgU2VjSXRlbVNoaW06OnNpbmdsZXRvbigpLmluaXRpYWxpemUodGhp
cyk7CiAjZW5kaWYKIAogICAgIGlmICghcGFyYW1ldGVycy5odHRwUHJveHkuaXNOdWxsKCkgfHwg
IXBhcmFtZXRlcnMuaHR0cHNQcm94eS5pc051bGwoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbSBiL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL21hYy9SZW1vdGVOZXR3b3JraW5nQ29udGV4dC5tbQpp
bmRleCBhZjU0YjgxYTAyYzA0NTNkZGI5YjdjNzdiMWY5ZGQxNGIzZWUwM2I4Li5iNGQ0MWE1NmM5
MDA3YTcwNTQyOWM4OGZmODE4ZWU4Y2E5ODZiYmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9tYWMvUmVtb3RlTmV0d29ya2luZ0NvbnRleHQubW0KKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvbWFjL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0Lm1t
CkBAIC02Nyw3ICs2Nyw3IEBAIFJldGFpblB0cjxDRkRhdGFSZWY+IFJlbW90ZU5ldHdvcmtpbmdD
b250ZXh0Ojpzb3VyY2VBcHBsaWNhdGlvbkF1ZGl0RGF0YSgpIGNvbnN0CiB7CiAjaWYgUExBVEZP
Uk0oSU9TKQogICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKLSAgICBpZiAoIU5ldHdvcmtQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5nZXRBdWRpdFRva2Vu
KGF1ZGl0VG9rZW4pKQorICAgIGlmICghTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCAoY29u
c3QgVUludDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKICNlbHNlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94
eS5jcHAKaW5kZXggOWRiODFjMWYxYWQ5NjkzMjc1ZjFkM2ExNGM4OTQxNzc2MGE4MjEwNi4uZDlh
OGY2MGYxM2ZmYTQxMDQzNmJkOTdlMjFhZTNhNmMyNGEyYWY4NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcApAQCAt
MTA5LDcgKzEwOSw3IEBAIGJvb2wgUGx1Z2luQ29udHJvbGxlclByb3h5Ojppbml0aWFsaXplKGNv
bnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QCiAgICAgQVNTRVJUKCFtX2lz
SW5pdGlhbGl6aW5nKTsKICAgICBtX2lzSW5pdGlhbGl6aW5nID0gdHJ1ZTsgLy8gQ2Fubm90IHVz
ZSBUZW1wb3JhcnlDaGFuZ2UgaGVyZSwgYmVjYXVzZSB0aGlzIG9iamVjdCBjYW4gYmUgZGVsZXRl
ZCBiZWZvcmUgdGhlIGZ1bmN0aW9uIHJldHVybnMuCiAKLSAgICBtX3BsdWdpbiA9IE5ldHNjYXBl
UGx1Z2luOjpjcmVhdGUoUGx1Z2luUHJvY2Vzczo6c2hhcmVkKCkubmV0c2NhcGVQbHVnaW5Nb2R1
bGUoKSk7CisgICAgbV9wbHVnaW4gPSBOZXRzY2FwZVBsdWdpbjo6Y3JlYXRlKFBsdWdpblByb2Nl
c3M6OnNpbmdsZXRvbigpLm5ldHNjYXBlUGx1Z2luTW9kdWxlKCkpOwogICAgIGlmICghbV9wbHVn
aW4pIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGRlbGV0ZSB0aGUgcGx1Zy1pbiBjb250cm9sbGVy
IHByb3h5IG9iamVjdC4KICAgICAgICAgbV9jb25uZWN0aW9uLT5yZW1vdmVQbHVnaW5Db250cm9s
bGVyUHJveHkodGhpcywgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL1BsdWdpblByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Qcm9jZXNzLmNwcAppbmRleCA1N2E2NmEwNzViMjdkOTYxMzQ5ZGRlYWVmYmI0YzcyMjJjYWUz
NjJlLi40MTA3MDBlMWQ3NTg2ODhlMGNhYTVmY2IwNTY1ODE2MjBjODNmNDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAKQEAgLTQ4LDcgKzQ4
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1Q
bHVnaW5Qcm9jZXNzJiBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKQorUGx1Z2luUHJvY2VzcyYgUGx1
Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8UGx1
Z2luUHJvY2Vzcz4gcGx1Z2luUHJvY2VzczsKICAgICByZXR1cm4gcGx1Z2luUHJvY2VzczsKQEAg
LTcwLDggKzcwLDkgQEAgUGx1Z2luUHJvY2Vzczo6flBsdWdpblByb2Nlc3MoKQogdm9pZCBQbHVn
aW5Qcm9jZXNzOjpsb3dNZW1vcnlIYW5kbGVyKGJvb2wgY3JpdGljYWwpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKGNyaXRpY2FsKTsKLSAgICBpZiAoc2hhcmVkKCkuc2hvdWxkVGVybWluYXRlKCkpCi0g
ICAgICAgIHNoYXJlZCgpLnRlcm1pbmF0ZSgpOworICAgIGF1dG8mIHBsdWdpblByb2Nlc3MgPSBQ
bHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKTsKKyAgICBpZiAocGx1Z2luUHJvY2Vzcy5zaG91bGRU
ZXJtaW5hdGUoKSkKKyAgICAgICAgcGx1Z2luUHJvY2Vzcy50ZXJtaW5hdGUoKTsKIH0KIAogdm9p
ZCBQbHVnaW5Qcm9jZXNzOjppbml0aWFsaXplUHJvY2Vzcyhjb25zdCBDaGlsZFByb2Nlc3NJbml0
aWFsaXphdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpblByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCmluZGV4IDM1NjhkMDlhZWY4ZjkxMTRjMWYxYjdmYjJm
NjcyNzk0N2MxOGY2ZjQuLjAwOWRkNzU5ZTNjOTE0ZDhlZDU5YjZhMGU5MGFiYjMyNTAzYWNmZGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5oCkBAIC01
MCw3ICs1MCw3IEBAIGNsYXNzIFBsdWdpblByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBw
cml2YXRlIFdlYkNvcmU6OkF1ZGlvSGFyZHdhcmVMaXN0ZW5lCiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGx1Z2luUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNzIE5ldmVyRGVzdHJveWVkPFBs
dWdpblByb2Nlc3M+OwogcHVibGljOgotICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNzJiBzaGFyZWQo
KTsKKyAgICBzdGF0aWMgUGx1Z2luUHJvY2VzcyYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHJl
bW92ZVdlYlByb2Nlc3NDb25uZWN0aW9uKFdlYlByb2Nlc3NDb25uZWN0aW9uKik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5j
cHAKaW5kZXggM2E3NGM3ODQyNWEzN2I1ZTJmYjdkNzczMjczZTJhZjhmMGNhMmM0NS4uMGZlMzVk
MDEwZWJlMjNhYjJjOGIxOGQwMzE0OTEyNDkxNWEyNTc1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTEwNiwx
MiArMTA2LDEyIEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OnJlbW92ZVBsdWdpbkNvbnRy
b2xsZXJQcm94eShQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsCiAgICAgbV9jb25uZWN0aW9uID0g
bnVsbHB0cjsKIAogICAgIC8vIFRoaXMgd2lsbCBjYXVzZSB1cyB0byBiZSBkZWxldGVkLiAgICAK
LSAgICBQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVXZWJQcm9jZXNzQ29ubmVjdGlvbih0
aGlzKTsKKyAgICBQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVXZWJQcm9jZXNzQ29u
bmVjdGlvbih0aGlzKTsKIH0KIAogdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xvYmFs
RXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nKQogewotICAgIElQQzo6Q29u
bmVjdGlvbiogY29ubmVjdGlvbiA9IENvbm5lY3Rpb25TdGFjazo6c2hhcmVkKCkuY3VycmVudCgp
OworICAgIElQQzo6Q29ubmVjdGlvbiogY29ubmVjdGlvbiA9IENvbm5lY3Rpb25TdGFjazo6c2lu
Z2xldG9uKCkuY3VycmVudCgpOwogICAgIGlmICghY29ubmVjdGlvbikKICAgICAgICAgcmV0dXJu
OwogCkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6c2V0R2xv
YmFsRXhjZXB0aW9uKGNvbnN0IFN0cmluZyYgZXhjZXB0aW9uU3RyaW5nKQogCiB2b2lkIFdlYlBy
b2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7Ci0gICAgQ29ubmVjdGlvblN0
YWNrOjpDdXJyZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29ubmVjdGlvbihDb25uZWN0aW9u
U3RhY2s6OnNoYXJlZCgpLCAmY29ubmVjdGlvbik7CisgICAgQ29ubmVjdGlvblN0YWNrOjpDdXJy
ZW50Q29ubmVjdGlvblB1c2hlciBjdXJyZW50Q29ubmVjdGlvbihDb25uZWN0aW9uU3RhY2s6OnNp
bmdsZXRvbigpLCAmY29ubmVjdGlvbik7CiAKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgZGlkUmVjZWl2ZVdlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKQEAgLTE0Miw3ICsxNDIsNyBAQCB2b2lkIFdlYlByb2Nl
c3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6TQogCiB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6Ok1lc3NhZ2VEZWNvZGVyJiBk
ZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpNZXNzYWdlRW5jb2Rlcj4mIHJlcGx5RW5jb2Rl
cikKIHsKLSAgICBDb25uZWN0aW9uU3RhY2s6OkN1cnJlbnRDb25uZWN0aW9uUHVzaGVyIGN1cnJl
bnRDb25uZWN0aW9uKENvbm5lY3Rpb25TdGFjazo6c2hhcmVkKCksICZjb25uZWN0aW9uKTsKKyAg
ICBDb25uZWN0aW9uU3RhY2s6OkN1cnJlbnRDb25uZWN0aW9uUHVzaGVyIGN1cnJlbnRDb25uZWN0
aW9uKENvbm5lY3Rpb25TdGFjazo6c2luZ2xldG9uKCksICZjb25uZWN0aW9uKTsKIAogICAgIHVp
bnQ2NF90IGRlc3RpbmF0aW9uSUQgPSBkZWNvZGVyLmRlc3RpbmF0aW9uSUQoKTsKIApAQCAtMTgz
LDcgKzE4Myw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyCiAgICAgcmVwbHktPnNlbmQoKTsK
IAogICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBjbGFtcCBhbnkgdGltZXJzIGR1cmluZyBkZXN0cnVj
dGlvbgotICAgIEFjdGl2aXR5QXNzZXJ0aW9uIGFjdGl2aXR5QXNzZXJ0aW9uKFBsdWdpblByb2Nl
c3M6OnNoYXJlZCgpLmNvbm5lY3Rpb25BY3Rpdml0eSgpKTsKKyAgICBBY3Rpdml0eUFzc2VydGlv
biBhY3Rpdml0eUFzc2VydGlvbihQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb25uZWN0aW9u
QWN0aXZpdHkoKSk7CiAKICAgICBQbHVnaW5Db250cm9sbGVyUHJveHkqIHBsdWdpbkNvbnRyb2xs
ZXJQcm94eSA9IG1fcGx1Z2luQ29udHJvbGxlcnMuZ2V0KHBsdWdpbkluc3RhbmNlSUQpOwogICAg
IApAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBs
dWdpbkludGVybmFsKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYKIHZvaWQgV2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnMmIGNyZWF0aW9uUGFyYW1ldGVycywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nv
bm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJlcGx5PiByZXBseSkKIHsKICAgICAvLyBF
bnN1cmUgd2UgZG9uJ3QgY2xhbXAgYW55IHRpbWVycyBkdXJpbmcgaW5pdGlhbGl6YXRpb24KLSAg
ICBBY3Rpdml0eUFzc2VydGlvbiBhY3Rpdml0eUFzc2VydGlvbihQbHVnaW5Qcm9jZXNzOjpzaGFy
ZWQoKS5jb25uZWN0aW9uQWN0aXZpdHkoKSk7CisgICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZp
dHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5
KCkpOwogCiAgICAgUGx1Z2luQ29udHJvbGxlclByb3h5KiBwbHVnaW5Db250cm9sbGVyUHJveHkg
PSBtX3BsdWdpbkNvbnRyb2xsZXJzLmdldChjcmVhdGlvblBhcmFtZXRlcnMucGx1Z2luSW5zdGFu
Y2VJRCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1Bs
dWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3Mv
bWFjL1BsdWdpbkNvbnRyb2xsZXJQcm94eU1hYy5tbQppbmRleCBmYzU4Nzc2NGEyYTUzYTRmMjQz
NjllZGNkMjk4ZDFkYTg0YzlmNDQ5Li5iMDE1OTI5NGU4OWYwNTFmZTFjYzI2OTIxNDU4ODQzNTE4
MjRhOGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVn
aW5Db250cm9sbGVyUHJveHlNYWMubW0KKysrIGIvU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9tYWMvUGx1Z2luQ29udHJvbGxlclByb3h5TWFjLm1tCkBAIC01MiwxMiArNTIsMTIgQEAgdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5D
b21wbGV4VGV4dElucHV0U3RhdGUKIAogY29uc3QgTWFjaFNlbmRSaWdodCYgUGx1Z2luQ29udHJv
bGxlclByb3h5Ojpjb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKQogewotICAgIHJldHVybiBQ
bHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKTsKKyAg
ICByZXR1cm4gUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2
ZXJQb3J0KCk7CiB9CiAKIHZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpvcGVuUGx1Z2luUHJl
ZmVyZW5jZVBhbmUoKQogewotICAgIFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQcm94eTo6T3BlblBs
dWdpblByZWZlcmVuY2VQYW5lKCksIDApOworICAgIFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlBsdWdpblByb2Nlc3NQ
cm94eTo6T3BlblBsdWdpblByZWZlcmVuY2VQYW5lKCksIDApOwogfQogCiB2b2lkIFBsdWdpbkNv
bnRyb2xsZXJQcm94eTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFy
YW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzKQpAQCAtMTMwLDcgKzEzMCw3IEBAIHZvaWQgUGx1
Z2luQ29udHJvbGxlclByb3h5Ojp1cGRhdGVMYXllckhvc3RpbmdDb250ZXh0KExheWVySG9zdGlu
Z01vZGUgbGF5ZXJIb3N0CiAKICAgICBzd2l0Y2ggKGxheWVySG9zdGluZ01vZGUpIHsKICAgICAg
ICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpJblByb2Nlc3M6Ci0gICAgICAgICAgICBtX2xheWVy
SG9zdGluZ0NvbnRleHQgPSBMYXllckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFBsdWdp
blByb2Nlc3M6OnNoYXJlZCgpLmNvbXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKKyAgICAg
ICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0
ZUZvclBvcnQoUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2
ZXJQb3J0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAjaWYgSEFWRShPVVRfT0ZfUFJPQ0VTU19M
QVlFUl9IT1NUSU5HKQogICAgICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6Ok91dE9mUHJvY2Vz
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblBy
b2Nlc3NNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL21hYy9QbHVnaW5Qcm9j
ZXNzTWFjLm1tCmluZGV4IGU4ZjRlYjAxOGVmZDE0MDUyYjA4MGM4ZWVkMTMyMGY1OWQ1NDNiM2Uu
LjA0MmQ0MTc4YjhlZjI1ZmM2NDBhZDgxZDdkNjIwNmVjMzk5MDI1YmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvbWFjL1BsdWdpblByb2Nlc3NNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9tYWMvUGx1Z2luUHJvY2Vzc01hYy5tbQpAQCAt
MTE0LDcgKzExNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgRnVsbHNjcmVlbldpbmRv
d1RyYWNrZXI6OndpbmRvd1Nob3duKFQgd2luZG93KQogICAgIAogICAgIC8vIElmIHRoaXMgaXMg
dGhlIGZpcnN0IGZ1bGwgc2NyZWVuIHdpbmRvdyB0byBiZSBzaG93biwgbm90aWZ5IHRoZSBVSSBw
cm9jZXNzLgogICAgIGlmICh3aW5kb3dTZXRXYXNFbXB0eSkKLSAgICAgICAgUGx1Z2luUHJvY2Vz
czo6c2hhcmVkKCkuc2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyh0cnVlKTsKKyAgICAgICAg
UGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0RnVsbHNjcmVlbldpbmRvd0lzU2hvd2luZyh0
cnVlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBGdWxsc2NyZWVuV2luZG93VHJh
Y2tlcjo6d2luZG93SGlkZGVuKFQgd2luZG93KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHZvaWQgRnVsbHNjcmVlbldpbmRvd1RyYWNrZXI6OndpbmRvd0hpZGRlbihU
IHdpbmRvdykKIAogICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IGZ1bGwgc2NyZWVuIHdpbmRv
dyB0aGF0IHdhcyB2aXNpYmxlLCBub3RpZnkgdGhlIFVJIHByb2Nlc3MuCiAgICAgaWYgKG1fd2lu
ZG93cy5pc0VtcHR5KCkpCi0gICAgICAgIFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLnNldEZ1bGxz
Y3JlZW5XaW5kb3dJc1Nob3dpbmcoZmFsc2UpOworICAgICAgICBQbHVnaW5Qcm9jZXNzOjpzaW5n
bGV0b24oKS5zZXRGdWxsc2NyZWVuV2luZG93SXNTaG93aW5nKGZhbHNlKTsKIH0KIAogc3RhdGlj
IEZ1bGxzY3JlZW5XaW5kb3dUcmFja2VyJiBmdWxsc2NyZWVuV2luZG93VHJhY2tlcigpCkBAIC0x
OTUsNyArMTk1LDcgQEAgc3RhdGljIHZvaWQgY2FyYm9uV2luZG93SGlkZGVuKFdpbmRvd1JlZiB3
aW5kb3cpCiBzdGF0aWMgYm9vbCBvcGVuQ0ZVUkxSZWYoQ0ZVUkxSZWYgdXJsLCBpbnQzMl90JiBz
dGF0dXMsIENGVVJMUmVmKiBsYXVuY2hlZFVSTCkKIHsKICAgICBTdHJpbmcgbGF1bmNoZWRVUkxT
dHJpbmc7Ci0gICAgaWYgKCFQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5vcGVuVVJMKFVSTCh1cmwp
LnN0cmluZygpLCBzdGF0dXMsIGxhdW5jaGVkVVJMU3RyaW5nKSkKKyAgICBpZiAoIVBsdWdpblBy
b2Nlc3M6OnNpbmdsZXRvbigpLm9wZW5VUkwoVVJMKHVybCkuc3RyaW5nKCksIHN0YXR1cywgbGF1
bmNoZWRVUkxTdHJpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWxhdW5j
aGVkVVJMU3RyaW5nLmlzTnVsbCgpICYmIGxhdW5jaGVkVVJMKQpAQCAtMjA3LDcgKzIwNyw3IEBA
IHN0YXRpYyBib29sIG9wZW5DRlVSTFJlZihDRlVSTFJlZiB1cmwsIGludDMyX3QmIHN0YXR1cywg
Q0ZVUkxSZWYqIGxhdW5jaGVkVVJMKQogCiBzdGF0aWMgdm9pZCBzZXRNb2RhbChib29sIG1vZGFs
V2luZG93SXNTaG93aW5nKQogewotICAgIFBsdWdpblByb2Nlc3M6OnNoYXJlZCgpLnNldE1vZGFs
V2luZG93SXNTaG93aW5nKG1vZGFsV2luZG93SXNTaG93aW5nKTsKKyAgICBQbHVnaW5Qcm9jZXNz
OjpzaW5nbGV0b24oKS5zZXRNb2RhbFdpbmRvd0lzU2hvd2luZyhtb2RhbFdpbmRvd0lzU2hvd2lu
Zyk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBtb2RhbENvdW50ID0gMDsKQEAgLTI3NSw3ICsyNzUs
NyBAQCBzdGF0aWMgdm9pZCByZXBsYWNlZE5TQ29uY3JldGVUYXNrX2xhdW5jaChOU1Rhc2sgKnNl
bGYsIFNFTCBfY21kKQogICAgIGZvciAoTlNTdHJpbmcgKmFyZ3VtZW50IGluIHNlbGYuYXJndW1l
bnRzKQogICAgICAgICBhcmd1bWVudHMudW5jaGVja2VkQXBwZW5kKGFyZ3VtZW50KTsKIAotICAg
IGlmIChQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5sYXVuY2hQcm9jZXNzKGxhdW5jaFBhdGgsIGFy
Z3VtZW50cykpCisgICAgaWYgKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLmxhdW5jaFByb2Nl
c3MobGF1bmNoUGF0aCwgYXJndW1lbnRzKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTlNDb25j
cmV0ZVRhc2tfbGF1bmNoKHNlbGYsIF9jbWQpOwpAQCAtMjk1LDcgKzI5NSw3IEBAIHN0YXRpYyBO
U1J1bm5pbmdBcHBsaWNhdGlvbiAqcmVwbGFjZWROU1dvcmtzcGFjZV9sYXVuY2hBcHBsaWNhdGlv
bkF0VVJMX29wdGlvbnNfCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoUGx1Z2luUHJvY2Vz
czo6c2hhcmVkKCkubGF1bmNoQXBwbGljYXRpb25BdFVSTChVUkwodXJsKS5zdHJpbmcoKSwgYXJn
dW1lbnRzKSkgeworICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5sYXVuY2hBcHBs
aWNhdGlvbkF0VVJMKFVSTCh1cmwpLnN0cmluZygpLCBhcmd1bWVudHMpKSB7CiAgICAgICAgIGlm
IChlcnJvcikKICAgICAgICAgICAgICplcnJvciA9IG5pbDsKICAgICAgICAgcmV0dXJuIG5pbDsK
QEAgLTMwOCw3ICszMDgsNyBAQCBzdGF0aWMgQk9PTCAoKk5TV29ya3NwYWNlX29wZW5GaWxlKShO
U1dvcmtzcGFjZSAqLCBTRUwsIE5TU3RyaW5nICopOwogCiBzdGF0aWMgQk9PTCByZXBsYWNlZE5T
V29ya3NwYWNlX29wZW5GaWxlKE5TV29ya3NwYWNlICpzZWxmLCBTRUwgX2NtZCwgTlNTdHJpbmcg
KmZ1bGxQYXRoKQogewotICAgIGlmIChQbHVnaW5Qcm9jZXNzOjpzaGFyZWQoKS5vcGVuRmlsZShm
dWxsUGF0aCkpCisgICAgaWYgKFBsdWdpblByb2Nlc3M6OnNpbmdsZXRvbigpLm9wZW5GaWxlKGZ1
bGxQYXRoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gTlNXb3Jrc3BhY2Vf
b3BlbkZpbGUoc2VsZiwgX2NtZCwgZnVsbFBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29u
bmVjdGlvblN0YWNrLmNwcAppbmRleCA1NjVhZGY1OTliZjM2NzMwNjIxOWU2ZTU4ZWE4OTgxOTlk
NTEyNmNiLi5mYjUzOTdkMTFhZDI0MmY3YzM2NTkyMzI4MjhjYmFmMzFlMjYyZWFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmNwcApAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotQ29ubmVjdGlvblN0YWNrJiBDb25uZWN0aW9uU3RhY2s6
OnNoYXJlZCgpCitDb25uZWN0aW9uU3RhY2smIENvbm5lY3Rpb25TdGFjazo6c2luZ2xldG9uKCkK
IHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q29ubmVjdGlvblN0YWNrPiBjb25uZWN0aW9u
U3RhY2s7CiAgICAgcmV0dXJuIGNvbm5lY3Rpb25TdGFjazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9Db25uZWN0aW9uU3RhY2suaCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9D
b25uZWN0aW9uU3RhY2suaAppbmRleCBiZDc1M2EwZTg1YjkzMGY1NjMzNjc4NDcxMjY4ZWRiZDhm
YTFlYmNkLi5jNTMyNjM4OTQ0OGUzZWM1NmQ1MjU5NmM1ZWQ3ZjBhOTRkMTVkN2Y0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQ29ubmVjdGlvblN0YWNrLmgKKysrIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0Nvbm5lY3Rpb25TdGFjay5oCkBAIC0zNiw3ICszNiw3IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiBjbGFzcyBDb25uZWN0aW9uU3RhY2sgewogcHVibGljOgotICAgIHN0
YXRpYyBDb25uZWN0aW9uU3RhY2smIHNoYXJlZCgpOworICAgIHN0YXRpYyBDb25uZWN0aW9uU3Rh
Y2smIHNpbmdsZXRvbigpOwogCiAgICAgSVBDOjpDb25uZWN0aW9uKiBjdXJyZW50KCkKICAgICB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9t
YWMvTGVnYWN5UHJvY2Vzcy9DaGlsZFByb2Nlc3NFbnRyeVBvaW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvTGVnYWN5UHJvY2Vzcy9DaGlsZFByb2Nl
c3NFbnRyeVBvaW50LmgKaW5kZXggZGJmMGExZjEwNjgyNjk1NTg5ZWE5ZmZhZjNhZDViYjU1NzM2
YWI1NC4uMWQ0Y2UzZjYyMDEzN2Q2NWYxYzFmMWRjOWUzMDA3NmFmNWE2Yzc2MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL0xlZ2FjeVBy
b2Nlc3MvQ2hpbGRQcm9jZXNzRW50cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9FbnRyeVBvaW50VXRpbGl0aWVzL21hYy9MZWdhY3lQcm9jZXNzL0NoaWxkUHJvY2Vzc0VudHJ5
UG9pbnQuaApAQCAtODcsNyArODcsNyBAQCBpbnQgQ2hpbGRQcm9jZXNzTWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgICAgIGlmICghZGVsZWdhdGUuZ2V0RXh0cmFJbml0aWFsaXphdGlv
bkRhdGEocGFyYW1ldGVycy5leHRyYUluaXRpYWxpemF0aW9uRGF0YSkpCiAgICAgICAgICAgICBy
ZXR1cm4gRVhJVF9GQUlMVVJFOwogCi0gICAgICAgIENoaWxkUHJvY2Vzc1R5cGU6OnNoYXJlZCgp
LmluaXRpYWxpemUocGFyYW1ldGVycyk7CisgICAgICAgIENoaWxkUHJvY2Vzc1R5cGU6OnNpbmds
ZXRvbigpLmluaXRpYWxpemUocGFyYW1ldGVycyk7CiAgICAgfQogCiAgICAgZGVsZWdhdGUuc3Rh
cnRSdW5Mb29wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2lu
dFV0aWxpdGllcy9tYWMvWFBDU2VydmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL0VudHJ5UG9pbnRVdGlsaXRpZXMvbWFjL1hQQ1NlcnZpY2UvWFBDU2Vy
dmljZUVudHJ5UG9pbnQuaAppbmRleCAwOTk4NmJkNzU5ODk1NGY2MTYzMGQ3YTk4NWYyYTRjZjYw
NzQxYjEzLi5mYmIzMmEzOTUwYWJkY2I3N2FlZGNjOGQyYjhhY2E3NDZiNTE1OTNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRW50cnlQb2ludFV0aWxpdGllcy9tYWMvWFBDU2Vy
dmljZS9YUENTZXJ2aWNlRW50cnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9F
bnRyeVBvaW50VXRpbGl0aWVzL21hYy9YUENTZXJ2aWNlL1hQQ1NlcnZpY2VFbnRyeVBvaW50LmgK
QEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBYUENTZXJ2aWNlSW5pdGlhbGl6ZXIoT1NPYmplY3RQdHI8
eHBjX2Nvbm5lY3Rpb25fdD4gY29ubmVjdGlvbiwgeHBjX29iamVjdF8KICAgICB2b3VjaGVyX3Jl
cGxhY2VfZGVmYXVsdF92b3VjaGVyKCk7CiAjZW5kaWYKIAotICAgIFhQQ1NlcnZpY2VUeXBlOjpz
aGFyZWQoKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOworICAgIFhQQ1NlcnZpY2VUeXBlOjpzaW5n
bGV0b24oKS5pbml0aWFsaXplKHBhcmFtZXRlcnMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmNwcAppbmRleCA4MjQ4
ODc3NzhkOTFmZTE1NjI3NDYzYjEzYmMxNjk3ZWI3ZjQyMjI5Li4yZmE0M2ZkMjFiMDE4YzBjMmYx
MDhkNDViYzM4ZWQwZGQyZTMzNjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
V2ViTWVtb3J5U2FtcGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYk1lbW9y
eVNhbXBsZXIuY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0
aWMgY29uc3QgY2hhciBzZXBhcmF0b3IgPSAnXHQnOwogCi1XZWJNZW1vcnlTYW1wbGVyKiBXZWJN
ZW1vcnlTYW1wbGVyOjpzaGFyZWQoKQorV2ViTWVtb3J5U2FtcGxlciogV2ViTWVtb3J5U2FtcGxl
cjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgV2ViTWVtb3J5U2FtcGxlciogc2hhcmVkTWVt
b3J5U2FtcGxlcjsKICAgICBpZiAoIXNoYXJlZE1lbW9yeVNhbXBsZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oIGIvU291cmNlL1dlYktpdDIv
U2hhcmVkL1dlYk1lbW9yeVNhbXBsZXIuaAppbmRleCBlYzI0NDEwNWM4ZmQ1NDNhMDBkMGRhOTZl
YzJhYjY0OTE5NTY2OWU0Li42NmY2MmEyZWM4ZjRmYjNjY2QyOTFkYjViMjM5ZmM2ZDVmYmQwM2Ex
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViTWVtb3J5U2FtcGxlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJNZW1vcnlTYW1wbGVyLmgKQEAgLTcxLDcgKzcx
LDcgQEAgc3RydWN0IFdlYk1lbW9yeVN0YXRpc3RpY3MgewogY2xhc3MgV2ViTWVtb3J5U2FtcGxl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViTWVtb3J5U2FtcGxlcik7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFdlYk1lbW9yeVNhbXBsZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJN
ZW1vcnlTYW1wbGVyKiBzaW5nbGV0b24oKTsKICAgICB2b2lkIHN0YXJ0KGNvbnN0IGRvdWJsZSBp
bnRlcnZhbCA9IDApOwogICAgIHZvaWQgc3RhcnQoY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlJiwgY29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlIGludGVydmFsID0gMCk7CiAgICAgdm9p
ZCBzdG9wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvaW9zL0NoaWxkUHJv
Y2Vzc0lPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1t
CmluZGV4IGFlY2MwNDFlZWMyZWRhOGUzNDczNjRhYzJlZGM4M2Q2M2RkN2NkY2IuLmVmYzdiM2I4
ZmUwMDJiNmE2NGIxZDJiZDJkODdmYzJhNDFhNzdiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1No
YXJlZC9pb3MvQ2hpbGRQcm9jZXNzSU9TLm1tCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgQ2hpbGRQ
cm9jZXNzOjpzZXRBcHBsaWNhdGlvbklzRGFlbW9uKCkKIAogdm9pZCBDaGlsZFByb2Nlc3M6OnBs
YXRmb3JtSW5pdGlhbGl6ZSgpCiB7Ci0gICAgRmxvYXRpbmdQb2ludEVudmlyb25tZW50JiBmbG9h
dGluZ1BvaW50RW52aXJvbm1lbnQgPSBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQ6OnNoYXJlZCgp
OyAKKyAgICBGbG9hdGluZ1BvaW50RW52aXJvbm1lbnQmIGZsb2F0aW5nUG9pbnRFbnZpcm9ubWVu
dCA9IEZsb2F0aW5nUG9pbnRFbnZpcm9ubWVudDo6c2luZ2xldG9uKCk7IAogICAgIGZsb2F0aW5n
UG9pbnRFbnZpcm9ubWVudC5lbmFibGVEZW5vcm1hbFN1cHBvcnQoKTsgCiAgICAgZmxvYXRpbmdQ
b2ludEVudmlyb25tZW50LnNhdmVNYWluVGhyZWFkRW52aXJvbm1lbnQoKTsgCiAgICAgW1tOU0Zp
bGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSBjaGFuZ2VDdXJyZW50RGlyZWN0b3J5UGF0aDpbW05T
QnVuZGxlIG1haW5CdW5kbGVdIGJ1bmRsZVBhdGhdXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9saW51eC9TZWNjb21wRmlsdGVycy9TZWNjb21wQnJva2VyLmNwcApp
bmRleCA1OGU3M2Y5MWY3Y2JiNDUxZjI0YjQ5MWY1ZWQ3ZjliZmVkZmE5ZDBmLi4xMTU4YWVlNmE5
MDk0YTQ3MjQ0NzI4NzRlMjBkZjk4OGE3YmI5ZjQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvbGludXgvU2VjY29tcEZpbHRlcnMvU2VjY29tcEJyb2tlci5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvU2hhcmVkL2xpbnV4L1NlY2NvbXBGaWx0ZXJzL1NlY2NvbXBCcm9rZXIuY3Bw
CkBAIC0xNDAsNyArMTQwLDcgQEAgc3RhdGljIHZvaWQgU0lHU1lTSGFuZGxlcihpbnQgc2lnbmFs
LCBzaWdpbmZvX3QqIGluZm8sIHZvaWQqIGRhdGEpCiAgICAgaWYgKCF1Y29udGV4dCkKICAgICAg
ICAgQ1JBU0goKTsKIAotICAgIFNlY2NvbXBCcm9rZXJDbGllbnQqIGNsaWVudCA9ICZTZWNjb21w
QnJva2VyQ2xpZW50OjpzaGFyZWQoKTsKKyAgICBTZWNjb21wQnJva2VyQ2xpZW50KiBjbGllbnQg
PSAmU2VjY29tcEJyb2tlckNsaWVudDo6c2luZ2xldG9uKCk7CiAKICAgICBpZiAoY2xpZW50LT5o
YW5kbGVJZk9wZW5pbmdPbmxpbmVDUFVDb3VudCgmdWNvbnRleHQtPnVjX21jb250ZXh0KSkKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29r
aWVTdG9yYWdlU2hpbS5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9yYWdl
U2hpbS5oCmluZGV4IGExNTE5NTQ5NTMzYjg4MmM0MTc5ODRmNDVkMWJiODJjOTA1MjVjOWYuLmFi
MzQyMjQ2MzM4ZmZlOTI3Y2RiOWFkYWEzYjFkOGUzOTIwMTg1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLmgKQEAgLTM3LDcgKzM3LDcgQEAgY2xh
c3MgQ29va2llU3RvcmFnZVNoaW0gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvb2tpZVN0
b3JhZ2VTaGltKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8Q29va2llU3RvcmFn
ZVNoaW0+OwogcHVibGljOgotICAgIHN0YXRpYyBDb29raWVTdG9yYWdlU2hpbSYgc2hhcmVkKCk7
CisgICAgc3RhdGljIENvb2tpZVN0b3JhZ2VTaGltJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQg
aW5pdGlhbGl6ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nv
b2tpZVN0b3JhZ2VTaGltLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9Db29raWVTdG9y
YWdlU2hpbS5tbQppbmRleCAxN2I4YzcyZjFiOGExZDAzN2Q0N2FjMDY4YzQ0YTYxYmQyOGQ1ODBi
Li4wNzBhODQxNDQyZTdmYWE1ZThjZWI4OGMyNzYxMTBlZWM4NzIxNDhjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL0Nvb2tpZVN0b3JhZ2VTaGltLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvQ29va2llU3RvcmFnZVNoaW0ubW0KQEAgLTYxLDcgKzYxLDcg
QEAgc3RhdGljIENGRGljdGlvbmFyeVJlZiB3ZWJLaXRDb29raWVTdG9yYWdlQ29weVJlcXVlc3RI
ZWFkZXJGaWVsZHNGb3JVUkwoQ0ZIVFRQQ28KIHsKICAgICBTdHJpbmcgY29va2llczsKICAgICBV
UkwgZmlyc3RQYXJ0eUZvckNvb2tpZXNVUkw7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUoU2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIGZpcnN0UGFydHlGb3JDb29raWVzVVJM
LCBpblJlcXVlc3RVUkwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OkNvb2tpZXNGb3JET006OlJlcGx5KGNvb2tpZXMpLCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgZmlyc3RQYXJ0eUZv
ckNvb2tpZXNVUkwsIGluUmVxdWVzdFVSTCksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Q29va2llc0ZvckRPTTo6UmVwbHkoY29va2llcyksIDApKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIGlmIChjb29raWVzLmlzTnVsbCgpKQpAQCAtNzMsNyArNzMsNyBAQCBz
dGF0aWMgQ0ZEaWN0aW9uYXJ5UmVmIHdlYktpdENvb2tpZVN0b3JhZ2VDb3B5UmVxdWVzdEhlYWRl
ckZpZWxkc0ZvclVSTChDRkhUVFBDbwogICAgIHJldHVybiBDRkRpY3Rpb25hcnlDcmVhdGUoMCwg
Y29va2llS2V5cywgY29va2llVmFsdWVzLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFj
a3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKTsKIH0KIAotQ29va2llU3RvcmFn
ZVNoaW0mIENvb2tpZVN0b3JhZ2VTaGltOjpzaGFyZWQoKQorQ29va2llU3RvcmFnZVNoaW0mIENv
b2tpZVN0b3JhZ2VTaGltOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDb29raWVTdG9yYWdlU2hpbT4gc3RvcmFnZTsKICAgICByZXR1cm4gc3RvcmFnZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0uY3BwIGIvU291cmNl
L1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAKaW5kZXggNmM2NjFiMTNhNDRjMDVh
MmUwNTA2NGIwYjg0NmIzZjczODE2MmM5NC4uNDAyOWQyMzU4NTU3MmJlOWMxMzc0NGNlNGZhMWVk
ZTIxOTk1MzVjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVt
U2hpbS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgc3RhdGljIEJsb2NraW5nUmVzcG9uc2VNYXA8U2VjSXRlbVJlc3Bv
bnNlRGF0YT4mIHJlc3BvbnNlTWFwKCkKIAogc3RhdGljIENoaWxkUHJvY2Vzcyogc2hhcmVkUHJv
Y2VzczsKIAotU2VjSXRlbVNoaW0mIFNlY0l0ZW1TaGltOjpzaGFyZWQoKQorU2VjSXRlbVNoaW0m
IFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBTZWNJdGVtU2hpbSogc2hp
bTsKICAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9uY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1NlY0l0ZW1TaGltLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1NlY0l0ZW1TaGltLmgKaW5kZXggOTdjNDc4OGI1MjZkNGFiYTI4ODYxYWQ0MTJjNWIzNTM4
NzNjNzc5ZC4uY2IzNjQyNTk4NDRiNDg1MjljNWI3ZjFlNDk3OTk3ZDI4N2MwOWU0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9TZWNJdGVtU2hpbS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9tYWMvU2VjSXRlbVNoaW0uaApAQCAtMzgsNyArMzgsNyBAQCBjbGFz
cyBTZWNJdGVtUmVzcG9uc2VEYXRhOwogY2xhc3MgU2VjSXRlbVNoaW0gOiBwdWJsaWMgSVBDOjpD
b25uZWN0aW9uOjpXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIgewogV1RGX01BS0VfTk9OQ09QWUFC
TEUoU2VjSXRlbVNoaW0pOwogcHVibGljOgotICAgIHN0YXRpYyBTZWNJdGVtU2hpbSYgc2hhcmVk
KCk7CisgICAgc3RhdGljIFNlY0l0ZW1TaGltJiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQgaW5p
dGlhbGl6ZShDaGlsZFByb2Nlc3MqKTsKICAgICB2b2lkIGluaXRpYWxpemVDb25uZWN0aW9uKElQ
Qzo6Q29ubmVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL3VuaXgv
Q2hpbGRQcm9jZXNzTWFpbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3VuaXgvQ2hpbGRQcm9j
ZXNzTWFpbi5oCmluZGV4IGNmMmNiMDFmYzgxMTVmYTU4NTU5NjVjNmRlMGI0YzJlNzM1MWY1OTAu
LjdiOTAyOTQyMGQ5OGZiNmNmNzkxYWVmZjkzMDdiMmE4NWQxYWMxMzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC91bml4L0NoaWxkUHJvY2Vzc01haW4uaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvdW5peC9DaGlsZFByb2Nlc3NNYWluLmgKQEAgLTU3LDcgKzU3LDcgQEAg
aW50IENoaWxkUHJvY2Vzc01haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIGlmICghY2hp
bGRNYWluLnBhcnNlQ29tbWFuZExpbmUoYXJnYywgYXJndikpCiAgICAgICAgIHJldHVybiBFWElU
X0ZBSUxVUkU7CiAKLSAgICBDaGlsZFByb2Nlc3NUeXBlOjpzaGFyZWQoKS5pbml0aWFsaXplKGNo
aWxkTWFpbi5pbml0aWFsaXphdGlvblBhcmFtZXRlcnMoKSk7CisgICAgQ2hpbGRQcm9jZXNzVHlw
ZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShjaGlsZE1haW4uaW5pdGlhbGl6YXRpb25QYXJhbWV0
ZXJzKCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwogICAgIGNoaWxkTWFpbi5wbGF0Zm9ybUZpbmFs
aXplKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1Rl
eHRDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9XS1RleHRDaGVj
a2VyLmNwcAppbmRleCAyZGE5NGRmYzIwMDM5YmYwMTg3MTNiYTVhZGFjMDYzMzU3ZGQwN2Y1Li4z
Mjc5ZGQ3YTk2N2Y4MTQ5ZTUxNmYyOWIyOGY5NGQyNGI1NGQ1YTQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tUZXh0Q2hlY2tlci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dLVGV4dENoZWNrZXIuY3BwCkBAIC0zNiwyNSArMzYs
MjUgQEAgdm9pZCBXS1RleHRDaGVja2VyU2V0Q2xpZW50KGNvbnN0IFdLVGV4dENoZWNrZXJDbGll
bnRCYXNlKiB3a0NsaWVudCkKIHsKICAgICBpZiAod2tDbGllbnQgJiYgd2tDbGllbnQtPnZlcnNp
b24pCiAgICAgICAgIHJldHVybjsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPnNldENs
aWVudCh3a0NsaWVudCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5zZXRDbGll
bnQod2tDbGllbnQpOwogfQogCiB2b2lkIFdLVGV4dENoZWNrZXJDb250aW51b3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdlYlRleHRDaGVj
a2VyOjpzaGFyZWQoKS0+Y29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2Vk
KGVuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOwogfQogCiB2b2lkIFdLVGV4
dENoZWNrZXJHcmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGJvb2wgZW5hYmxlZCkK
IHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmdyYW1tYXJDaGVja2luZ0VuYWJsZWRT
dGF0ZUNoYW5nZWQoZW5hYmxlZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5n
cmFtbWFyQ2hlY2tpbmdFbmFibGVkU3RhdGVDaGFuZ2VkKGVuYWJsZWQpOwogfQogCiB2b2lkIFdL
VGV4dENoZWNrZXJDaGVja1NwZWxsaW5nKFdLUGFnZVJlZiBwYWdlLCBib29sIHN0YXJ0QmVmb3Jl
U2VsZWN0aW9uKQogewotICAgIFdlYlRleHRDaGVja2VyOjpzaGFyZWQoKS0+Y2hlY2tTcGVsbGlu
Zyh0b0ltcGwocGFnZSksIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKTsKKyAgICBXZWJUZXh0Q2hlY2tl
cjo6c2luZ2xldG9uKCktPmNoZWNrU3BlbGxpbmcodG9JbXBsKHBhZ2UpLCBzdGFydEJlZm9yZVNl
bGVjdGlvbik7CiB9CiAKIHZvaWQgV0tUZXh0Q2hlY2tlckNoYW5nZVNwZWxsaW5nVG9Xb3JkKFdL
UGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB3b3JkKQogewotICAgIFdlYlRleHRDaGVja2VyOjpz
aGFyZWQoKS0+Y2hhbmdlU3BlbGxpbmdUb1dvcmQodG9JbXBsKHBhZ2UpLCB0b1dURlN0cmluZyh3
b3JkKSk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jaGFuZ2VTcGVsbGluZ1Rv
V29yZCh0b0ltcGwocGFnZSksIHRvV1RGU3RyaW5nKHdvcmQpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmNwcAppbmRleCAwYTlmMWY1YjUwMDk5NmMw
ZGNlOWJhMTIwNmZmMjJiMTlkNjMyMDc1Li44OWRkZTNmOGQyMjI1MjVhN2YwYzkxODk2MTk5OWQ1
MWU5MWQxYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfbWFpbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21h
aW4uY3BwCkBAIC02Miw3ICs2Miw3IEBAIEV3a01haW46OkV3a01haW4oKQogewogfQogCi1Fd2tN
YWluJiBFd2tNYWluOjpzaGFyZWQoKQorRXdrTWFpbiYgRXdrTWFpbjo6c2luZ2xldG9uKCkKIHsK
ICAgICBzdGF0aWMgRXdrTWFpbiBpbnN0YW5jZTsKICAgICByZXR1cm4gaW5zdGFuY2U7CkBAIC0y
MDksMTAgKzIwOSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCiBpbnQgZXdrX2luaXQo
KQogewotICAgIHJldHVybiBFd2tNYWluOjpzaGFyZWQoKS5pbml0aWFsaXplKCk7CisgICAgcmV0
dXJuIEV3a01haW46OnNpbmdsZXRvbigpLmluaXRpYWxpemUoKTsKIH0KIAogaW50IGV3a19zaHV0
ZG93bigpCiB7Ci0gICAgcmV0dXJuIEV3a01haW46OnNoYXJlZCgpLmZpbmFsaXplKCk7CisgICAg
cmV0dXJuIEV3a01haW46OnNpbmdsZXRvbigpLmZpbmFsaXplKCk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbl9wcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbl9wcml2YXRlLmgKaW5kZXggMzgw
MjNjNjE4ODQzODhhY2I0MjAwZDAwZjQwNTUyNWQ0NDAxODY4NC4uMWQ0Y2UxZmFlZjA0MzgwOTNm
OWMzNjViZGRmYTY2NjllMTUxNDUzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX21haW5fcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19tYWluX3ByaXZhdGUuaApAQCAtMzIsNyArMzIsNyBAQCBlbnVtIGNs
YXNzIEVGTE1vZHVsZUluaXRGYWlsdXJlOwogCiBjbGFzcyBFd2tNYWluIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgRXdrTWFpbiYgc2hhcmVkKCk7CisgICAgc3RhdGljIEV3a01haW4mIHNpbmdsZXRv
bigpOwogICAgIH5Fd2tNYWluKCk7CiAgICAgaW50IGluaXRpYWxpemUoKTsKICAgICBpbnQgZmlu
YWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cAppbmRleCBjYmYxYzA0NDhhNjI5ZTYxMzU0ZjYxZjZkNjEwMDdkZjk3MWVkZWNmLi5iZjhmYTE4
MzkwOGRjZDBiOWI3ZGFlODUxYTY2ZTdmMzllYzRhYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04MCw3ICs4MCw3IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zbWFydF9jbGFzc19zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAog
RXZhc19PYmplY3QqIEVXS1ZpZXdDcmVhdGUoV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLUGFnZUdy
b3VwUmVmIHBhZ2VHcm91cCwgRXZhcyogY2FudmFzLCBFdmFzX1NtYXJ0KiBzbWFydCkKIHsKLSAg
ICBpZiAoIUV3a01haW46OnNoYXJlZCgpLmlzSW5pdGlhbGl6ZWQoKSkgeworICAgIGlmICghRXdr
TWFpbjo6c2luZ2xldG9uKCkuaXNJbml0aWFsaXplZCgpKSB7CiAgICAgICAgIEVJTkFfTE9HX0NS
SVQoIkVXZWJLaXQgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkLiBZb3UgbXVzdCBjYWxsIGV3a19p
bml0KCkgYmVmb3JlIGNyZWF0aW5nIHZpZXcuIik7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJQcm9j
ZXNzUG9vbENvY29hLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nl
c3NQb29sQ29jb2EubW0KaW5kZXggYTdkODQ4MTQ2MDRjNTNiMDdmY2NlNTE1MTU1MDYxY2NmZDMx
NTgxMi4uOTE2NTNkY2U3ZGI5YjYxYWFlYjhiMzk0MWZkNWZlZDMzYTQzNzFkZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlByb2Nlc3NQb29sQ29jb2Eu
bW0KQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVQcm9jZXNz
U3VwcHJlc3Npb25TdGF0ZSgpCiAgICAgaWYgKCFtX3Byb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVk
Rm9yUGFnZUNvdW50ZXIudmFsdWUoKSkKICAgICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclBy
b2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9rZW4gPSBudWxscHRyOwogICAgIGVsc2UgaWYgKCFt
X3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRUb2tlbikKLSAg
ICAgICAgbV9wbHVnaW5Qcm9jZXNzTWFuYWdlclByb2Nlc3NTdXBwcmVzc2lvbkRpc2FibGVkVG9r
ZW4gPSBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkucHJvY2Vzc1N1cHByZXNzaW9uRGlz
YWJsZWRUb2tlbigpOworICAgICAgICBtX3BsdWdpblByb2Nlc3NNYW5hZ2VyUHJvY2Vzc1N1cHBy
ZXNzaW9uRGlzYWJsZWRUb2tlbiA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5w
cm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZFRva2VuKCk7CiAjZW5kaWYKIH0KIApAQCAtMTQwLDcg
KzE0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCiAgICAg
cmVnaXN0ZXJOb3RpZmljYXRpb25PYnNlcnZlcnMoKTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAg
ICBXZWJLaXQ6OldlYk1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2hhcmVkKCk7CisgICAgV2ViS2l0
OjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpOwogI2VuZGlmCiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5z
cGVjdG9yU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmNwcAppbmRleCA1ZGZmNTQ2MzAzNmMzN2RmNTU5N2M5YmUy
YWQ5OWQzODlkMmU1OGUxLi42NjM4Nzc0ODVlYmViMWY0OTRlZTI2YmYyYmZjZmU2ODlkYzg5NzQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dl
Ykluc3BlY3RvclNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3Bl
Y3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuY3BwCkBAIC01MSw3ICs1MSw3IEBAIHN0YXRp
YyB1bnNpZ25lZCBwYWdlSWRGcm9tUmVxdWVzdFBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogICAg
IHJldHVybiBudW1iZXI7CiB9CiAKLVdlYkluc3BlY3RvclNlcnZlciYgV2ViSW5zcGVjdG9yU2Vy
dmVyOjpzaGFyZWQoKQorV2ViSW5zcGVjdG9yU2VydmVyJiBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNp
bmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYgc2VydmVyID0gKm5l
dyBXZWJJbnNwZWN0b3JTZXJ2ZXI7CiAgICAgcmV0dXJuIHNlcnZlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3Rv
clNlcnZlci5oCmluZGV4IDE5Njc1YjJiOWQ0OGIwY2RiM2MxNDZjOWQ5ZDllZjk3N2Q0MzJjYjQu
LjEzMjk5YjE2ZTE5M2Y2NzRjMGM0ZmRjYzc3NzhlNmNmNjZkOTA5MWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNw
ZWN0b3JTZXJ2ZXIuaApAQCAtNDEsNyArNDEsNyBAQCBjbGFzcyBXZWJJbnNwZWN0b3JQcm94eTsK
IGNsYXNzIFdlYkluc3BlY3RvclNlcnZlciA6IHB1YmxpYyBXZWJTb2NrZXRTZXJ2ZXIsIHB1Ymxp
YyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgewogcHVibGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDx1
bnNpZ25lZCwgV2ViSW5zcGVjdG9yUHJveHkqPiBDbGllbnRNYXA7Ci0gICAgc3RhdGljIFdlYklu
c3BlY3RvclNlcnZlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYg
c2luZ2xldG9uKCk7CiAKICAgICAvLyBQYWdlIHJlZ2lzdHJ5IHRvIG1hbmFnZSBrbm93biBwYWdl
cy4KICAgICBpbnQgcmVnaXN0ZXJQYWdlKFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcAppbmRleCA1NGIzYmUyZmM2ZDMyNTMxNjFhNGMyMThlNjI3OWE0NjUzNGRlNDNk
Li5kNWYzM2ZjYzcxYWQ2MjQyYTAwYTVhOWQzYzJjYjFmMDFjNDEwMWVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcApAQCAtODUsNyArODUsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldExhdW5j
aE9wdGlvbnMoUHJvY2Vzc0xhdW5jaGVyOjpMYXVuY2hPcHRpb25zJiBsYXVuYwogdm9pZCBOZXR3
b3JrUHJvY2Vzc1Byb3h5Ojpjb25uZWN0aW9uV2lsbE9wZW4oSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uKQogewogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltUHJv
eHk6OnNoYXJlZCgpLmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOworICAgIFNlY0l0
ZW1TaGltUHJveHk6OnNpbmdsZXRvbigpLmluaXRpYWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2Vy
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5h
Z2VyLmNwcAppbmRleCBhYjliOTJkY2UwZDAyZWUwYzgxOGY3OWNjY2NjNmNjZmVmODRkM2RhLi5j
YjYxZDM2MjhlNzI5ZWUyNWU5YmFiOTUzY2I0MjljMTE4NjY2MDQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIu
Y3BwCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QbHVnaW5Qcm9j
ZXNzTWFuYWdlciYgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpCitQbHVnaW5Qcm9jZXNz
TWFuYWdlciYgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFBsdWdpblByb2Nlc3NNYW5hZ2VyPiBwbHVnaW5Qcm9jZXNzTWFuYWdl
cjsKICAgICByZXR1cm4gcGx1Z2luUHJvY2Vzc01hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc01hbmFnZXIuaAppbmRleCBk
ZjMyNTI3OTc1OTk0ZWFmOWUzZjYwNzIzNjdiZjdkZjllNzRhZjg3Li5mMjkxMWMzNmNiMjc2YjE3
NDFmNjI2MDUzOTdkNWRkMWQxY2U4NDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NNYW5hZ2VyLmgKQEAgLTU1LDcgKzU1LDcg
QEAgY2xhc3MgUGx1Z2luUHJvY2Vzc01hbmFnZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFBsdWdpblByb2Nlc3NNYW5hZ2VyKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8
UGx1Z2luUHJvY2Vzc01hbmFnZXI+OwogcHVibGljOgotICAgIHN0YXRpYyBQbHVnaW5Qcm9jZXNz
TWFuYWdlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFBsdWdpblByb2Nlc3NNYW5hZ2VyJiBzaW5n
bGV0b24oKTsKIAogICAgIHVpbnQ2NF90IHBsdWdpblByb2Nlc3NUb2tlbihjb25zdCBQbHVnaW5N
b2R1bGVJbmZvJiwgUGx1Z2luUHJvY2Vzc1R5cGUsIFBsdWdpblByb2Nlc3NTYW5kYm94UG9saWN5
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
UHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blByb2Nlc3NQcm94eS5jcHAKaW5kZXggMGYzZDk0MTA4MTZmZjEzZjhhZTJhZTBhNDFhNGEwZDkw
OTU0ODU1ZS4uM2E1ZjAwMWM5MDY0OTY3NGRkYWJmNDEwMmY4MmM3MjliYTYzMTIxMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNz
UHJveHkuY3BwCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBQbHVnaW5Qcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqLCBJUEM6OkNvbm5lY3Rpb246OkkKICAg
ICBtX251bVBlbmRpbmdDb25uZWN0aW9uUmVxdWVzdHMgPSAwOwogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgaWYgKCFQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkucHJvY2Vzc1N1cHBy
ZXNzaW9uRGlzYWJsZWQoKSkKKyAgICBpZiAoIVBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0
b24oKS5wcm9jZXNzU3VwcHJlc3Npb25EaXNhYmxlZCgpKQogICAgICAgICBzZXRQcm9jZXNzU3Vw
cHJlc3Npb25FbmFibGVkKHRydWUpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvV2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLmNw
cAppbmRleCAzNDk4ZWQ1ODg2MGY2ZmQ5YTYyMTZkNmQ0YTVhYTkxOWNjNjU0OWE3Li5lMTgwNjAz
MWU1Nzc4YjEyMDE1NThhMDUzODgyNDJhOTM2M2E2NjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9XZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL1dlYlBsdWdpblNpdGVEYXRhTWFuYWdl
ci5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKLSAgICAgICAgUGx1Z2luUHJvY2Vzc01hbmFnZXI6OnNoYXJlZCgpLmdldFNpdGVz
V2l0aERhdGEobV9wbHVnaW5zLmxhc3QoKSwgbV93ZWJQbHVnaW5TaXRlRGF0YU1hbmFnZXIsIG1f
Y2FsbGJhY2tJRCk7CisgICAgICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5n
ZXRTaXRlc1dpdGhEYXRhKG1fcGx1Z2lucy5sYXN0KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5h
Z2VyLCBtX2NhbGxiYWNrSUQpOwogICAgICAgICBtX3BsdWdpbnMucmVtb3ZlTGFzdCgpOwogICAg
IH0KIApAQCAtOTQsNyArOTQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBQbHVnaW5Qcm9jZXNzTWFuYWdlcjo6c2hhcmVkKCkuY2xlYXJTaXRl
RGF0YShtX3BsdWdpbnMubGFzdCgpLCBtX3dlYlBsdWdpblNpdGVEYXRhTWFuYWdlciwgbV9zaXRl
cywgbV9mbGFncywgbV9tYXhBZ2VJblNlY29uZHMsIG1fY2FsbGJhY2tJRCk7CisgICAgICAgIFBs
dWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5jbGVhclNpdGVEYXRhKG1fcGx1Z2lucy5s
YXN0KCksIG1fd2ViUGx1Z2luU2l0ZURhdGFNYW5hZ2VyLCBtX3NpdGVzLCBtX2ZsYWdzLCBtX21h
eEFnZUluU2Vjb25kcywgbV9jYWxsYmFja0lEKTsKICAgICAgICAgbV9wbHVnaW5zLnJlbW92ZUxh
c3QoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVn
aW5zL2d0ay9QbHVnaW5JbmZvQ2FjaGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bs
dWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKaW5kZXggMzE5YmQzZTE1YzRhNjAxZjk3MDRi
MjE2NzNkZGM1NmU4NDY2NTgzZS4uNzkyMDM5MzkzMWU3Y2FmOGZjMTJlMjY0MDQzMWVjZDk1MzM5
OGY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1Bs
dWdpbkluZm9DYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMv
Z3RrL1BsdWdpbkluZm9DYWNoZS5jcHAKQEAgLTM2LDcgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBnU2NoZW1hVmVyc2lvbiA9IDI7CiAKLVBsdWdp
bkluZm9DYWNoZSYgUGx1Z2luSW5mb0NhY2hlOjpzaGFyZWQoKQorUGx1Z2luSW5mb0NhY2hlJiBQ
bHVnaW5JbmZvQ2FjaGU6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFBsdWdpbkluZm9DYWNoZT4gcGx1Z2luSW5mb0NhY2hlOwogICAgIHJldHVybiBwbHVnaW5JbmZv
Q2FjaGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsv
UGx1Z2luSW5mb0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy9ndGsv
UGx1Z2luSW5mb0NhY2hlLmgKaW5kZXggZDM1NWI5MDc2MjliZTU2ODkzYTg0ZDFiOWFlODg5Njgw
NjExMDYzMS4uY2FiMWUwZjliNjQxNDdiMmZmN2FmNGU1YjFjNzY2YTU0NzAzZmI0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvZ3RrL1BsdWdpbkluZm9DYWNo
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL2d0ay9QbHVnaW5JbmZv
Q2FjaGUuaApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBQbHVnaW5JbmZvQ2FjaGUgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBsdWdpbkluZm9DYWNoZSk7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPFBsdWdpbkluZm9DYWNoZT47CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBsdWdp
bkluZm9DYWNoZSYgc2hhcmVkKCk7CisgICAgc3RhdGljIFBsdWdpbkluZm9DYWNoZSYgc2luZ2xl
dG9uKCk7CiAKICAgICBib29sIGdldFBsdWdpbkluZm8oY29uc3QgU3RyaW5nJiBwbHVnaW5QYXRo
LCBQbHVnaW5Nb2R1bGVJbmZvJik7CiAgICAgdm9pZCB1cGRhdGVQbHVnaW5JbmZvKGNvbnN0IFN0
cmluZyYgcGx1Z2luUGF0aCwgY29uc3QgUGx1Z2luTW9kdWxlSW5mbyYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QbHVnaW5zL3VuaXgvUGx1Z2luSW5mb1N0
b3JlVW5peC5jcHAKaW5kZXggNWY1NDA5ZmU0YTExYjU4Y2FmMGVmMDBmZWNjOGE0YzIxMzhiZDQ2
Yi4uM2M2Njg3MTlmZDNjYjU3ZWJhZTg2N2ViYjVlZjEyZGExNTYzYjRlNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BsdWdpbnMvdW5peC9QbHVnaW5JbmZvU3RvcmVVbml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGx1Z2lucy91bml4L1BsdWdpbklu
Zm9TdG9yZVVuaXguY3BwCkBAIC0xMDIsMTEgKzEwMiwxMSBAQCBWZWN0b3I8U3RyaW5nPiBQbHVn
aW5JbmZvU3RvcmU6OmluZGl2aWR1YWxQbHVnaW5QYXRocygpCiBib29sIFBsdWdpbkluZm9TdG9y
ZTo6Z2V0UGx1Z2luSW5mbyhjb25zdCBTdHJpbmcmIHBsdWdpblBhdGgsIFBsdWdpbk1vZHVsZUlu
Zm8mIHBsdWdpbikKIHsKICNpZiBQTEFURk9STShHVEspCi0gICAgaWYgKFBsdWdpbkluZm9DYWNo
ZTo6c2hhcmVkKCkuZ2V0UGx1Z2luSW5mbyhwbHVnaW5QYXRoLCBwbHVnaW4pKQorICAgIGlmIChQ
bHVnaW5JbmZvQ2FjaGU6OnNpbmdsZXRvbigpLmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1
Z2luKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoTmV0c2NhcGVQbHVnaW5Nb2R1
bGU6OmdldFBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKSkgewotICAgICAgICBQbHVnaW5J
bmZvQ2FjaGU6OnNoYXJlZCgpLnVwZGF0ZVBsdWdpbkluZm8ocGx1Z2luUGF0aCwgcGx1Z2luKTsK
KyAgICAgICAgUGx1Z2luSW5mb0NhY2hlOjpzaW5nbGV0b24oKS51cGRhdGVQbHVnaW5JbmZvKHBs
dWdpblBhdGgsIHBsdWdpbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5
LmNwcAppbmRleCA3M2ViMzU2OWE1YmYyOWVhY2IyMGM0M2Q2Njg2YzRmYjY5NDM4Njc0Li5iZmQ3
YWQ1NWQ5OWRhZTBjNmY5OGQ0YWU0MjI4ZDlkNGE2NzNmMjI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5jcHAKQEAgLTU5LDcgKzU5LDcgQEAgY29u
c3QgdW5zaWduZWQgV2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxXaW5kb3dIZWlnaHQgPSA2NTA7
CiAKIGNsYXNzIFdlYkluc3BlY3RvclBhZ2VHcm91cHMgewogcHVibGljOgotICAgIHN0YXRpYyBX
ZWJJbnNwZWN0b3JQYWdlR3JvdXBzJiBzaGFyZWQoKQorICAgIHN0YXRpYyBXZWJJbnNwZWN0b3JQ
YWdlR3JvdXBzJiBzaW5nbGV0b24oKQogICAgIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFdlYkluc3BlY3RvclBhZ2VHcm91cHM+IGluc3RhbmNlOwogICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CkBAIC0xNDUsNyArMTQ1LDcgQEAgV2ViSW5zcGVjdG9yUHJveHk6OldlYkluc3BlY3Rv
clByb3h5KFdlYlBhZ2VQcm94eSogcGFnZSkKICAgICAsIG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJ
ZCgwKQogI2VuZGlmCiB7Ci0gICAgbV9sZXZlbCA9IFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNo
YXJlZCgpLmluc3BlY3RvckxldmVsKG1fcGFnZS0+cGFnZUdyb3VwKCkpOworICAgIG1fbGV2ZWwg
PSBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaW5nbGV0b24oKS5pbnNwZWN0b3JMZXZlbChtX3Bh
Z2UtPnBhZ2VHcm91cCgpKTsKICAgICBtX3BhZ2UtPnByb2Nlc3MoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
cGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIApAQCAtMTU1LDE0ICsxNTUsMTQgQEAgV2ViSW5z
cGVjdG9yUHJveHk6On5XZWJJbnNwZWN0b3JQcm94eSgpCiAKIFdlYlBhZ2VHcm91cCogV2ViSW5z
cGVjdG9yUHJveHk6Omluc3BlY3RvclBhZ2VHcm91cCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdl
Ykluc3BlY3RvclBhZ2VHcm91cHM6OnNoYXJlZCgpLmluc3BlY3RvclBhZ2VHcm91cEZvckxldmVs
KG1fbGV2ZWwpOworICAgIHJldHVybiBXZWJJbnNwZWN0b3JQYWdlR3JvdXBzOjpzaW5nbGV0b24o
KS5pbnNwZWN0b3JQYWdlR3JvdXBGb3JMZXZlbChtX2xldmVsKTsKIH0KIAogdm9pZCBXZWJJbnNw
ZWN0b3JQcm94eTo6aW52YWxpZGF0ZSgpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIp
CiAgICAgaWYgKG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCkKLSAgICAgICAgV2ViSW5zcGVjdG9y
U2VydmVyOjpzaGFyZWQoKS51bnJlZ2lzdGVyUGFnZShtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQp
OworICAgICAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpLnVucmVnaXN0ZXJQYWdl
KG1fcmVtb3RlSW5zcGVjdGlvblBhZ2VJZCk7CiAjZW5kaWYKIAogICAgIG1fcGFnZS0+cHJvY2Vz
cygpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQoKSk7CkBAIC0zNTcsNyArMzU3LDcg
QEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6dG9nZ2xlUGFnZVByb2ZpbGluZygpCiAKIGJvb2wg
V2ViSW5zcGVjdG9yUHJveHk6OmlzSW5zcGVjdG9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2UpCiB7
Ci0gICAgcmV0dXJuIFdlYkluc3BlY3RvclBhZ2VHcm91cHM6OnNoYXJlZCgpLmlzSW5zcGVjdG9y
UGFnZUdyb3VwKHBhZ2UucGFnZUdyb3VwKCkpOworICAgIHJldHVybiBXZWJJbnNwZWN0b3JQYWdl
R3JvdXBzOjpzaW5nbGV0b24oKS5pc0luc3BlY3RvclBhZ2VHcm91cChwYWdlLnBhZ2VHcm91cCgp
KTsKIH0KIAogV2ViUHJvY2Vzc1Bvb2wmIFdlYkluc3BlY3RvclByb3h5OjppbnNwZWN0b3JQcm9j
ZXNzUG9vbCgpCkBAIC00MzAsNyArNDMwLDcgQEAgc3RhdGljIHZvaWQgZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS1BhZ2VSZWYsIFdLRnJhbWVSZWYgZnJhbWVSZWYsIFdLRnIKIHZv
aWQgV2ViSW5zcGVjdG9yUHJveHk6OmVuYWJsZVJlbW90ZUluc3BlY3Rpb24oKQogewogICAgIGlm
ICghbV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKQotICAgICAgICBtX3JlbW90ZUluc3BlY3Rpb25Q
YWdlSWQgPSBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLnJlZ2lzdGVyUGFnZSh0aGlzKTsK
KyAgICAgICAgbV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkID0gV2ViSW5zcGVjdG9yU2VydmVyOjpz
aW5nbGV0b24oKS5yZWdpc3RlclBhZ2UodGhpcyk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJv
eHk6OnJlbW90ZUZyb250ZW5kQ29ubmVjdGVkKCkKQEAgLTY0MCw3ICs2NDAsNyBAQCBib29sIFdl
Ykluc3BlY3RvclByb3h5OjpzaG91bGRPcGVuQXR0YWNoZWQoKQogdm9pZCBXZWJJbnNwZWN0b3JQ
cm94eTo6c2VuZE1lc3NhZ2VUb1JlbW90ZUZyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IHsKICAgICBBU1NFUlQobV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKTsKLSAgICBXZWJJbnNwZWN0
b3JTZXJ2ZXI6OnNoYXJlZCgpLnNlbmRNZXNzYWdlT3ZlckNvbm5lY3Rpb24obV9yZW1vdGVJbnNw
ZWN0aW9uUGFnZUlkLCBtZXNzYWdlKTsKKyAgICBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRv
bigpLnNlbmRNZXNzYWdlT3ZlckNvbm5lY3Rpb24obV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkLCBt
ZXNzYWdlKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IGMwMTBmZGVmMTIxM2RkM2ExNDY2YzJlMWI3NjIxODY3NWM3NTE4ODMuLmEz
NDEzMTliMjJiNjRlOTlhZGMzNGY2OTM1MjNlNjJjOGExNjQ3MmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgcHVibGljOgog
ICAgICAgICBSZWZQdHI8TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1
b3RhOjpEZWxheWVkUmVwbHk+IHJlcGx5OwogICAgIH07CiAKLSAgICBzdGF0aWMgRXhjZWVkZWRE
YXRhYmFzZVF1b3RhUmVjb3JkcyYgc2hhcmVkKCk7CisgICAgc3RhdGljIEV4Y2VlZGVkRGF0YWJh
c2VRdW90YVJlY29yZHMmIHNpbmdsZXRvbigpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlY29y
ZD4gY3JlYXRlUmVjb3JkKHVpbnQ2NF90IGZyYW1lSUQsIFN0cmluZyBvcmlnaW5JZGVudGlmaWVy
LAogICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lLCBTdHJpbmcgZGlzcGxheU5hbWUsIHVpbnQ2
NF90IGN1cnJlbnRRdW90YSwKQEAgLTE5NCw3ICsxOTQsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZWNvcmQ+IG1fY3VycmVudFJlY29yZDsKIH07CiAKLUV4Y2VlZGVkRGF0YWJh
c2VRdW90YVJlY29yZHMmIEV4Y2VlZGVkRGF0YWJhc2VRdW90YVJlY29yZHM6OnNoYXJlZCgpCitF
eGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRzJiBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNvcmRz
OjpzaW5nbGV0b24oKQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFeGNlZWRlZERhdGFi
YXNlUXVvdGFSZWNvcmRzPiByZWNvcmRzOwogICAgIHJldHVybiByZWNvcmRzOwpAQCAtOTg0LDcg
Kzk4NCw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2Vi
QmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKICAgICAgICAgcmV0dXJuOwogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCi0gICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLnJlY29yZFNuYXBzaG90
KCp0aGlzLCBpdGVtKTsKKyAgICBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkucmVjb3Jk
U25hcHNob3QoKnRoaXMsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAj
ZW5kaWYKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpmaW5kUGx1Z2lu
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIHVpbnQzMl90IHByb2Nlc3NUeXBlLCBjb25zCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwbHVnaW5Qcm9jZXNzVG9rZW4gPSBQbHVnaW5Qcm9j
ZXNzTWFuYWdlcjo6c2hhcmVkKCkucGx1Z2luUHJvY2Vzc1Rva2VuKHBsdWdpbiwgc3RhdGljX2Nh
c3Q8UGx1Z2luUHJvY2Vzc1R5cGU+KHByb2Nlc3NUeXBlKSwgcGx1Z2luUHJvY2Vzc1NhbmRib3hQ
b2xpY3kpOworICAgIHBsdWdpblByb2Nlc3NUb2tlbiA9IFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpz
aW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzVG9rZW4ocGx1Z2luLCBzdGF0aWNfY2FzdDxQbHVnaW5Q
cm9jZXNzVHlwZT4ocHJvY2Vzc1R5cGUpLCBwbHVnaW5Qcm9jZXNzU2FuZGJveFBvbGljeSk7CiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKQEAgLTQ3NjEsNyArNDc2
MSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VQcm94eSh1aW50NjRfdCBmcmFtZUlELCBQYXNzCiAKIHZvaWQgV2ViUGFnZVByb3h5OjpleGNl
ZWRlZERhdGFiYXNlUXVvdGEodWludDY0X3QgZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBvcmlnaW5J
ZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBkaXNw
bGF5TmFtZSwgdWludDY0X3QgY3VycmVudFF1b3RhLCB1aW50NjRfdCBjdXJyZW50T3JpZ2luVXNh
Z2UsIHVpbnQ2NF90IGN1cnJlbnREYXRhYmFzZVVzYWdlLCB1aW50NjRfdCBleHBlY3RlZFVzYWdl
LCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4Y2VlZGVkRGF0YWJhc2VRdW90
YTo6RGVsYXllZFJlcGx5PiByZXBseSkKIHsKLSAgICBFeGNlZWRlZERhdGFiYXNlUXVvdGFSZWNv
cmRzJiByZWNvcmRzID0gRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3Jkczo6c2hhcmVkKCk7Cisg
ICAgRXhjZWVkZWREYXRhYmFzZVF1b3RhUmVjb3JkcyYgcmVjb3JkcyA9IEV4Y2VlZGVkRGF0YWJh
c2VRdW90YVJlY29yZHM6OnNpbmdsZXRvbigpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxFeGNlZWRl
ZERhdGFiYXNlUXVvdGFSZWNvcmRzOjpSZWNvcmQ+IG5ld1JlY29yZCA9IHJlY29yZHMuY3JlYXRl
UmVjb3JkKGZyYW1lSUQsCiAgICAgICAgIG9yaWdpbklkZW50aWZpZXIsIGRhdGFiYXNlTmFtZSwg
ZGlzcGxheU5hbWUsIGN1cnJlbnRRdW90YSwgY3VycmVudE9yaWdpblVzYWdlLAogICAgICAgICBj
dXJyZW50RGF0YWJhc2VVc2FnZSwgZXhwZWN0ZWRVc2FnZSwgcmVwbHkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmNwcAppbmRleCAzOGMxOWUxZmYx
ODQ5NWZlYWYxMDljZWZjYzg4NGMwMmM2YjBkOGExLi45MDk3Y2I1MmIyMGJiNjY0OWZhMDE3ZTMz
YTM5ZDBkZmUwNzYwODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFzdGVib2FyZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFz
dGVib2FyZFByb3h5LmNwcApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAotV2ViUGFzdGVib2FyZFByb3h5JiBXZWJQYXN0ZWJvYXJkUHJveHk6OnNoYXJlZCgpCitXZWJQ
YXN0ZWJvYXJkUHJveHkmIFdlYlBhc3RlYm9hcmRQcm94eTo6c2luZ2xldG9uKCkKIHsKICAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CiAgICAgc3RhdGljIExhenlOZXZlckRlc3Ry
b3llZDxXZWJQYXN0ZWJvYXJkUHJveHk+IHByb3h5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhc3RlYm9hcmRQcm94eS5oCmluZGV4IDJlNDY3Mzg4MDAzMWQ2ZWQ2Y2E5M2MzZWY2
ZDY3MDBkYjU4OTE0ZDQuLjQ5NGFhYzlmODA5Njg3NGNjMDU1ZmJhODQzN2RlNTI2NjdmYTIzMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYXN0ZWJvYXJkUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFzdGVib2FyZFByb3h5LmgKQEAg
LTQ2LDcgKzQ2LDcgQEAgY2xhc3MgV2ViUGFzdGVib2FyZFByb3h5IDogcHVibGljIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJQYXN0ZWJvYXJkUHJv
eHkpOwogICAgIGZyaWVuZCBjbGFzcyBMYXp5TmV2ZXJEZXN0cm95ZWQ8V2ViUGFzdGVib2FyZFBy
b3h5PjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2ViUGFzdGVib2FyZFByb3h5JiBzaGFyZWQoKTsK
KyAgICBzdGF0aWMgV2ViUGFzdGVib2FyZFByb3h5JiBzaW5nbGV0b24oKTsKIAogICAgIHZvaWQg
YWRkV2ViUHJvY2Vzc1Byb3h5KFdlYlByb2Nlc3NQcm94eSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCA4NmE2ZTIwNTRjMGFjODMwMjBhZTBl
MGViNmM2Y2M3ZTNlOTMxMDU3Li5iYTQ0MDJhZTU3ZjU5NjUxMmY4MTkwYjA4ZTcyZjM5MzBiZGFm
ZDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAg
LTY3NSwxMCArNjc1LDExIEBAIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0
ZU5ld1dlYlByb2Nlc3MoKQogICAgIHBhcmFtZXRlcnMubWVtb3J5Q2FjaGVEaXNhYmxlZCA9IG1f
bWVtb3J5Q2FjaGVEaXNhYmxlZDsKIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAg
IHBhcmFtZXRlcnMuaGFzSW1hZ2VTZXJ2aWNlcyA9IFNlcnZpY2VzQ29udHJvbGxlcjo6c2hhcmVk
KCkuaGFzSW1hZ2VTZXJ2aWNlcygpOwotICAgIHBhcmFtZXRlcnMuaGFzU2VsZWN0aW9uU2Vydmlj
ZXMgPSBTZXJ2aWNlc0NvbnRyb2xsZXI6OnNoYXJlZCgpLmhhc1NlbGVjdGlvblNlcnZpY2VzKCk7
Ci0gICAgcGFyYW1ldGVycy5oYXNSaWNoQ29udGVudFNlcnZpY2VzID0gU2VydmljZXNDb250cm9s
bGVyOjpzaGFyZWQoKS5oYXNSaWNoQ29udGVudFNlcnZpY2VzKCk7Ci0gICAgU2VydmljZXNDb250
cm9sbGVyOjpzaGFyZWQoKS5yZWZyZXNoRXhpc3RpbmdTZXJ2aWNlcygpOworICAgIGF1dG8mIHNl
cnZpY2VDb250cm9sbGVyID0gU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKTsKKyAgICBw
YXJhbWV0ZXJzLmhhc0ltYWdlU2VydmljZXMgPSBzZXJ2aWNlQ29udHJvbGxlci5oYXNJbWFnZVNl
cnZpY2VzKCk7CisgICAgcGFyYW1ldGVycy5oYXNTZWxlY3Rpb25TZXJ2aWNlcyA9IHNlcnZpY2VD
b250cm9sbGVyLmhhc1NlbGVjdGlvblNlcnZpY2VzKCk7CisgICAgcGFyYW1ldGVycy5oYXNSaWNo
Q29udGVudFNlcnZpY2VzID0gc2VydmljZUNvbnRyb2xsZXIuaGFzUmljaENvbnRlbnRTZXJ2aWNl
cygpOworICAgIHNlcnZpY2VDb250cm9sbGVyLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CiAj
ZW5kaWYKIAogICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFyYW1ldGVycwpAQCAt
NzE1LDcgKzcxNiw3IEBAIFdlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5l
d1dlYlByb2Nlc3MoKQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgLy8gSW5p
dGlhbGl6ZSByZW1vdGUgaW5zcGVjdG9yIGNvbm5lY3Rpb24gbm93IHRoYXQgd2UgaGF2ZSBhIHN1
Yi1wcm9jZXNzIHRoYXQgaXMgaG9zdGluZyBvbmUgb2Ygb3VyIHdlYiB2aWV3cy4KLSAgICBJbnNw
ZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2hhcmVkKCk7IAorICAgIEluc3BlY3Rvcjo6UmVtb3Rl
SW5zcGVjdG9yOjpzaW5nbGV0b24oKTsgCiAjZW5kaWYKIAogICAgIHJldHVybiBwcm9jZXNzOwpA
QCAtMTEwNSw3ICsxMTA2LDcgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RhcnRNZW1vcnlTYW1w
bGVyKGNvbnN0IGRvdWJsZSBpbnRlcnZhbCkKICAgICAKICAgICAvLyBGb3IgVUlQcm9jZXNzCiAj
aWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQotICAgIFdlYk1lbW9yeVNhbXBsZXI6OnNoYXJlZCgp
LT5zdGFydChpbnRlcnZhbCk7CisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0
YXJ0KGludGVydmFsKTsKICNlbmRpZgogICAgIAogICAgIC8vIEZvciBXZWJQcm9jZXNzCkBAIC0x
MTI0LDcgKzExMjUsNyBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigp
CiAgICAgCiAgICAgLy8gRm9yIFVJUHJvY2VzcwogI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikK
LSAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RvcCgpOworICAgIFdlYk1lbW9yeVNh
bXBsZXI6OnNpbmdsZXRvbigpLT5zdG9wKCk7CiAjZW5kaWYKIAogICAgIHNlbmRUb0FsbFByb2Nl
c3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RvcE1lbW9yeVNhbXBsZXIoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNzUHJveHkuY3BwCmluZGV4IGMyNTdhMzg4MmNh
NWRiY2UyNTZiODljOTg2NGZlNGJlMGVhNTIyYmIuLmRkMDA2NDgwNGU4MDc0ZjIzNjc5NTc1NjRh
ODY4MmExMTQxODVmZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
cm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UHJveHkuY3BwCkBAIC05OSw3ICs5OSw3IEBAIFdlYlByb2Nlc3NQcm94eTo6V2ViUHJvY2Vzc1By
b3h5KFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKICAgICAsIG1fbnVtYmVyT2ZUaW1lc1N1
ZGRlblRlcm1pbmF0aW9uV2FzRGlzYWJsZWQoMCkKICAgICAsIG1fdGhyb3R0bGVyKHN0ZDo6bWFr
ZV91bmlxdWU8UHJvY2Vzc1Rocm90dGxlcj4odGhpcykpCiB7Ci0gICAgV2ViUGFzdGVib2FyZFBy
b3h5OjpzaGFyZWQoKS5hZGRXZWJQcm9jZXNzUHJveHkoKnRoaXMpOworICAgIFdlYlBhc3RlYm9h
cmRQcm94eTo6c2luZ2xldG9uKCkuYWRkV2ViUHJvY2Vzc1Byb3h5KCp0aGlzKTsKIAogICAgIGNv
bm5lY3QoKTsKIH0KQEAgLTEyNiw3ICsxMjYsNyBAQCB2b2lkIFdlYlByb2Nlc3NQcm94eTo6Y29u
bmVjdGlvbldpbGxPcGVuKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKICAgICBBU1NFUlQo
dGhpcy0+Y29ubmVjdGlvbigpID09ICZjb25uZWN0aW9uKTsKIAogI2lmIEVOQUJMRShTRUNfSVRF
TV9TSElNKQotICAgIFNlY0l0ZW1TaGltUHJveHk6OnNoYXJlZCgpLmluaXRpYWxpemVDb25uZWN0
aW9uKGNvbm5lY3Rpb24pOworICAgIFNlY0l0ZW1TaGltUHJveHk6OnNpbmdsZXRvbigpLmluaXRp
YWxpemVDb25uZWN0aW9uKGNvbm5lY3Rpb24pOwogI2VuZGlmCiAKICAgICBmb3IgKGF1dG8mIHBh
Z2UgOiBtX3BhZ2VNYXAudmFsdWVzKCkpCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBXZWJQcm9j
ZXNzUHJveHk6OmdldFBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4mIHBs
dWdpbnMsIFZlY3QKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIHZvaWQgV2ViUHJv
Y2Vzc1Byb3h5OjpnZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbih1aW50NjRfdCBwbHVnaW5Qcm9j
ZXNzVG9rZW4sIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6R2V0UGx1Z2lu
UHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4gcmVwbHkpCiB7Ci0gICAgUGx1Z2luUHJv
Y2Vzc01hbmFnZXI6OnNoYXJlZCgpLmdldFBsdWdpblByb2Nlc3NDb25uZWN0aW9uKHBsdWdpblBy
b2Nlc3NUb2tlbiwgcmVwbHkpOworICAgIFBsdWdpblByb2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24o
KS5nZXRQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihwbHVnaW5Qcm9jZXNzVG9rZW4sIHJlcGx5KTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4
dENoZWNrZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmNw
cAppbmRleCBhZjQ1OWEzYjAzZTVmNWI4MWFlY2NjMDRiMDRlOGVjZTdiMjg3NjFhLi44YTg1NDM0
ZWE4MTIxODQ1MDgxOWI3NWEzOGFkNmY4ODViZTZjMzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJUZXh0Q2hlY2tlci5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKLVdlYlRleHRDaGVja2VyKiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkKK1dl
YlRleHRDaGVja2VyKiBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMg
V2ViVGV4dENoZWNrZXIqIHRleHRDaGVja2VyID0gYWRvcHRSZWYobmV3IFdlYlRleHRDaGVja2Vy
KS5sZWFrUmVmKCk7CiAgICAgcmV0dXJuIHRleHRDaGVja2VyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlRleHRDaGVja2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVGV4dENoZWNrZXIuaAppbmRleCAzNTllODFlZTUzNTUzMjM1ZTVhNTJiNDQ4Y2Q5
ZjBlMDE2YzIxN2FlLi43Yzk0NWM3MjYyN2EyZmZiYmZhMDI3YmQxNDBhOWFjMGMyNTQxNGE2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViVGV4dENoZWNrZXIuaApAQCAtMzcsNyArMzcs
NyBAQCBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIFdlYlRleHRDaGVja2VyIDogcHVibGlj
IEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6VGV4dENoZWNrZXI+IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgV2ViVGV4dENoZWNrZXIqIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJU
ZXh0Q2hlY2tlciogc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHNldENsaWVudChjb25zdCBXS1Rl
eHRDaGVja2VyQ2xpZW50QmFzZSopOwogICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQo
KSB7IHJldHVybiBtX2NsaWVudDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2VmbC9Fd2tEZWJ1Zy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9Fd2tEZWJ1
Zy5oCmluZGV4IDBmMWU0OWI3NmY2N2JmZTQxYzFkZTA0YzFjYWUzOThmOWMyYjg4MjEuLjNiNGU0
YTlhMTk3ZjliNzk5YjBhMTQ1NWIyOTljZjRlZmVmOTFkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9lZmwvRXdrRGVidWcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvZWZsL0V3a0RlYnVnLmgKQEAgLTI5LDEwICsyOSwxMCBAQAogCiAjaW5jbHVkZSAiZXdr
X21haW5fcHJpdmF0ZS5oIgogCi0jZGVmaW5lIENSSVRJQ0FMKC4uLikgRUlOQV9MT0dfRE9NX0NS
SVQoRXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQoKSwgX19WQV9BUkdTX18pCi0jZGVmaW5l
IEVSUiguLi4pIEVJTkFfTE9HX0RPTV9FUlIoRXdrTWFpbjo6c2hhcmVkKCkubG9nRG9tYWluSWQo
KSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIFdBUk4oLi4uKSBFSU5BX0xPR19ET01fV0FSTihFd2tN
YWluOjpzaGFyZWQoKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgSU5GTygu
Li4pIEVJTkFfTE9HX0RPTV9JTkZPKEV3a01haW46OnNoYXJlZCgpLmxvZ0RvbWFpbklkKCksIF9f
VkFfQVJHU19fKQotI2RlZmluZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKEV3a01haW46OnNo
YXJlZCgpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBDUklUSUNBTCguLi4p
IEVJTkFfTE9HX0RPTV9DUklUKEV3a01haW46OnNpbmdsZXRvbigpLmxvZ0RvbWFpbklkKCksIF9f
VkFfQVJHU19fKQorI2RlZmluZSBFUlIoLi4uKSBFSU5BX0xPR19ET01fRVJSKEV3a01haW46OnNp
bmdsZXRvbigpLmxvZ0RvbWFpbklkKCksIF9fVkFfQVJHU19fKQorI2RlZmluZSBXQVJOKC4uLikg
RUlOQV9MT0dfRE9NX1dBUk4oRXdrTWFpbjo6c2luZ2xldG9uKCkubG9nRG9tYWluSWQoKSwgX19W
QV9BUkdTX18pCisjZGVmaW5lIElORk8oLi4uKSBFSU5BX0xPR19ET01fSU5GTyhFd2tNYWluOjpz
aW5nbGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgREJHKC4uLikg
RUlOQV9MT0dfRE9NX0RCRyhFd2tNYWluOjpzaW5nbGV0b24oKS5sb2dEb21haW5JZCgpLCBfX1ZB
X0FSR1NfXykKIAogI2VuZGlmIC8vIEV3a0RlYnVnX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9lZmwvVGV4dENoZWNrZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVmbC5jcHAKaW5kZXggYjM3ZDA5YTc3ZWEwY2VmYzIwNmVk
ZTliNzhiZTQxMGJhNmE4OTk0ZC4uMTdiZDI1M2RmOTcwMzFjNGI5MTQwNGIzM2ViMjU4NmNjYjMx
OGYzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tl
ckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9UZXh0Q2hlY2tlckVm
bC5jcHAKQEAgLTcyLDcgKzcyLDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6c2V0Q29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxDaGVja2kKICAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7CiAKICAgICAvLyBOb3RpZnkgdGhlIGNsaWVudCBhYm91
dCB0aGUgc2V0dGluZyBjaGFuZ2UuCi0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGll
bnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50
KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxsQ2hl
Y2tpbmdFbmFibGVkKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKTsKICNlbmRpZgpAQCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgVGV4dENo
ZWNrZXI6OmdyYW1tYXJDaGVja2luZ0VuYWJsZWRTdGF0ZUNoYW5nZWQoYm9vbCkKIGludDY0X3Qg
VGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQog
ewogI2lmIEVOQUJMRShTUEVMTENIRUNLKQotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hh
cmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFnZSk7CisgICAgcmV0dXJu
IFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudW5pcXVlU3BlbGxEb2N1bWVu
dFRhZyhwYWdlKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2UpOwogICAgIHJldHVybiAw
OwpAQCAtMTEzLDcgKzExMyw3IEBAIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1ZVNwZWxsRG9j
dW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VTcGVs
bERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykK
LSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVu
dFdpdGhUYWcodGFnKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgp
LmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KHRhZyk7CiAjZW5kaWYKQEAgLTE5NCw3ICsxOTQsNyBAQCBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiBUZXh0Q2hlY2tlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoaW50NjRfdCBzcGVsbERvY3Vt
ZQogdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGludDY0X3Qgc3BlbGxE
b2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKICNpZiBFTkFCTEUoU1BFTExDSEVDSykK
LSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0
cmluZyhzcGVsbERvY3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlz
c3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFdlYlRleHRDaGVja2Vy
OjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1l
bnRUYWcsIHRleHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0aW9u
LCBtaXNzcGVsbGluZ0xlbmd0aCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzcGVsbERvY3Vt
ZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0odGV4dCk7CkBAIC0yMzMsNyArMjMzLDcgQEAgdm9p
ZCBUZXh0Q2hlY2tlcjo6dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGludDY0X3Qs
IGNvbnN0IFN0cmluZyYsIGNvbnMKIHZvaWQgVGV4dENoZWNrZXI6OmdldEd1ZXNzZXNGb3JXb3Jk
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkLCBjb25zdCBTdHJp
bmcmICwgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0sp
Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChz
cGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2lu
Z2xldG9uKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQs
IGd1ZXNzZXMpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAg
ICAgVU5VU0VEX1BBUkFNKHdvcmQpOwpAQCAtMjQ0LDcgKzI0NCw3IEBAIHZvaWQgVGV4dENoZWNr
ZXI6OmdldEd1ZXNzZXNGb3JXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3Ry
aW5nJiB3b3JkCiB2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVsbERvY3Vt
ZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7CiAjaWYgRU5BQkxFKFNQRUxMQ0hFQ0spCi0g
ICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1
bWVudFRhZywgd29yZCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQo
KS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShzcGVsbERvY3VtZW50VGFnKTsKICAgICBVTlVTRURfUEFSQU0od29yZCk7CkBAIC0yNTQs
NyArMjU0LDcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6bGVhcm5Xb3JkKGludDY0X3Qgc3BlbGxEb2N1
bWVudFRhZywgY29uc3QgU3RyaW5nJiB3b3JkKQogdm9pZCBUZXh0Q2hlY2tlcjo6aWdub3JlV29y
ZChpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYgd29yZCkKIHsKICNpZiBF
TkFCTEUoU1BFTExDSEVDSykKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgp
Lmlnbm9yZVdvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7CisgICAgV2ViVGV4dENoZWNrZXI6
OnNpbmdsZXRvbigpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQp
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3BlbGxEb2N1bWVudFRhZyk7CiAgICAgVU5VU0VE
X1BBUkFNKHdvcmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9X
ZWJDb250ZXh0RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9lZmwvV2ViQ29udGV4
dEVmbC5jcHAKaW5kZXggYjY1NDcyNmMxNTY1MGJhN2NhZTljNzVhYjFmNTlmMGEzOTgzMDQzNC4u
ZmZmYjJmZWZjOGM1OWY0OWYwNDBmYTY2OTBlNWFkMmUwYzkyM2MwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2VmbC9XZWJDb250ZXh0RWZsLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvZWZsL1dlYkNvbnRleHRFZmwuY3BwCkBAIC03MCw3ICs3MCw3IEBA
IHN0YXRpYyB2b2lkIGluaXRpYWxpemVJbnNwZWN0b3JTZXJ2ZXIoKQogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGRuJ3QgcGFyc2UgJXMsIHdyb25nIGZvcm1hdD8g
VXNpbmcgMTI3LjAuMC4xOjI5OTkgaW5zdGVhZC4iLCBzZXJ2ZXJBZGRyZXNzLnV0ZjgoKS5kYXRh
KCkpOwogCi0gICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaGFyZWQoKS5saXN0ZW4o
YmluZEFkZHJlc3MsIHBvcnQpKQorICAgICAgICBpZiAoIVdlYkluc3BlY3RvclNlcnZlcjo6c2lu
Z2xldG9uKCkubGlzdGVuKGJpbmRBZGRyZXNzLCBwb3J0KSkKICAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGRuJ3Qgc3RhcnQgbGlzdGVuaW5nIG9uOiBJUCBhZGRyZXNzPSVzLCBwb3J0PSVkLiIs
IGJpbmRBZGRyZXNzLnV0ZjgoKS5kYXRhKCksIHBvcnQpOwogCiAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvVGV4dENoZWNrZXJHdGsuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKaW5kZXgg
ZGUxOTRhZDg5ZTI0ZGY0YjEyNjc5OWQxYjYyOWE1OTA1YzlmMjg3YS4uNGZmODI0NDY5ZGUwYTdi
NzA2MTQ4NDFlNDNhZmJjYjRmOTQ2NjJlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9UZXh0Q2hlY2tlckd0ay5jcHAKQEAgLTQzLDcgKzQzLDcgQEAgY29uc3QgVGV4dENo
ZWNrZXJTdGF0ZSYgVGV4dENoZWNrZXI6OnN0YXRlKCkKICAgICBpZiAoZGlkSW5pdGlhbGl6ZVN0
YXRlKQogICAgICAgICByZXR1cm4gdGV4dENoZWNrZXJTdGF0ZTsKIAotICAgIFdlYlRleHRDaGVj
a2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpOwor
ICAgIFdlYlRleHRDaGVja2VyQ2xpZW50JiBjbGllbnQgPSBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xl
dG9uKCktPmNsaWVudCgpOwogICAgIHRleHRDaGVja2VyU3RhdGUuaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQgPSBjbGllbnQuY29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7
CiAgICAgdGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSAgY2xpZW50
LmdyYW1tYXJDaGVja2luZ0VuYWJsZWQoKTsKIApAQCAtNTQsNyArNTQsNyBAQCBjb25zdCBUZXh0
Q2hlY2tlclN0YXRlJiBUZXh0Q2hlY2tlcjo6c3RhdGUoKQogICAKIGJvb2wgVGV4dENoZWNrZXI6
OmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdBbGxvd2VkKCkKIHsKLSAgICByZXR1cm4gV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5jb250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93
ZWQoKTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5j
b250aW51b3VzU3BlbGxDaGVja2luZ0FsbG93ZWQoKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6
c2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wgaXNDb250aW51b3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQpCkBAIC02Miw3ICs2Miw3IEBAIHZvaWQgVGV4dENoZWNrZXI6OnNldENv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZChib29sIGlzQ29udGludW91c1NwZWxsQ2hlY2tp
CiAgICAgaWYgKHN0YXRlKCkuaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPT0gaXND
b250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQpCiAgICAgICAgIHJldHVybjsKICAgICB0ZXh0
Q2hlY2tlclN0YXRlLmlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gaXNDb250aW51
b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5j
bGllbnQoKS5zZXRDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xp
ZW50KCkuc2V0Q29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNr
aW5nRW5hYmxlZChib29sIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCkKQEAgLTcwLDcgKzcwLDcg
QEAgdm9pZCBUZXh0Q2hlY2tlcjo6c2V0R3JhbW1hckNoZWNraW5nRW5hYmxlZChib29sIGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCkKICAgICBpZiAoc3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQgPT0gaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKQogICAgICAgICByZXR1cm47CiAgICAg
dGV4dENoZWNrZXJTdGF0ZS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQgPSBpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQ7Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5zZXRH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CisgICAgV2Vi
VGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5zZXRHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCkBA
IC04NSw1NyArODUsNTcgQEAgdm9pZCBUZXh0Q2hlY2tlcjo6Z3JhbW1hckNoZWNraW5nRW5hYmxl
ZFN0YXRlQ2hhbmdlZChib29sIGVuYWJsZWQpCiAKIGludDY0X3QgVGV4dENoZWNrZXI6OnVuaXF1
ZVNwZWxsRG9jdW1lbnRUYWcoV2ViUGFnZVByb3h5KiBwYWdlKQogewotICAgIHJldHVybiBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVuaXF1ZVNwZWxsRG9jdW1lbnRUYWcocGFn
ZSk7CisgICAgcmV0dXJuIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudW5p
cXVlU3BlbGxEb2N1bWVudFRhZyhwYWdlKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y2xvc2VT
cGVsbERvY3VtZW50V2l0aFRhZyhpbnQ2NF90IHRhZykKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6
c2hhcmVkKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdpdGhUYWcodGFnKTsKKyAgICBX
ZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLmNsb3NlU3BlbGxEb2N1bWVudFdp
dGhUYWcodGFnKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBpbnQzMl90JiBtaXNz
cGVsbGluZ0xvY2F0aW9uLCBpbnQzMl90JiBtaXNzcGVsbGluZ0xlbmd0aCkKIHsKLSAgICBXZWJU
ZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzcGVs
bERvY3VtZW50VGFnLCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgbWlzc3BlbGxpbmdM
b2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0
b24oKS0+Y2xpZW50KCkuY2hlY2tTcGVsbGluZ09mU3RyaW5nKHNwZWxsRG9jdW1lbnRUYWcsIHRl
eHQudG9TdHJpbmdXaXRob3V0Q29weWluZygpLCBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OmNoZWNrR3JhbW1hck9mU3RyaW5n
KGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgU3RyaW5nVmlldyB0ZXh0LCBWZWN0b3I8V2ViQ29y
ZTo6R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQzMl90JiBiYWRHcmFtbWFyTG9j
YXRpb24sIGludDMyX3QmIGJhZEdyYW1tYXJMZW5ndGgpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFn
LCB0ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1t
YXJMb2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgV2ViVGV4dENoZWNrZXI6OnNpbmds
ZXRvbigpLT5jbGllbnQoKS5jaGVja0dyYW1tYXJPZlN0cmluZyhzcGVsbERvY3VtZW50VGFnLCB0
ZXh0LnRvU3RyaW5nV2l0aG91dENvcHlpbmcoKSwgZ3JhbW1hckRldGFpbHMsIGJhZEdyYW1tYXJM
b2NhdGlvbiwgYmFkR3JhbW1hckxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dENoZWNrZXI6OnNwZWxs
aW5nVUlJc1Nob3dpbmcoKQogewotICAgIHJldHVybiBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCkt
PmNsaWVudCgpLnNwZWxsaW5nVUlJc1Nob3dpbmcoKTsKKyAgICByZXR1cm4gV2ViVGV4dENoZWNr
ZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5zcGVsbGluZ1VJSXNTaG93aW5nKCk7CiB9CiAKIHZv
aWQgVGV4dENoZWNrZXI6OnRvZ2dsZVNwZWxsaW5nVUlJc1Nob3dpbmcoKQogewotICAgIFdlYlRl
eHRDaGVja2VyOjpzaGFyZWQoKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxpbmdVSUlzU2hvd2luZygp
OworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkudG9nZ2xlU3BlbGxp
bmdVSUlzU2hvd2luZygpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjp1cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKGludDY0X3Qgc3BlbGxEb2N1bWVudFRhZywgY29uc3QgU3RyaW5n
JiBtaXNzcGVsbGVkV29yZCkKIHsKLSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVu
dCgpLnVwZGF0ZVNwZWxsaW5nVUlXaXRoTWlzc3BlbGxlZFdvcmQoc3BlbGxEb2N1bWVudFRhZywg
bWlzc3BlbGxlZFdvcmQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50
KCkudXBkYXRlU3BlbGxpbmdVSVdpdGhNaXNzcGVsbGVkV29yZChzcGVsbERvY3VtZW50VGFnLCBt
aXNzcGVsbGVkV29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6OnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhpbnQ2NF90IHNwZWxsRG9jdW1lbnRUYWcsIGNvbnN0IFN0cmluZyYg
YmFkR3JhbW1hclBocmFzZSwgY29uc3QgR3JhbW1hckRldGFpbCYgZ3JhbW1hckRldGFpbCkKIHsK
LSAgICBXZWJUZXh0Q2hlY2tlcjo6c2hhcmVkKCktPmNsaWVudCgpLnVwZGF0ZVNwZWxsaW5nVUlX
aXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFtbWFyUGhyYXNlLCBncmFt
bWFyRGV0YWlsKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2luZ2xldG9uKCktPmNsaWVudCgpLnVw
ZGF0ZVNwZWxsaW5nVUlXaXRoR3JhbW1hclN0cmluZyhzcGVsbERvY3VtZW50VGFnLCBiYWRHcmFt
bWFyUGhyYXNlLCBncmFtbWFyRGV0YWlsKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6Z2V0R3Vl
c3Nlc0ZvcldvcmQoaW50NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQs
IGNvbnN0IFN0cmluZyYgLyogY29udGV4dCAqLywgVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXMpCiB7
Ci0gICAgV2ViVGV4dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5ndWVzc2VzRm9yV29yZChz
cGVsbERvY3VtZW50VGFnLCB3b3JkLCBndWVzc2VzKTsKKyAgICBXZWJUZXh0Q2hlY2tlcjo6c2lu
Z2xldG9uKCktPmNsaWVudCgpLmd1ZXNzZXNGb3JXb3JkKHNwZWxsRG9jdW1lbnRUYWcsIHdvcmQs
IGd1ZXNzZXMpOwogfQogCiB2b2lkIFRleHRDaGVja2VyOjpsZWFybldvcmQoaW50NjRfdCBzcGVs
bERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgV2ViVGV4dENoZWNrZXI6
OnNoYXJlZCgpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxEb2N1bWVudFRhZywgd29yZCk7Cisg
ICAgV2ViVGV4dENoZWNrZXI6OnNpbmdsZXRvbigpLT5jbGllbnQoKS5sZWFybldvcmQoc3BlbGxE
b2N1bWVudFRhZywgd29yZCk7CiB9CiAKIHZvaWQgVGV4dENoZWNrZXI6Omlnbm9yZVdvcmQoaW50
NjRfdCBzcGVsbERvY3VtZW50VGFnLCBjb25zdCBTdHJpbmcmIHdvcmQpCiB7Ci0gICAgV2ViVGV4
dENoZWNrZXI6OnNoYXJlZCgpLT5jbGllbnQoKS5pZ25vcmVXb3JkKHNwZWxsRG9jdW1lbnRUYWcs
IHdvcmQpOworICAgIFdlYlRleHRDaGVja2VyOjpzaW5nbGV0b24oKS0+Y2xpZW50KCkuaWdub3Jl
V29yZChzcGVsbERvY3VtZW50VGFnLCB3b3JkKTsKIH0KIAogdm9pZCBUZXh0Q2hlY2tlcjo6cmVx
dWVzdENoZWNraW5nT2ZTdHJpbmcoUGFzc1JlZlB0cjxUZXh0Q2hlY2tlckNvbXBsZXRpb24+KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJQcm9jZXNzUG9vbEd0
ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNw
cAppbmRleCA1Y2E1ZWU4ZjY5ODNmMWM2MWM2OWRhYjE2ZTAxYWY4ZGViZDE5MTBiLi4wZjllMGM3
ZmYzNjAxMmY3YmIxYmMzOGViMjM0ODBhNzYwMTc5ODk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NQb29sR3RrLmNwcApAQCAtNzQsNyArNzQsNyBA
QCBzdGF0aWMgdm9pZCBpbml0SW5zcGVjdG9yU2VydmVyKCkKICAgICAgICAgfSBlbHNlCiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkbid0IHBhcnNlICVzLCB3cm9uZyBmb3JtYXQ/IFVzZSAx
MjcuMC4wLjE6Mjk5OSBpbnN0ZWFkLiIsIHNlcnZlckFkZHJlc3MudXRmOCgpLmRhdGEoKSk7CiAK
LSAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNoYXJlZCgpLmxpc3RlbihiaW5kQWRk
cmVzcywgcG9ydCkpCisgICAgICAgIGlmICghV2ViSW5zcGVjdG9yU2VydmVyOjpzaW5nbGV0b24o
KS5saXN0ZW4oYmluZEFkZHJlc3MsIHBvcnQpKQogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZG4ndCBzdGFydCBsaXN0ZW5pbmcgb246IElQIGFkZHJlc3M9JXMsIHBvcnQ9JWQuIiwgYmluZEFk
ZHJlc3MudXRmOCgpLmRhdGEoKSwgcG9ydCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFu
ZGxlcklPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXJJT1MuaAppbmRleCA3OTEwZmFhNTk4NzhkNWIyZDg4MDEzYTc1NzIxNjdiNTExMzc5
M2YzLi43YzM0YzMxNzg0MDVjNjk2NDU3NWEyYzhiZGNlMmE1ZWIwYzE1MmNiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklP
Uy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV2ViTWVtb3J5UHJlc3N1cmVI
YW5kbGVySU9TLmgKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBX
ZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIgewogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3ll
ZDxXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXI+OwogcHVibGljOgotICAgIHN0YXRpYyBXZWJNZW1v
cnlQcmVzc3VyZUhhbmRsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBXZWJNZW1vcnlQcmVzc3Vy
ZUhhbmRsZXImIHNpbmdsZXRvbigpOwogCiBwcml2YXRlOgogICAgIFdlYk1lbW9yeVByZXNzdXJl
SGFuZGxlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XZWJN
ZW1vcnlQcmVzc3VyZUhhbmRsZXJJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQppbmRleCBiZGQyMzYzZTBiNjI5NDY0YmE5
YWI0ODk4MDdjZThiYWY2MTVhOTgwLi4xYmI1ZDNhMTU0ZGE1NTkzMGI5M2E0ODZiZTBlODhmYzUx
NjliNmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYk1lbW9y
eVByZXNzdXJlSGFuZGxlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dlYk1lbW9yeVByZXNzdXJlSGFuZGxlcklPUy5tbQpAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotV2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyJiBXZWJNZW1vcnlQcmVz
c3VyZUhhbmRsZXI6OnNoYXJlZCgpCitXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXImIFdlYk1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8V2ViTWVtb3J5UHJlc3N1cmVIYW5kbGVyPiBtZW1vcnlQcmVzc3VyZUhhbmRsZXI7CiAgICAg
cmV0dXJuIG1lbW9yeVByZXNzdXJlSGFuZGxlcjsKQEAgLTQ4LDcgKzQ4LDcgQEAgV2ViTWVtb3J5
UHJlc3N1cmVIYW5kbGVyOjpXZWJNZW1vcnlQcmVzc3VyZUhhbmRsZXIoKQogICAgIGRpc3BhdGNo
X3NvdXJjZV90IHNvdXJjZSA9IGRpc3BhdGNoX3NvdXJjZV9jcmVhdGUoRElTUEFUQ0hfU09VUkNF
X1RZUEVfTUVNT1JZU1RBVFVTLCAwLCBESVNQQVRDSF9NRU1PUllTVEFUVVNfUFJFU1NVUkVfV0FS
TiwgZGlzcGF0Y2hfZ2V0X21haW5fcXVldWUoKSk7CiAgICAgZGlzcGF0Y2hfc2V0X2NvbnRleHQo
c291cmNlLCB0aGlzKTsKICAgICBkaXNwYXRjaF9zb3VyY2Vfc2V0X2V2ZW50X2hhbmRsZXIoc291
cmNlLCBeewotICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2hhcmVkKCkuZGlzY2FyZFNuYXBz
aG90SW1hZ2VzKCk7CisgICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5kaXNj
YXJkU25hcHNob3RJbWFnZXMoKTsKICAgICB9KTsKICAgICBkaXNwYXRjaF9yZXN1bWUoc291cmNl
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsLm1t
CmluZGV4IDFjODhhYTUzNDQyNWZhMWY4ZGE0YTI2ZmQ2MTM5N2Q0OGZjODFjYTUuLmRjMDk2OTkw
Y2MxMmI2OGQ3ZDhlMjQ4YmQ2Mzg4NTU3MmQwY2MxNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGwubW0KKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbC5tbQpAQCAtMjU1LDcgKzI1NSw3IEBAIGJvb2wg
UGFnZUNsaWVudEltcGw6OmlzVmlld0luV2luZG93KCkKIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6
aXNWaXN1YWxseUlkbGUoKQogewotICAgIHJldHVybiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpz
aGFyZWQoKS5hcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgpIHx8ICFp
c1ZpZXdWaXNpYmxlKCk7CisgICAgcmV0dXJuIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNpbmds
ZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc0hhdmVTdG9wcGVkKCkgfHwgIWlz
Vmlld1Zpc2libGUoKTsKIH0KIAogTGF5ZXJIb3N0aW5nTW9kZSBQYWdlQ2xpZW50SW1wbDo6dmll
d0xheWVySG9zdGluZ01vZGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L21hYy9TZWNJdGVtU2hpbVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMv
U2VjSXRlbVNoaW1Qcm94eS5jcHAKaW5kZXggZjNmODQ0Zjk5MzkzMjE5ZDRmNjFiZjczZTAzNWFk
Y2E0ZWY1M2Y4Yi4uNDIwMzkxMjE1MDNjMjNmYzVjM2NiNzZiMmQ2MzA3MTEzZDU0NTI0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuY3Bw
CkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1TZWNJdGVtU2hpbVBy
b3h5JiBTZWNJdGVtU2hpbVByb3h5OjpzaGFyZWQoKQorU2VjSXRlbVNoaW1Qcm94eSYgU2VjSXRl
bVNoaW1Qcm94eTo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgU2VjSXRlbVNoaW1Qcm94eSog
cHJveHk7CiAgICAgc3RhdGljIGRpc3BhdGNoX29uY2VfdCBvbmNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZWNJdGVtU2hpbVByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0ZW1TaGltUHJveHkuaAppbmRleCAzZTQ5NjI0MGQxZGM3
NTUxNjFhNzVlZjE0NTcyZDY2MzBlNjMzZjJmLi5hYmEzZDE2MzJkM2ExMjIwYmEzMDZiMjc2YWNk
MGY5Zjk0NDg1YTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Nl
Y0l0ZW1TaGltUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlY0l0
ZW1TaGltUHJveHkuaApAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTZWNJdGVtUmVxdWVzdERhdGE7
CiBjbGFzcyBTZWNJdGVtU2hpbVByb3h5IDogcHVibGljIElQQzo6Q29ubmVjdGlvbjo6V29ya1F1
ZXVlTWVzc2FnZVJlY2VpdmVyIHsKIFdURl9NQUtFX05PTkNPUFlBQkxFKFNlY0l0ZW1TaGltUHJv
eHkpOwogcHVibGljOgotICAgIHN0YXRpYyBTZWNJdGVtU2hpbVByb3h5JiBzaGFyZWQoKTsKKyAg
ICBzdGF0aWMgU2VjSXRlbVNoaW1Qcm94eSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIGluaXRp
YWxpemVDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1NlcnZpY2VzQ29udHJvbGxlci5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIuaAppbmRleCA4ZWM3NTVkZGVjY2I3
YjQ2NWExMzI1Nzg0N2E2MGVjMmJjMzc1NWEyLi4zZGY3YWE5NjFlZjQ0NWY0NTg4NmUzM2E5YTAx
NjEwYTI1YmQ3MTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1Nl
cnZpY2VzQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2Vy
dmljZXNDb250cm9sbGVyLmgKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgU2VydmljZXNDb250cm9s
bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXJ2aWNlc0NvbnRyb2xsZXIpOwogICAg
IGZyaWVuZCBjbGFzcyBOZXZlckRlc3Ryb3llZDxTZXJ2aWNlc0NvbnRyb2xsZXI+OwogcHVibGlj
OgotICAgIHN0YXRpYyBTZXJ2aWNlc0NvbnRyb2xsZXImIHNoYXJlZCgpOworICAgIHN0YXRpYyBT
ZXJ2aWNlc0NvbnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgYm9vbCBoYXNJbWFnZVNlcnZp
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbWFnZVNlcnZpY2VzOyB9CiAgICAgYm9vbCBoYXNT
ZWxlY3Rpb25TZXJ2aWNlcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzU2VsZWN0aW9uU2VydmljZXM7
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvU2VydmljZXNDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xs
ZXIubW0KaW5kZXggZTgyYzcyZDkxYzkwNDU5N2JlNDZhODgwMWUzYjFiZGJhNDZkZGMxNy4uMmRk
MzVjNTBmZDk2NDhmMTdhNzEwODM1ZWQ4OWNjOWE1YTJmYzkwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL21hYy9TZXJ2aWNlc0NvbnRyb2xsZXIubW0KQEAgLTM3LDcgKzM3
LDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVNlcnZpY2VzQ29udHJvbGxlciYgU2Vydmlj
ZXNDb250cm9sbGVyOjpzaGFyZWQoKQorU2VydmljZXNDb250cm9sbGVyJiBTZXJ2aWNlc0NvbnRy
b2xsZXI6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNlcnZpY2Vz
Q29udHJvbGxlcj4gc2hhcmVkQ29udHJvbGxlcjsKICAgICByZXR1cm4gc2hhcmVkQ29udHJvbGxl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90
U3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUu
aAppbmRleCA1ODA5M2ZiNGIzNjQ2M2M0MDYwMjAwYmQ0MjNkZjRlMGUyMDU4MjljLi4zZGM5MWYy
OTNkNWFkMzExYWY1ZDE1YWM5MDRhMzEwYzE5MGExZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5oCkBAIC0xMTUsNyArMTE1LDcgQEAg
cHVibGljOgogICAgIFZpZXdTbmFwc2hvdFN0b3JlKCk7CiAgICAgflZpZXdTbmFwc2hvdFN0b3Jl
KCk7CiAKLSAgICBzdGF0aWMgVmlld1NuYXBzaG90U3RvcmUmIHNoYXJlZCgpOworICAgIHN0YXRp
YyBWaWV3U25hcHNob3RTdG9yZSYgc2luZ2xldG9uKCk7CiAKICAgICB2b2lkIHJlY29yZFNuYXBz
aG90KFdlYlBhZ2VQcm94eSYsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmUubW0KaW5kZXggMWE4
YWUwNzE5ZDI5NjljYjg5NWE3NTdiMzNkNzZjY2E3NzI5ZTY4Yi4uMzVkMWYzNTQ4YjFlOWM2ZTcx
NmNlNTg5YTNiYzM5OTNlMWQ2MzA5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlLm1tCkBAIC01Niw3ICs1Niw3IEBAIFZpZXdTbmFwc2hv
dFN0b3JlOjp+Vmlld1NuYXBzaG90U3RvcmUoKQogICAgIGRpc2NhcmRTbmFwc2hvdEltYWdlcygp
OwogfQogCi1WaWV3U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpCitW
aWV3U25hcHNob3RTdG9yZSYgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpCiB7CiAgICAg
c3RhdGljIFZpZXdTbmFwc2hvdFN0b3JlJiBzdG9yZSA9ICpuZXcgVmlld1NuYXBzaG90U3RvcmU7
CiAgICAgcmV0dXJuIHN0b3JlOwpAQCAtMTU2LDcgKzE1Niw3IEBAIFZpZXdTbmFwc2hvdDo6Vmll
d1NuYXBzaG90KHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKICAgICBpZiAoaGFzSW1hZ2UoKSkKLSAgICAg
ICAgVmlld1NuYXBzaG90U3RvcmU6OnNoYXJlZCgpLmRpZEFkZEltYWdlVG9TbmFwc2hvdCgqdGhp
cyk7CisgICAgICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5kaWRBZGRJbWFnZVRv
U25hcHNob3QoKnRoaXMpOwogfQogCiBWaWV3U25hcHNob3Q6On5WaWV3U25hcHNob3QoKQpAQCAt
MTc4LDcgKzE3OCw3IEBAIHZvaWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKICAgICBpZiAo
IWhhc0ltYWdlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpz
aGFyZWQoKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOworICAgIFZpZXdTbmFw
c2hvdFN0b3JlOjpzaW5nbGV0b24oKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMp
OwogCiAjaWYgVVNFX0lPU1VSRkFDRV9WSUVXX1NOQVBTSE9UUwogICAgIG1fc3VyZmFjZSA9IG51
bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRl
eHRNZW51UHJveHlNYWMubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dlYkNvbnRl
eHRNZW51UHJveHlNYWMubW0KaW5kZXggZGM2NDk1YTA0ZmI4ZjdiZmUyNDJmNmUyMDM0NjFkODJl
ZDNhZDQxNS4uZGRiYThhMWM2YTU5NTVkZDA5Njk3N2E4NDlkOWZmZDUyMDNiZGYyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XZWJDb250ZXh0TWVudVByb3h5TWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2ViQ29udGV4dE1lbnVQcm94
eU1hYy5tbQpAQCAtNDExLDcgKzQxMSw3IEBAIHZvaWQgV2ViQ29udGV4dE1lbnVQcm94eU1hYzo6
c2V0dXBTZXJ2aWNlc01lbnUoY29uc3QgQ29udGV4dE1lbnVDb250ZXh0RGF0YSYgY29uCiAgICAg
Ly8gSWYgdGhlcmUgaXMgbm8gc2VydmljZXMgbWVudSwgdGhlbiB0aGUgZXhpc3Rpbmcgc2Vydmlj
ZXMgb24gdGhlIHN5c3RlbSBoYXZlIGNoYW5nZWQsIHNvIHJlZnJlc2ggdGhhdCBsaXN0IG9mIHNl
cnZpY2VzLgogICAgIC8vIElmIDxyZGFyOi8vcHJvYmxlbS8xNzk1NDcwOT4gaXMgcmVzb2x2ZWQg
dGhlbiB3ZSBjYW4gbW9yZSBhY2N1cmF0ZWx5IGtlZXAgdGhlIGxpc3QgdXAgdG8gZGF0ZSB3aXRo
b3V0IHRoaXMgY2FsbC4KICAgICBpZiAoIW1fc2VydmljZXNNZW51KQotICAgICAgICBTZXJ2aWNl
c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CisgICAgICAg
IFNlcnZpY2VzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVmcmVzaEV4aXN0aW5nU2VydmljZXMo
KTsKIH0KIAogdm9pZCBXZWJDb250ZXh0TWVudVByb3h5TWFjOjpjbGVhclNlcnZpY2VzTWVudSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29u
bmVjdGlvbi5oCmluZGV4IDdmMDI4NjViODdiOWY4MjM3MDc3Mjg4MzNlYzYyMmQzNTk3ZTIyMWIu
LjgzOGEzNGZiNWMyZDQ0ZWVlNTQ2NGU1N2VkYzcwZTEwYWRiZDNiMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlvbi5oCkBA
IC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXaW5kb3dTZXJ2ZXJD
b25uZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2luZG93U2VydmVyQ29ubmVjdGlvbiYg
c2hhcmVkKCk7CisgICAgc3RhdGljIFdpbmRvd1NlcnZlckNvbm5lY3Rpb24mIHNpbmdsZXRvbigp
OwogCiAgICAgYm9vbCBhcHBsaWNhdGlvbldpbmRvd01vZGlmaWNhdGlvbnNIYXZlU3RvcHBlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zSGF2ZVN0b3Bw
ZWQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL21hYy9XaW5kb3dT
ZXJ2ZXJDb25uZWN0aW9uLm1tCmluZGV4IDRhN2VmZTZlNTRkMjY2Nzc2YWNhODIwYWU4NjNmZGY1
OTlhMmM4MzkuLjgxOTUzNWMyYWMxMjljOGQ1MjEyMThjOTc1NWM4NGI2MWQ0NGYyODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9tYWMvV2luZG93U2VydmVyQ29ubmVjdGlv
bi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvbWFjL1dpbmRvd1NlcnZlckNvbm5l
Y3Rpb24ubW0KQEAgLTQzLDEyICs0MywxMiBAQCB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246
OmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc1N0b3BwZWQoYm9vbCBzdG9wcGVkKQogCiB2
b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9u
c1N0YXJ0ZWQodWludDMyX3QsIHZvaWQqLCB1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90KQogewot
ICAgIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgpLmFwcGxpY2F0aW9uV2luZG93TW9k
aWZpY2F0aW9uc1N0b3BwZWQoZmFsc2UpOworICAgIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNp
bmdsZXRvbigpLmFwcGxpY2F0aW9uV2luZG93TW9kaWZpY2F0aW9uc1N0b3BwZWQoZmFsc2UpOwog
fQogCiB2b2lkIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OmFwcGxpY2F0aW9uV2luZG93TW9kaWZp
Y2F0aW9uc1N0b3BwZWQodWludDMyX3QsIHZvaWQqLCB1aW50MzJfdCwgdm9pZCosIHVpbnQzMl90
KQogewotICAgIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgpLmFwcGxpY2F0aW9uV2lu
ZG93TW9kaWZpY2F0aW9uc1N0b3BwZWQodHJ1ZSk7CisgICAgV2luZG93U2VydmVyQ29ubmVjdGlv
bjo6c2luZ2xldG9uKCkuYXBwbGljYXRpb25XaW5kb3dNb2RpZmljYXRpb25zU3RvcHBlZCh0cnVl
KTsKIH0KIAogdm9pZCBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjp3aW5kb3dTZXJ2ZXJDb25uZWN0
aW9uU3RhdGVDaGFuZ2VkKCkKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBXaW5kb3dTZXJ2ZXJDb25u
ZWN0aW9uOjp3aW5kb3dTZXJ2ZXJDb25uZWN0aW9uU3RhdGVDaGFuZ2VkKCkKIAogI2VuZGlmCiAK
LVdpbmRvd1NlcnZlckNvbm5lY3Rpb24mIFdpbmRvd1NlcnZlckNvbm5lY3Rpb246OnNoYXJlZCgp
CitXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOjpzaW5nbGV0
b24oKQogewogICAgIHN0YXRpYyBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uJiB3aW5kb3dTZXJ2ZXJD
b25uZWN0aW9uID0gKm5ldyBXaW5kb3dTZXJ2ZXJDb25uZWN0aW9uOwogICAgIHJldHVybiB3aW5k
b3dTZXJ2ZXJDb25uZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5lY3Rpb24uY3BwIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQlNlcnZlckNvbm5l
Y3Rpb24uY3BwCmluZGV4IDQxMTYzZDkxZGY1YjBhNjBmMjU4MjgyODBjNjQzZjA0YzIxMGU2MjYu
LmY2OTBlYjczZThhN2RmNDc2NjczOWI1MmY2MDdiOTdkNjY4ZjYxYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJTZXJ2ZXJD
b25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9J
bmRleGVkREIvV2ViSURCU2VydmVyQ29ubmVjdGlvbi5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgc3Rh
dGljIHVpbnQ2NF90IGdlbmVyYXRlU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXIoKQogUGFzc1Jl
ZlB0cjxXZWJJREJTZXJ2ZXJDb25uZWN0aW9uPiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjpjcmVh
dGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFNlY3VyaXR5T3JpZ2luJiBvcGVu
aW5nT3JpZ2luLCBjb25zdCBTZWN1cml0eU9yaWdpbiYgbWFpbkZyYW1lT3JpZ2luKQogewogICAg
IFJlZlB0cjxXZWJJREJTZXJ2ZXJDb25uZWN0aW9uPiByZXN1bHQgPSBhZG9wdFJlZihuZXcgV2Vi
SURCU2VydmVyQ29ubmVjdGlvbihkYXRhYmFzZU5hbWUsIG9wZW5pbmdPcmlnaW4sIG1haW5GcmFt
ZU9yaWdpbikpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYlRvRGF0YWJhc2VQcm9jZXNz
Q29ubmVjdGlvbigpLT5yZWdpc3RlcldlYklEQlNlcnZlckNvbm5lY3Rpb24oKnJlc3VsdCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9u
KCktPnJlZ2lzdGVyV2ViSURCU2VydmVyQ29ubmVjdGlvbigqcmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2UoKTsKIH0KIApAQCAtNzEsNyArNzEsNyBAQCBXZWJJREJTZXJ2ZXJDb25u
ZWN0aW9uOjpXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdAogCiBXZWJJREJTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViSURCU2VydmVyQ29ubmVjdGlv
bigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25u
ZWN0aW9uKCktPnJlbW92ZVdlYklEQlNlcnZlckNvbm5lY3Rpb24oKnRoaXMpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLndlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbigpLT5yZW1v
dmVXZWJJREJTZXJ2ZXJDb25uZWN0aW9uKCp0aGlzKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYg
aXQgOiBtX3NlcnZlclJlcXVlc3RzKQogICAgICAgICBpdC52YWx1ZS0+cmVxdWVzdEFib3J0ZWQo
KTsKQEAgLTcwNSw3ICs3MDUsNyBAQCB2b2lkIFdlYklEQlNlcnZlckNvbm5lY3Rpb246OmN1cnNv
ckl0ZXJhdGUoSURCQ3Vyc29yQmFja2VuZCYsIGNvbnN0IEN1cnNvckl0ZXJhdAogCiBJUEM6OkNv
bm5lY3Rpb24qIFdlYklEQlNlcnZlckNvbm5lY3Rpb246Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViVG9EYXRhYmFzZVByb2Nl
c3NDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvV2ViVG9EYXRhYmFzZVByb2Nlc3ND
b25uZWN0aW9uLmNwcAppbmRleCA0ZTkyMzkwNTE2ZDlmOGZhYWZkYTA2Y2IwZDgzYzI2OWIzZWVh
ZDk5Li40MmExNTc2MmQwMDQ3M2MzZDdmYThlY2ZjODQ3ODY5YjhhZmVkMjkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0RhdGFiYXNlcy9XZWJUb0RhdGFiYXNlUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L1dlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYzLDcgKzYzLDcgQEAgdm9p
ZCBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGkKIAogdm9pZCBXZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS53ZWJUb0RhdGFiYXNlUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQodGhpcyk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViVG9EYXRhYmFzZVByb2Nlc3NDb25uZWN0
aW9uQ2xvc2VkKHRoaXMpOwogfQogCiB2b2lkIFdlYlRvRGF0YWJhc2VQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Js
b2JSZWdpc3RyeVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvRmlsZUFQSS9C
bG9iUmVnaXN0cnlQcm94eS5jcHAKaW5kZXggNDUzMzVlZDg4NzZhNjEwMjlhMDYzMmE1NGY1MTZh
NTRjYjZiODUzNC4uZGFjZTU3M2YxNmEzNTM4NDYzNWFjYTc1OTkzODcyYmMyMWNmZDFkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9GaWxlQVBJL0Jsb2JSZWdpc3RyeVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0ZpbGVBUEkvQmxvYlJlZ2lz
dHJ5UHJveHkuY3BwCkBAIC00MCw3ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiB2b2lk
IEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckZpbGVCbG9iVVJMKGNvbnN0IFdlYkNvcmU6OlVS
TCYgdXJsLCBQYXNzUmVmUHRyPEJsb2JEYXRhRmlsZVJlZmVyZW5jZT4gZmlsZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNl
c05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51
c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKICAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgZXh0
ZW5zaW9uSGFuZGxlOwogCkBAIC00OCw0MyArNDgsNDMgQEAgdm9pZCBCbG9iUmVnaXN0cnlQcm94
eTo6cmVnaXN0ZXJGaWxlQmxvYlVSTChjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgUGFzc1JlZlB0
cjwKICAgICBpZiAoIWZpbGUtPnBhdGgoKS5pc0VtcHR5KCkpCiAgICAgICAgIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZUhhbmRsZShmaWxlLT5wYXRoKCksIFNhbmRib3hFeHRlbnNpb246OlJlYWRP
bmx5LCBleHRlbnNpb25IYW5kbGUpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJGaWxlQmxvYlVSTCh1cmwsIGZpbGUtPnBhdGgoKSwg
ZXh0ZW5zaW9uSGFuZGxlLCBjb250ZW50VHlwZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyRmlsZUJsb2JVUkwodXJsLCBm
aWxlLT5wYXRoKCksIGV4dGVuc2lvbkhhbmRsZSwgY29udGVudFR5cGUpLCAwKTsKIH0KIAogdm9p
ZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsLCBWZWN0
b3I8QmxvYlBhcnQ+IGJsb2JQYXJ0cywgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKLSAg
ICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAg
IEFTU0VSVChXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3Rl
ckJsb2JVUkwodXJsLCBibG9iUGFydHMsIGNvbnRlbnRUeXBlKSwgMCk7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVnaXN0ZXJCbG9iVVJMKHVy
bCwgYmxvYlBhcnRzLCBjb250ZW50VHlwZSksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVBy
b3h5OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFVSTCYgc3JjVVJMKQog
ewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7
CisgICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnVzZXNOZXR3b3JrUHJvY2Vzcygp
KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJl
Z2lzdGVyQmxvYlVSTEZyb21VUkwodXJsLCBzcmNVUkwpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGcm9tVVJM
KHVybCwgc3JjVVJMKSwgMCk7CiB9CiAKIHZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFVSTCYgdXJsKQogewotICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaGFy
ZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CisgICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlVucmVnaXN0ZXJCbG9iVVJMKHVybCksIDApOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlVucmVnaXN0
ZXJCbG9iVVJMKHVybCksIDApOwogfQogCiB2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3Rl
ckJsb2JVUkxGb3JTbGljZShjb25zdCBVUkwmIHVybCwgY29uc3QgVVJMJiBzcmNVUkwsIGxvbmcg
bG9uZyBzdGFydCwgbG9uZyBsb25nIGVuZCkKIHsKLSAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2hh
cmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOworICAgIEFTU0VSVChXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSk7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWdpc3RlckJsb2JVUkxGb3JTbGljZSh1cmwsIHNy
Y1VSTCwgc3RhcnQsIGVuZCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLm5ldHdv
cmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlZ2lzdGVyQmxvYlVSTEZvclNsaWNlKHVybCwgc3JjVVJMLCBz
dGFydCwgZW5kKSwgMCk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgbG9uZyBCbG9iUmVnaXN0cnlQcm94
eTo6YmxvYlNpemUoY29uc3QgVVJMJiB1cmwpCiB7Ci0gICAgQVNTRVJUKFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKTsKKyAgICBBU1NFUlQoV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpOwogCiAgICAgdWludDY0X3QgcmVzdWx0U2l6
ZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpCbG9iU2l6ZSh1cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkJsb2JTaXplOjpSZXBseShyZXN1bHRTaXplKSwgMCkpCisgICAgaWYgKCFXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6QmxvYlNpemUodXJsKSwg
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpCbG9iU2l6ZTo6UmVwbHko
cmVzdWx0U2l6ZSksIDApKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gcmVzdWx0U2l6
ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJbkZyYW1lLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJh
bWUubW0KaW5kZXggZGIyODI3NzA0NDc4YjI0ZTBhZTc0MGZmNTQ0ZWNiMjc0NjYwYjBkNC4uMzFl
ZWVkMjAxMzYzMTFiZTY3YWZmMzExZWI3OGMzNThkMzJjY2RmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNz
UGx1Z0luRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luRnJhbWUubW0KQEAgLTQ4LDcgKzQ4LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIAogKyAoaW5zdGFuY2V0eXBlKWxvb2tVcEZyYW1l
RnJvbUhhbmRsZTooX1dLRnJhbWVIYW5kbGUgKiloYW5kbGUKIHsKLSAgICBXZWJGcmFtZSogd2Vi
RnJhbWUgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJGcmFtZShoYW5kbGUuX2ZyYW1lSUQpOwor
ICAgIFdlYkZyYW1lKiB3ZWJGcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYkZyYW1l
KGhhbmRsZS5fZnJhbWVJRCk7CiAgICAgaWYgKCF3ZWJGcmFtZSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCmluZGV4IDlkODhmZDBiMmY0
NzJjNmI3M2UxMDExYzNhNWExNmJkYWI2NDE4ZWEuLjBhZTkxM2IyY2ExYjMyMzBiODIwN2M4ZDQ5
ODFiNDRlODM1ZDVkYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAKQEAg
LTE2Myw3ICsxNjMsNyBAQCBzdGF0aWMgdm9pZCBkaWRJbml0aWF0ZUxvYWRGb3JSZXNvdXJjZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBmcgogICAgIG1lc3NhZ2Uuc2V0
KFN0cmluZzo6ZnJvbVVURjgoIkZyYW1lIiksIHRvSW1wbChmcmFtZSkpOwogICAgIG1lc3NhZ2Uu
c2V0KFN0cmluZzo6ZnJvbVVURjgoIklkZW50aWZpZXIiKSwgQVBJOjpVSW50NjQ6OmNyZWF0ZShp
ZGVudGlmaWVyKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiUmVxdWVzdCIp
LCB0b0ltcGwocmVxdWVzdCkpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVu
ZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkSW5pdGlhdGVM
b2FkRm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3Nh
Z2UpKS5nZXQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUo
KS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRJbml0aWF0ZUxvYWRG
b3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUobWVzc2FnZSkp
LmdldCgpKTsKIH0KIAogc3RhdGljIFdLVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RGb3JG
cmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRl
bnRpZmllciwgV0tVUkxSZXF1ZXN0UmVmIHdrUmVxdWVzdCwgV0tVUkxSZXNwb25zZVJlZiB3a1Jl
ZGlyZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xODgsNyArMTg4LDcg
QEAgc3RhdGljIFdLVVJMUmVxdWVzdFJlZiB3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShXS0J1bmRs
ZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmEKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21V
VEY4KCJSZXF1ZXN0IiksIG5ld1JlcXVlc3QuZ2V0KCkpOwogICAgIGlmICghcmVkaXJlY3RSZXNv
dXJjZVJlc3BvbnNlLmlzTnVsbCgpKQogICAgICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21V
VEY4KCJSZWRpcmVjdFJlc3BvbnNlIiksIHRvSW1wbCh3a1JlZGlyZWN0UmVzcG9uc2UpKTsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJp
bmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZFNlbmRSZXF1ZXN0Rm9yUmVzb3VyY2UiKSwgQVBJOjpE
aWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7CisgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+cG9zdE1lc3NhZ2UoU3RyaW5nOjpm
cm9tVVRGOCgiV2ViUGFnZS5EaWRTZW5kUmVxdWVzdEZvclJlc291cmNlIiksIEFQSTo6RGljdGlv
bmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkpOwogCiAgICAgcmV0dXJuIHRv
QVBJKG5ld1JlcXVlc3QucmVsZWFzZSgpLmxlYWtSZWYoKSk7CiB9CkBAIC0xOTksNyArMTk5LDcg
QEAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdl
UmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21V
VEY4KCJQYWdlIiksIHRvSW1wbChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9t
VVRGOCgiSWRlbnRpZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKICAg
ICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJSZXNwb25zZSIpLCB0b0ltcGwocmVzcG9u
c2UpKTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVz
c2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291
cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNz
YWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkUmVjZWl2ZVJlc3BvbnNlRm9yUmVzb3Vy
Y2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2UpKS5nZXQoKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIs
IHVpbnQ2NF90IGxlbmd0aCwgY29uc3Qgdm9pZCopCkBAIC0yMDgsNyArMjA4LDcgQEAgc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tCdW5kbGVGcmEKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJQYWdl
IiksIHRvSW1wbChwYWdlKSk7CiAgICAgbWVzc2FnZS5zZXQoU3RyaW5nOjpmcm9tVVRGOCgiSWRl
bnRpZmllciIpLCBBUEk6OlVJbnQ2NDo6Y3JlYXRlKGlkZW50aWZpZXIpKTsKICAgICBtZXNzYWdl
LnNldChTdHJpbmc6OmZyb21VVEY4KCJDb250ZW50TGVuZ3RoIiksIEFQSTo6VUludDY0OjpjcmVh
dGUobGVuZ3RoKSk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKS0+
cG9zdE1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOCgiV2ViUGFnZS5EaWRSZWNlaXZlQ29udGVudExl
bmd0aEZvclJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNz
YWdlKSkuZ2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxl
KCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkUmVjZWl2ZUNvbnRl
bnRMZW5ndGhGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShXVEY6Om1vdmUo
bWVzc2FnZSkpLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgZGlkRmluaXNoTG9hZEZvclJlc291
cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVu
dGlmaWVyLCBjb25zdCB2b2lkKikKQEAgLTIxNiw3ICsyMTYsNyBAQCBzdGF0aWMgdm9pZCBkaWRG
aW5pc2hMb2FkRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVS
ZWYsIHVpbgogICAgIEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlOwogICAgIG1lc3Nh
Z2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIlBhZ2UiKSwgdG9JbXBsKHBhZ2UpKTsKICAgICBtZXNz
YWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlmaWVyIiksIEFQSTo6VUludDY0OjpjcmVh
dGUoaWRlbnRpZmllcikpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxl
KCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkRmluaXNoTG9hZEZv
clJlc291cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSku
Z2V0KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxlKCktPnBv
c3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldlYlBhZ2UuRGlkRmluaXNoTG9hZEZvclJlc291
cmNlIiksIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdlKSkuZ2V0KCkp
OwogfQogCiBzdGF0aWMgdm9pZCBkaWRGYWlsTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJl
ZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS0Vycm9yUmVm
IGVycm9yLCBjb25zdCB2b2lkKikKQEAgLTIyNSw3ICsyMjUsNyBAQCBzdGF0aWMgdm9pZCBkaWRG
YWlsTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVm
LCB1aW50NgogICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6ZnJvbVVURjgoIlBhZ2UiKSwgdG9JbXBs
KHBhZ2UpKTsKICAgICBtZXNzYWdlLnNldChTdHJpbmc6OmZyb21VVEY4KCJJZGVudGlmaWVyIiks
IEFQSTo6VUludDY0OjpjcmVhdGUoaWRlbnRpZmllcikpOwogICAgIG1lc3NhZ2Uuc2V0KFN0cmlu
Zzo6ZnJvbVVURjgoIkVycm9yIiksIHRvSW1wbChlcnJvcikpOwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmluamVjdGVkQnVuZGxlKCktPnBvc3RNZXNzYWdlKFN0cmluZzo6ZnJvbVVURjgoIldl
YlBhZ2UuRGlkRmFpbExvYWRGb3JSZXNvdXJjZSIpLCBBUEk6OkRpY3Rpb25hcnk6OmNyZWF0ZShX
VEY6Om1vdmUobWVzc2FnZSkpLmdldCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5p
bmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KCJXZWJQYWdlLkRp
ZEZhaWxMb2FkRm9yUmVzb3VyY2UiKSwgQVBJOjpEaWN0aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3Zl
KG1lc3NhZ2UpKS5nZXQoKSk7CiB9CiAKIGNsYXNzIFBhZ2VDb250ZXh0TWVudUNsaWVudCBmaW5h
bCA6IHB1YmxpYyBBUEk6OkluamVjdGVkQnVuZGxlOjpQYWdlQ29udGV4dE1lbnVDbGllbnQgewpA
QCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgd2Via2l0V2ViUGFnZURpZFJlY2VpdmVNZXNzYWdlKFdl
YktpdFdlYlBhZ2UqIHBhZ2UsIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hCiAgICAgICAgIG1lc3Nh
Z2VSZXBseS5zZXQoIlBhZ2UiLCB3ZWJQYWdlKTsKICAgICAgICAgbWVzc2FnZVJlcGx5LnNldCgi
Q2FsbGJhY2tJRCIsIEFQSTo6VUludDY0OjpjcmVhdGUoY2FsbGJhY2tJRCkpOwogICAgICAgICBt
ZXNzYWdlUmVwbHkuc2V0KCJTbmFwc2hvdCIsIHNuYXBzaG90SW1hZ2UpOwotICAgICAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5pbmplY3RlZEJ1bmRsZSgpLT5wb3N0TWVzc2FnZSgiV2ViUGFnZS5E
aWRHZXRTbmFwc2hvdCIsIEFQSTo6RGljdGlvbmFyeTo6Y3JlYXRlKFdURjo6bW92ZShtZXNzYWdl
UmVwbHkpKS5nZXQoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVk
QnVuZGxlKCktPnBvc3RNZXNzYWdlKCJXZWJQYWdlLkRpZEdldFNuYXBzaG90IiwgQVBJOjpEaWN0
aW9uYXJ5OjpjcmVhdGUoV1RGOjptb3ZlKG1lc3NhZ2VSZXBseSkpLmdldCgpKTsKICAgICB9IGVs
c2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQcm9jZXNzUGx1
Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLV2ViUHJvY2Vzc1BsdWdJbkJyb3dzZXJDb250ZXh0
Q29udHJvbGxlci5tbQppbmRleCAyZmI4Zjk1MzllY2M4MzExNGQyNmE2NmE2YWM0Mzc3NzY2Y2Jm
ODg3Li5iMGEyNzQ1NDIzNDY5MzM0Mjc1NmUyZDRiZjdjMzFmM2UzNjc2MjlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tXZWJQ
cm9jZXNzUGx1Z0luQnJvd3NlckNvbnRleHRDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS1dlYlByb2Nlc3NQbHVnSW5C
cm93c2VyQ29udGV4dENvbnRyb2xsZXIubW0KQEAgLTQwMiw3ICs0MDIsNyBAQCBzdGF0aWMgdm9p
ZCBzZXRVcFJlc291cmNlTG9hZENsaWVudChXS1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4
dENvbnRyb2xsZXIgKgogCiArIChpbnN0YW5jZXR5cGUpbG9va1VwQnJvd3NpbmdDb250ZXh0RnJv
bUhhbmRsZTooV0tCcm93c2luZ0NvbnRleHRIYW5kbGUgKiloYW5kbGUKIHsKLSAgICBXZWJQYWdl
KiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShoYW5kbGUucGFnZUlEKTsK
KyAgICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZSho
YW5kbGUucGFnZUlEKTsKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
QEAgLTQxMyw3ICs0MTMsNyBAQCBzdGF0aWMgdm9pZCBzZXRVcFJlc291cmNlTG9hZENsaWVudChX
S1dlYlByb2Nlc3NQbHVnSW5Ccm93c2VyQ29udGV4dENvbnRyb2xsZXIgKgogewogICAgIGlmICgh
X3JlbW90ZU9iamVjdFJlZ2lzdHJ5KSB7CiAgICAgICAgIF9yZW1vdGVPYmplY3RSZWdpc3RyeSA9
IGFkb3B0TlMoW1tfV0tSZW1vdGVPYmplY3RSZWdpc3RyeSBhbGxvY10gX2luaXRXaXRoTWVzc2Fn
ZVNlbmRlcjoqX3BhZ2VdKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBfcGFnZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2Jq
ZWN0UmVnaXN0cnldKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVPYmplY3RSZWdpc3RyeTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBfcGFnZS0+cGFnZUlEKCksIFtfcmVtb3RlT2JqZWN0UmVnaXN0cnkgcmVtb3RlT2Jq
ZWN0UmVnaXN0cnldKTsKICAgICB9CiAKICAgICByZXR1cm4gX3JlbW90ZU9iamVjdFJlZ2lzdHJ5
LmdldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCBmZjBhZmQ5ZGUzYjk1ZTg1ODJmZThl
MmQ3NjViZWY2YmI4OGM1MzdiLi40MTcwOTNhYzUzMTM2NjdhZTZkYzMwMmNkYWZiYTA5OTBjZDA0
ZDZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMTE2LDMyICsxMTYsMzQgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6aW5pdGlhbGl6ZUNsaWVudChjb25zdCBXS0J1bmRsZUNsaWVudEJhc2Uq
IGNsaWVudCkKIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6cG9zdE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiBtZXNzYWdlTmFtZSwgQVBJOjpPYmplY3QqIG1lc3NhZ2VCb2R5KQogewotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
YlByb2Nlc3NQb29sOjpIYW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YShXZWJQcm9j
ZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCAw
KTsKKyAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7CisgICAg
d2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzUG9vbDo6SGFuZGxlTWVzc2FnZShtZXNzYWdlTmFtZSwgVXNlckRhdGEod2ViUHJvY2Vz
cy50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCAwKTsKIH0KIAogdm9p
ZCBJbmplY3RlZEJ1bmRsZTo6cG9zdFN5bmNocm9ub3VzTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCogbWVzc2FnZUJvZHksIFJlZlB0cjxBUEk6Ok9iamVjdD4m
IHJldHVybkRhdGEpCiB7CiAgICAgVXNlckRhdGEgcmV0dXJuVXNlckRhdGE7CiAKLSAgICBpZiAo
IVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3Nh
Z2VOYW1lLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9I
YW5kbGVzKG1lc3NhZ2VCb2R5KSkpLCBNZXNzYWdlczo6V2ViUHJvY2Vzc1Bvb2w6OkhhbmRsZVN5
bmNocm9ub3VzTWVzc2FnZTo6UmVwbHkocmV0dXJuVXNlckRhdGEpLCAwKSkKKyAgICBhdXRvJiB3
ZWJQcm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7CisgICAgaWYgKCF3ZWJQcm9jZXNz
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
UG9vbDo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlKG1lc3NhZ2VOYW1lLCBVc2VyRGF0YSh3ZWJQ
cm9jZXNzLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMobWVzc2FnZUJvZHkpKSksIE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzUG9vbDo6SGFuZGxlU3luY2hyb25vdXNNZXNzYWdlOjpSZXBseShyZXR1cm5V
c2VyRGF0YSksIDApKQogICAgICAgICByZXR1cm5EYXRhID0gbnVsbHB0cjsKICAgICBlbHNlCi0g
ICAgICAgIHJldHVybkRhdGEgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1IYW5kbGVz
VG9PYmplY3RzKHJldHVyblVzZXJEYXRhLm9iamVjdCgpKTsKKyAgICAgICAgcmV0dXJuRGF0YSA9
IHdlYlByb2Nlc3MudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyhyZXR1cm5Vc2VyRGF0YS5vYmpl
Y3QoKSk7CiB9CiAKIFdlYkNvbm5lY3Rpb24qIEluamVjdGVkQnVuZGxlOjp3ZWJDb25uZWN0aW9u
VG9VSVByb2Nlc3MoKSBjb25zdAogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS53
ZWJDb25uZWN0aW9uVG9VSVByb2Nlc3MoKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViQ29ubmVjdGlvblRvVUlQcm9jZXNzKCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyPigpLT5zZXRIVFRQQ29va2ll
QWNjZXB0UG9saWN5KGFjY2VwdCA/IEhUVFBDb29raWVBY2NlcHRQb2xpY3lBbHdheXMgOiBIVFRQ
Q29va2llQWNjZXB0UG9saWN5T25seUZyb21NYWluRG9jdW1lbnREb21haW4pOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlcj4oKS0+c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeShhY2NlcHQgPyBIVFRQQ29va2llQWNjZXB0UG9saWN5QWx3YXlz
IDogSFRUUENvb2tpZUFjY2VwdFBvbGljeU9ubHlGcm9tTWFpbkRvY3VtZW50RG9tYWluKTsKIH0K
IAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0Q2FjaGVNb2RlbCh1aW50MzJfdCBjYWNoZU1vZGVs
KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZTo6b3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RS
dW5uZXIoV2ViUGFnZUdyb3VwUHJveHkqIHBhZ2VHcm91cCwgY29uc3QgU3RyaW5nJiBwcmVmZXJl
bmNlLCBib29sIGVuYWJsZWQpCkBAIC0zNDIsMTkgKzM0NCwxOSBAQCB2b2lkIEluamVjdGVkQnVu
ZGxlOjpzZXRBc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChXZWJQYWdlR3JvdXBQcm94
eSogcGFnZQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpjbGVhckFsbERhdGFiYXNlcygpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJEYXRhYmFzZU1hbmFnZXI+KCkt
PmRlbGV0ZUFsbERhdGFiYXNlcygpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8V2ViRGF0YWJhc2VNYW5hZ2VyPigpLT5kZWxldGVBbGxEYXRhYmFzZXMoKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0RGF0YWJhc2VRdW90YSh1aW50NjRfdCBxdW90YSkKIHsK
ICAgICAvLyBIaXN0b3JpY2FsbHksIHdlJ3ZlIHVzZWQgdGhlIGZvbGxvd2luZyAoc29tZXdoYXQg
bm9uLXNlbnNpY2FsKSBzdHJpbmcKICAgICAvLyBmb3IgdGhlIGRhdGFiYXNlSWRlbnRpZmllciBv
ZiBsb2NhbCBmaWxlcy4KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkRh
dGFiYXNlTWFuYWdlcj4oKS0+c2V0UXVvdGFGb3JPcmlnaW4oImZpbGVfXzAiLCBxdW90YSk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJEYXRhYmFzZU1hbmFnZXI+
KCktPnNldFF1b3RhRm9yT3JpZ2luKCJmaWxlX18wIiwgcXVvdGEpOwogfQogCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGUoKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnN1cHBsZW1lbnQ8V2ViQXBwbGljYXRpb25DYWNoZU1hbmFnZXI+KCktPmRlbGV0ZUFs
bEVudHJpZXMoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkFw
cGxpY2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5kZWxldGVBbGxFbnRyaWVzKCk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRCdW5kbGU6OmNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihjb25zdCBTdHJp
bmcmIG9yaWdpblN0cmluZykKQEAgLTM2NSw3ICszNjcsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
OjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmlnaW4oY29uc3QgU3RyaW5nJiBvcmlnaW5TdHJp
bmcpCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFwcENhY2hlTWF4aW11bVNpemUodWludDY0
X3Qgc2l6ZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkFwcGxp
Y2F0aW9uQ2FjaGVNYW5hZ2VyPigpLT5zZXRBcHBDYWNoZU1heGltdW1TaXplKHNpemUpOworICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViQXBwbGljYXRpb25DYWNoZU1h
bmFnZXI+KCktPnNldEFwcENhY2hlTWF4aW11bVNpemUoc2l6ZSk7CiB9CiAKIHVpbnQ2NF90IElu
amVjdGVkQnVuZGxlOjphcHBDYWNoZVVzYWdlRm9yT3JpZ2luKGNvbnN0IFN0cmluZyYgb3JpZ2lu
U3RyaW5nKQpAQCAtNTg2LDcgKzU4OCw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlOjp3ZWJO
b3RpZmljYXRpb25JRChKU0NvbnRleHRSZWYganNDb250ZXh0LCBKU1ZhbHVlUmVmIGpzCiAgICAg
V2ViQ29yZTo6Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24gPSBKU05vdGlmaWNhdGlvbjo6dG9X
cmFwcGVkKHRvSlModG9KUyhqc0NvbnRleHQpLCBqc05vdGlmaWNhdGlvbikpOwogICAgIGlmICgh
bm90aWZpY2F0aW9uKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6
c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5ub3RpZmljYXRp
b25JREZvclRlc3Rpbmcobm90aWZpY2F0aW9uKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5ub3RpZmljYXRp
b25JREZvclRlc3Rpbmcobm90aWZpY2F0aW9uKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGpz
Q29udGV4dCk7CiAgICAgVU5VU0VEX1BBUkFNKGpzTm90aWZpY2F0aW9uKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
Q29ubmVjdGlvbi5jcHAKaW5kZXggYTk0Yzc5YzMzNzdmNjBkZWI4ODIyZTQ3NmRhNWI1OWRiMmM5
MWRhNC4uODM3MGNjNGU3NjI5YWE0NmZiMDIxYWY5ZjAzNzQ1NzBkNjk1ZGNmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgTmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjp+TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKIHZvaWQgTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6TWVzc2FnZURlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIGlmIChXZWJSZXNvdXJjZUxvYWRlciogd2ViUmVzb3Vy
Y2VMb2FkZXIgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIo
KS53ZWJSZXNvdXJjZUxvYWRlckZvcklkZW50aWZpZXIoZGVjb2Rlci5kZXN0aW5hdGlvbklEKCkp
KQorICAgICAgICBpZiAoV2ViUmVzb3VyY2VMb2FkZXIqIHdlYlJlc291cmNlTG9hZGVyID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkud2ViUmVzb3Vy
Y2VMb2FkZXJGb3JJZGVudGlmaWVyKGRlY29kZXIuZGVzdGluYXRpb25JRCgpKSkKICAgICAgICAg
ICAgIHdlYlJlc291cmNlTG9hZGVyLT5kaWRSZWNlaXZlV2ViUmVzb3VyY2VMb2FkZXJNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuOwpAQCAtNzMs
NyArNzMsNyBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZVN5bmNN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6TWVzcwogdm9pZCBOZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiAgICAgLy8gVGhlIE5ldHdv
cmtQcm9jZXNzIHByb2JhYmx5IGNyYXNoZWQuCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKHRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLm5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkNsb3NlZCh0aGlzKTsKIH0KIAogdm9pZCBO
ZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkU2NoZWR1bGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCmluZGV4IDQzNDc5MGE4YzJlNjVhZjczN2MzNDBkNjRh
NGM3MWI0ZWM5ZjViYWMuLjgwMjQ1ZmI2YmZlMGZhZWZmYjU4ZjNmOTczNjFmN2EyOWY5ZTUxODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJj
ZUxvYWRTY2hlZHVsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBX
ZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNjaGVkdWxlTG9hZChSZXNvdXJjZUxvYWRlciogcmVz
b3VyY2VMb2FkZXIsIENhY2gKIAogICAgIEFTU0VSVCgobG9hZFBhcmFtZXRlcnMud2ViUGFnZUlE
ICYmIGxvYWRQYXJhbWV0ZXJzLndlYkZyYW1lSUQpIHx8IGxvYWRQYXJhbWV0ZXJzLmNsaWVudENy
ZWRlbnRpYWxQb2xpY3kgPT0gRG9Ob3RBc2tDbGllbnRGb3JBbnlDcmVkZW50aWFscyk7CiAKLSAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNjaGVk
dWxlUmVzb3VyY2VMb2FkKGxvYWRQYXJhbWV0ZXJzKSwgMCkpIHsKKyAgICBpZiAoIVdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNjaGVkdWxlUmVzb3VyY2VM
b2FkKGxvYWRQYXJhbWV0ZXJzKSwgMCkpIHsKICAgICAgICAgLy8gV2UgcHJvYmFibHkgZmFpbGVk
IHRvIHNjaGVkdWxlIHRoaXMgbG9hZCB3aXRoIHRoZSBOZXR3b3JrUHJvY2VzcyBiZWNhdXNlIGl0
IGhhZCBjcmFzaGVkLgogICAgICAgICAvLyBUaGlzIGxvYWQgd2lsbCBuZXZlciBzdWNjZWVkIHNv
IHdlIHdpbGwgc2NoZWR1bGUgaXQgdG8gZmFpbCBhc3luY2hyb25vdXNseS4KICAgICAgICAgc2No
ZWR1bGVJbnRlcm5hbGx5RmFpbGVkTG9hZChyZXNvdXJjZUxvYWRlcik7CkBAIC0yMjYsNyArMjI2
LDcgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnJlbW92ZShSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCiAgICAgaWYgKCFsb2FkZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24o
KS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbW92ZUxv
YWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZW1vdmVMb2FkSWRlbnRpZmllcihpZGVudGlmaWVy
KSwgMCk7CiAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBXZWJSZXNvdXJjZUxvYWRl
ciBtaWdodCBiZSBqdXN0IGFib3V0IHRvIG1lc3NhZ2UgYmFjayB0byB0aGUgTmV0d29ya1Byb2Nl
c3MgKGUuZy4gQ29udGludWVXaWxsU2VuZFJlcXVlc3QpCiAgICAgLy8gYnV0IHRoZXJlJ3Mgbm8g
cG9pbnQgaW4gZG9pbmcgc28gYW55bW9yZS4KQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lkIFdlYlJl
c291cmNlTG9hZFNjaGVkdWxlcjo6cmVtb3ZlKFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRl
cikKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXREZWZlcnNMb2FkaW5nKFJlc291
cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlciwgYm9vbCBkZWZlcnMpCiB7CiAgICAgUmVzb3VyY2VM
b2FkSWRlbnRpZmllciBpZGVudGlmaWVyID0gcmVzb3VyY2VMb2FkZXItPmlkZW50aWZpZXIoKTsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXREZWZl
cnNMb2FkaW5nKGlkZW50aWZpZXIsIGRlZmVycyksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldERlZmVyc0xvYWRpbmcoaWRlbnRpZmll
ciwgZGVmZXJzKSwgMCk7CiB9CiAKIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpjcm9z
c09yaWdpblJlZGlyZWN0UmVjZWl2ZWQoUmVzb3VyY2VMb2FkZXIqLCBjb25zdCBVUkwmKQpAQCAt
MjU0LDcgKzI1NCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVyOjpzZXJ2ZVBlbmRp
bmdSZXF1ZXN0cyhSZXNvdXJjZUxvYWRQcmlvcml0eSBtaW5pbXVtCiAgICAgaWYgKG1fc3VzcGVu
ZFBlbmRpbmdSZXF1ZXN0c0NvdW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyht
aW5pbXVtUHJpb3JpdHkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpTZXJ2ZVBlbmRpbmdSZXF1ZXN0cyhtaW5pbXVtUHJpb3JpdHkpLCAw
KTsKIH0KIAogdm9pZCBXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnN1c3BlbmRQZW5kaW5nUmVx
dWVzdHMoKQpAQCAtMjcwLDcgKzI3MCw3IEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkU2NoZWR1bGVy
OjpyZXN1bWVQZW5kaW5nUmVxdWVzdHMoKQogCiB2b2lkIFdlYlJlc291cmNlTG9hZFNjaGVkdWxl
cjo6c2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMo
TWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpTZXRTZXJpYWxMb2FkaW5n
RW5hYmxlZChlbmFibGVkKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpTZXRTZXJpYWxMb2FkaW5nRW5hYmxlZDo6UmVwbHkoKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldFNlcmlhbExvYWRpbmdF
bmFibGVkKGVuYWJsZWQpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlNldFNlcmlhbExvYWRpbmdFbmFibGVkOjpSZXBseSgpLCAwKTsKIH0KIAogdm9pZCBXZWJSZXNv
dXJjZUxvYWRTY2hlZHVsZXI6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcApp
bmRleCA2ZDY2OGQ1ODQ0Y2Q1YmFkYTQwOTU1ZmViMzBkOTZiODMyM2FlMTNhLi44OWQxNzhiYTMy
M2UyMjVjMDQyZDExZTRlMDMwYzE4ZDI3ZTc5NzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTYxLDcg
KzYxLDcgQEAgV2ViUmVzb3VyY2VMb2FkZXI6On5XZWJSZXNvdXJjZUxvYWRlcigpCiAKIElQQzo6
Q29ubmVjdGlvbiogV2ViUmVzb3VyY2VMb2FkZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkK
IHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+
Y29ubmVjdGlvbigpOworICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5uZXR3b3Jr
Q29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCk7CiB9CiAKIHVpbnQ2NF90IFdlYlJlc291cmNlTG9h
ZGVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVl
c3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9O
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCmluZGV4IDYwOThhMTdjZTAx
OWNkMGJjYjJmYWViN2Q4NzJlYTcxODAwNDQ1MjkuLjNhOTlkZDg4Y2JmMjAyNTBkN2QzYTljZGY1
M2MyNjljNDNmN2U5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25QZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgTm90aWZpY2F0aW9u
Q2xpZW50OjpQZXJtaXNzaW9uIE5vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6
cGVybWlzc2lvbkwKICAgICBpZiAoIW1fcGFnZS0+Y29yZVBhZ2UoKS0+c2V0dGluZ3MoKS5ub3Rp
ZmljYXRpb25zRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gTm90aWZpY2F0aW9uQ2xpZW50OjpQ
ZXJtaXNzaW9uRGVuaWVkOwogICAgIAotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5z
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPnBvbGljeUZvck9yaWdpbihzZWN1
cml0eU9yaWdpbik7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1l
bnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+cG9saWN5Rm9yT3JpZ2luKHNlY3VyaXR5T3Jp
Z2luKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHNlY3VyaXR5T3JpZ2luKTsKICAgICByZXR1
cm4gTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJtaXNzaW9uRGVuaWVkOwpAQCAtMTM2LDcgKzEzNiw3
IEBAIE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbiBOb3RpZmljYXRpb25QZXJtaXNzaW9u
UmVxdWVzdE1hbmFnZXI6OnBlcm1pc3Npb25MCiB2b2lkIE5vdGlmaWNhdGlvblBlcm1pc3Npb25S
ZXF1ZXN0TWFuYWdlcjo6c2V0UGVybWlzc2lvbkxldmVsRm9yVGVzdGluZyhjb25zdCBTdHJpbmcm
IG9yaWdpblN0cmluZywgYm9vbCBhbGxvd2VkKQogewogI2lmIEVOQUJMRShOT1RJRklDQVRJT05T
KSB8fCBFTkFCTEUoTEVHQUNZX05PVElGSUNBVElPTlMpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5kaWRVcGRhdGVOb3RpZmlj
YXRpb25EZWNpc2lvbihvcmlnaW5TdHJpbmcsIGFsbG93ZWQpOworICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkVXBkYXRl
Tm90aWZpY2F0aW9uRGVjaXNpb24ob3JpZ2luU3RyaW5nLCBhbGxvd2VkKTsKICNlbHNlCiAgICAg
VU5VU0VEX1BBUkFNKG9yaWdpblN0cmluZyk7CiAgICAgVU5VU0VEX1BBUkFNKGFsbG93ZWQpOwpA
QCAtMTQ2LDcgKzE0Niw3IEBAIHZvaWQgTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOjpzZXRQZXJtaXNzaW9uTGV2ZWxGb3JUZXN0aW5nKGNvbnN0IFN0CiB2b2lkIE5vdGlmaWNh
dGlvblBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlcjo6cmVtb3ZlQWxsUGVybWlzc2lvbnNGb3JUZXN0
aW5nKCkKIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykgfHwgRU5BQkxFKExFR0FDWV9OT1RJ
RklDQVRJT05TKQotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZp
Y2F0aW9uTWFuYWdlcj4oKS0+cmVtb3ZlQWxsUGVybWlzc2lvbnNGb3JUZXN0aW5nKCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2Vy
PigpLT5yZW1vdmVBbGxQZXJtaXNzaW9uc0ZvclRlc3RpbmcoKTsKICNlbmRpZgogfQogCkBAIC0x
NjIsNyArMTYyLDcgQEAgdm9pZCBOb3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6
OmRpZFJlY2VpdmVOb3RpZmljYXRpb25QZXJtaXNzaW9uRGVjaXMKIAogICAgIG1fb3JpZ2luVG9J
RE1hcC5yZW1vdmUob3JpZ2luKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1l
bnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkVXBkYXRlTm90aWZpY2F0aW9uRGVjaXNp
b24ob3JpZ2luLT50b1N0cmluZygpLCBhbGxvd2VkKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zdXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmRpZFVwZGF0ZU5vdGlm
aWNhdGlvbkRlY2lzaW9uKG9yaWdpbi0+dG9TdHJpbmcoKSwgYWxsb3dlZCk7CiAKICNpZiBFTkFC
TEUoTEVHQUNZX05PVElGSUNBVElPTlMpCiAgICAgUmVmUHRyPFdlYkNvcmU6OlZvaWRDYWxsYmFj
az4gdm9pZENhbGxiYWNrID0gbV9pZFRvVm9pZENhbGxiYWNrTWFwLnRha2UocmVxdWVzdElEKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QREYvUERGUGx1
Z2luLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4u
bW0KaW5kZXggODBmNDQzNmI4OTA0MGNjOWExNjFhYmQ0OGUwMTZjNjU3YmUxODlkMy4uMDRlZmJm
Nzk1MDJiNWFkYTNhNzI2MTQ1OTExNzg0N2VkN2Q1MmY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BERi9QREZQbHVnaW4ubW0KQEAgLTE2NjIsNyArMTY2
Miw4IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5nICpw
YXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsCiAgICAgICAgIHBhc3RlYm9hcmRUeXBlcy5h
cHBlbmQodHlwZSk7CiAKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUs
IHBhc3RlYm9hcmRUeXBlcyksCisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpOworICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVzKHBh
c3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJkVHlwZXMpLAogICAgICAgICBNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwg
MCk7CiAKICAgICBmb3IgKE5TVUludGVnZXIgaSA9IDAsIGNvdW50ID0gaXRlbXMuY291bnQ7IGkg
PCBjb3VudDsgKytpKSB7CkBAIC0xNjc3LDcgKzE2NzgsNyBAQCB2b2lkIFBERlBsdWdpbjo6d3Jp
dGVJdGVtc1RvUGFzdGVib2FyZChOU1N0cmluZyAqcGFzdGVib2FyZE5hbWUsIE5TQXJyYXkgKml0
ZW1zLAogCiAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNTdHJpbmdQYm9hcmRU
eXBlXSB8fCBbdHlwZSBpc0VxdWFsVG9TdHJpbmc6TlNQYXN0ZWJvYXJkVHlwZVN0cmluZ10pIHsK
ICAgICAgICAgICAgIFJldGFpblB0cjxOU1N0cmluZz4gcGxhaW5UZXh0U3RyaW5nID0gYWRvcHRO
UyhbW05TU3RyaW5nIGFsbG9jXSBpbml0V2l0aERhdGE6ZGF0YSBlbmNvZGluZzpOU1VURjhTdHJp
bmdFbmNvZGluZ10pOwotICAgICAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIHBsYWluVGV4
dFN0cmluZy5nZXQoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9h
cmRTdHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgICAgICAgICAg
d2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJk
TmFtZSwgdHlwZSwgcGxhaW5UZXh0U3RyaW5nLmdldCgpKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9h
cmRQcm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50
KSwgMCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OndyYXBOU0RhdGEoZGF0YSk7CiAKQEAgLTE2ODgsNyAr
MTY4OSw3IEBAIHZvaWQgUERGUGx1Z2luOjp3cml0ZUl0ZW1zVG9QYXN0ZWJvYXJkKE5TU3RyaW5n
ICpwYXN0ZWJvYXJkTmFtZSwgTlNBcnJheSAqaXRlbXMsCiAgICAgICAgICAgICBSZWZQdHI8U2hh
cmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShidWZmZXItPnNp
emUoKSk7CiAgICAgICAgICAgICBtZW1jcHkoc2hhcmVkTWVtb3J5LT5kYXRhKCksIGJ1ZmZlci0+
ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CiAgICAgICAgICAgICBzaGFyZWRNZW1vcnktPmNyZWF0
ZUhhbmRsZShoYW5kbGUsIFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwotICAgICAgICAgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFz
dGVib2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5zaXplKCkpLCBNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZTo6UmVwbHkobmV3Q2hh
bmdlQ291bnQpLCAwKTsKKyAgICAgICAgICAgIHdlYlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVi
b2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHR5cGUsIGhhbmRsZSwgYnVmZmVyLT5z
aXplKCkpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVy
Rm9yVHlwZTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICAgICAgfQogICAgIH0KIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9j
ZXNzQ29ubmVjdGlvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAKaW5kZXggZDhiYjk5MDQ1YmQ1
N2M3OWI0YWNkNjQzMTg1ZTJhNTkwZDA0ZTY0MC4uYzM1NGIyMjQ0Njg2NTZhOTg0MDZkZmNmNGY5
ZDJlMDA0M2IwNTcxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5jcHAK
QEAgLTcwLDcgKzcwLDcgQEAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24qIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlcjo6Z2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3QKIAogICAgIElQQzo6QXR0
YWNobWVudCBlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXI7CiAgICAgYm9vbCBzdXBwb3J0c0Fz
eW5jaHJvbm91c0luaXRpYWxpemF0aW9uOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlByb2Nlc3NQ
cm94eTo6R2V0UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ocGx1Z2luUHJvY2Vzc1Rva2VuKSwKKyAg
ICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpblByb2Nlc3NDb25u
ZWN0aW9uKHBsdWdpblByb2Nlc3NUb2tlbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBs
dWdpblByb2Nlc3NDb25uZWN0aW9uOjpSZXBseShlbmNvZGVkQ29ubmVjdGlvbklkZW50aWZpZXIs
IHN1cHBvcnRzQXN5bmNocm9ub3VzSW5pdGlhbGl6YXRpb24pLCAwKSkKICAgICAgICAgcmV0dXJu
IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
eHkuY3BwCmluZGV4IDA5NWRjYmRjNzAxOWM1OWExOWM1Y2VjMjk4OTU5NTcyZmE4MWUyM2QuLmRk
N2Y5Mjk1OTk0M2MwOWFiNzliYjliOGI2MjFmZDZhZTZlZjVjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5LmNwcApAQCAtODYsNyArODYs
NyBAQCB2b2lkIFBsdWdpblByb3h5OjpwbHVnaW5Qcm9jZXNzQ3Jhc2hlZCgpCiBib29sIFBsdWdp
blByb3h5Ojppbml0aWFsaXplKGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiB7CiAgICAg
QVNTRVJUKCFtX2Nvbm5lY3Rpb24pOwotICAgIG1fY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlcigpLmdldFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uKG1fcGx1Z2luUHJvY2Vzc1Rva2VuKTsKKyAgICBtX2Nvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIoKS5nZXRQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbihtX3BsdWdpblByb2Nlc3NUb2tlbik7CiAgICAgCiAgICAg
aWYgKCFtX2Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCAxMDc2MDdhZDZi
Y2M5MzhkZDdiYTc5OTg2OWNhZDY0Y2IzNjAxZWJkLi4xODY0MjMzZDU2OWEyOWEyY2IyOTI1YjJm
MmE4MjVjOGRiMTZlMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNTMyLDcgKzE1MzIsNyBAQCB2b2lkIFBsdWdpblZpZXc6
OnNldENvbXBsZXhUZXh0SW5wdXRTdGF0ZShQbHVnaW5Db21wbGV4VGV4dElucHV0U3RhdGUgcGx1
Z2luQ29tcAogCiBjb25zdCBNYWNoU2VuZFJpZ2h0JiBQbHVnaW5WaWV3Ojpjb21wb3NpdGluZ1Jl
bmRlclNlcnZlclBvcnQoKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jb21w
b3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCk7CiB9CiAKIHZvaWQgUGx1Z2luVmll
dzo6b3BlblBsdWdpblByZWZlcmVuY2VQYW5lKCkKQEAgLTE4MTQsNyArMTgxNCw3IEBAIHZvaWQg
UGx1Z2luVmlldzo6cGx1Z2luRGlkUmVjZWl2ZVVzZXJJbnRlcmFjdGlvbigpCiAgICAgU3RyaW5n
IHBsdWdpbk9yaWdpbiA9IHBsdWdJbkltYWdlRWxlbWVudC5sb2FkZWRVcmwoKS5ob3N0KCk7CiAg
ICAgU3RyaW5nIG1pbWVUeXBlID0gcGx1Z0luSW1hZ2VFbGVtZW50LmxvYWRlZE1pbWVUeXBlKCk7
CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0
aW9uKHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUsIHBsdWdJbkltYWdlRWxlbWVu
dC5kb2N1bWVudCgpLnBhZ2UoKS0+c2Vzc2lvbklEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBsdWdJbkRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24ocGFnZU9yaWdpbiwgcGx1Z2lu
T3JpZ2luLCBtaW1lVHlwZSwgcGx1Z0luSW1hZ2VFbGVtZW50LmRvY3VtZW50KCkucGFnZSgpLT5z
ZXNzaW9uSUQoKSk7CiB9CiAKIGJvb2wgUGx1Z2luVmlldzo6c2hvdWxkQ3JlYXRlVHJhbnNpZW50
UGFpbnRpbmdTbmFwc2hvdCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1Njcm9sbGluZy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1t
CmluZGV4IDNhM2M1OTY2ZTZlNDU4MWQzM2IyNWNhZmE5ODIzYWExMWY2MDk3OWUuLmE2ODA4ODFj
MmRhMTc5ZDFjMWRjZTMxY2U5MjVjOTE0ZTA0MmRlZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvU2Nyb2xsaW5nL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yLm1tCkBAIC01NCwxMiArNTQsMTIgQEAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yKFdlYlBhZ2UqIHBhZ2UpCiAgICAgOiBBc3lu
Y1Njcm9sbGluZ0Nvb3JkaW5hdG9yKHBhZ2UtPmNvcmVQYWdlKCkpCiAgICAgLCBtX3dlYlBhZ2Uo
cGFnZSkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fd2ViUGFnZS0+cGFnZUlEKCksICp0aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0K
IAogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3I6On5SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
cigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3dlYlBhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZUFyZWFNYXAu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9TdG9yYWdlL1N0b3JhZ2VBcmVhTWFwLmNw
cAppbmRleCA3NmIwOWFlZDFiODRhOWZmM2UyMDZjMzIwNjFhNGVmN2VkY2RiMDY5Li5lMjE4NTE2
MzA4ODc3ZGYyMTQ1MmZmOWIzYWMxYWJmYzI1NmZjMGZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1N0b3JhZ2UvU3RvcmFnZUFyZWFNYXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvU3RvcmFnZS9TdG9yYWdlQXJlYU1hcC5jcHAKQEAgLTcxLDI0ICs3
MSwyNCBAQCBTdG9yYWdlQXJlYU1hcDo6U3RvcmFnZUFyZWFNYXAoU3RvcmFnZU5hbWVzcGFjZUlt
cGwqIHN0b3JhZ2VOYW1lc3BhY2UsIFBhc3NSZWZQdAogICAgIHN3aXRjaCAobV9zdG9yYWdlVHlw
ZSkgewogICAgIGNhc2UgV2ViQ29yZTo6TG9jYWxTdG9yYWdlOgogICAgICAgICBpZiAoU2VjdXJp
dHlPcmlnaW4qIHRvcExldmVsT3JpZ2luID0gc3RvcmFnZU5hbWVzcGFjZS0+dG9wTGV2ZWxPcmln
aW4oKSkKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVhdGVUcmFuc2llbnRM
b2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3JhZ2VO
YW1lc3BhY2VJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbih0b3BM
ZXZlbE9yaWdpbiksIFNlY3VyaXR5T3JpZ2luRGF0YTo6ZnJvbVNlY3VyaXR5T3JpZ2luKG1fc2Vj
dXJpdHlPcmlnaW4uZ2V0KCkpKSwgMCk7CisgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6Q3JlYXRlVHJhbnNpZW50TG9jYWxTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tU2VjdXJpdHlPcmlnaW4odG9wTGV2ZWxPcmlnaW4pLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZy
b21TZWN1cml0eU9yaWdpbihtX3NlY3VyaXR5T3JpZ2luLmdldCgpKSksIDApOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6Q3JlYXRlTG9jYWxTdG9yYWdl
TWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQo
KSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1cml0eU9yaWdp
bi5nZXQoKSkpLCAwKTsKKyAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDcmVh
dGVMb2NhbFN0b3JhZ2VNYXAobV9zdG9yYWdlTWFwSUQsIHN0b3JhZ2VOYW1lc3BhY2UtPnN0b3Jh
Z2VOYW1lc3BhY2VJRCgpLCBTZWN1cml0eU9yaWdpbkRhdGE6OmZyb21TZWN1cml0eU9yaWdpbiht
X3NlY3VyaXR5T3JpZ2luLmdldCgpKSksIDApOwogCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz
ZSBXZWJDb3JlOjpTZXNzaW9uU3RvcmFnZToKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6
OkNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9yYWdlTmFtZXNwYWNl
LT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpmcm9tU2VjdXJpdHlP
cmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3Rv
cmFnZU1hbmFnZXI6OkNyZWF0ZVNlc3Npb25TdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElELCBzdG9y
YWdlTmFtZXNwYWNlLT5zdG9yYWdlTmFtZXNwYWNlSUQoKSwgU2VjdXJpdHlPcmlnaW5EYXRhOjpm
cm9tU2VjdXJpdHlPcmlnaW4obV9zZWN1cml0eU9yaWdpbi5nZXQoKSkpLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0
b3JhZ2VNYXBJRCwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6U3RvcmFnZUFyZWFNYXA6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9zdG9yYWdlTWFwSUQsICp0aGlzKTsKIH0KIAogU3RvcmFnZUFyZWFNYXA6On5TdG9yYWdl
QXJlYU1hcCgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkRlc3Ryb3lTdG9yYWdlTWFw
KG1fc3RvcmFnZU1hcElEKSwgMCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3N0b3JhZ2VNYXBJRCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OkRlc3Ry
b3lTdG9yYWdlTWFwKG1fc3RvcmFnZU1hcElEKSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpTdG9yYWdlQXJlYU1hcDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3N0b3JhZ2VNYXBJRCk7CiB9CiAKIHVuc2lnbmVkIFN0b3Jh
Z2VBcmVhTWFwOjpsZW5ndGgoKQpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgU3RvcmFnZUFyZWFN
YXA6OnNldEl0ZW0oRnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFy
ZWEsIGNvCiAKICAgICBtX3BlbmRpbmdWYWx1ZUNoYW5nZXMuYWRkKGtleSk7CiAKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2Vz
OjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRlbShtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3Rv
cmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9j
dW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6U2V0SXRl
bShtX3N0b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRT
ZWVkLCBrZXksIHZhbHVlLCBzb3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKIH0K
IAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3JlOjpGcmFtZSogc291cmNl
RnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc291cmNlQXJlYSwgY29uc3QgU3RyaW5nJiBrZXkpCkBA
IC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6cmVtb3ZlSXRlbShXZWJDb3Jl
OjpGcmFtZSogc291cmNlRnJhbWUsIFN0b3JhZ2VBcmVhSW1wbCogc28KIAogICAgIG1fcGVuZGlu
Z1ZhbHVlQ2hhbmdlcy5hZGQoa2V5KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpSZW1v
dmVJdGVtKG1fc3RvcmFnZU1hcElELCBzb3VyY2VBcmVhLT5zdG9yYWdlQXJlYUlEKCksIG1fY3Vy
cmVudFNlZWQsIGtleSwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChN
ZXNzYWdlczo6U3RvcmFnZU1hbmFnZXI6OlJlbW92ZUl0ZW0obV9zdG9yYWdlTWFwSUQsIHNvdXJj
ZUFyZWEtPnN0b3JhZ2VBcmVhSUQoKSwgbV9jdXJyZW50U2VlZCwga2V5LCBzb3VyY2VGcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIo
V2ViQ29yZTo6RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUFyZWEp
CkBAIC0xNTQsNyArMTU0LDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6Y2xlYXIoV2ViQ29yZTo6
RnJhbWUqIHNvdXJjZUZyYW1lLCBTdG9yYWdlQXJlYUltcGwqIHNvdXJjZUEKIAogICAgIG1faGFz
UGVuZGluZ0NsZWFyID0gdHJ1ZTsKICAgICBtX3N0b3JhZ2VNYXAgPSBTdG9yYWdlTWFwOjpjcmVh
dGUobV9xdW90YUluQnl0ZXMpOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpDbGVhcihtX3N0
b3JhZ2VNYXBJRCwgc291cmNlQXJlYS0+c3RvcmFnZUFyZWFJRCgpLCBtX2N1cnJlbnRTZWVkLCBz
b3VyY2VGcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpTdG9yYWdl
TWFuYWdlcjo6Q2xlYXIobV9zdG9yYWdlTWFwSUQsIHNvdXJjZUFyZWEtPnN0b3JhZ2VBcmVhSUQo
KSwgbV9jdXJyZW50U2VlZCwgc291cmNlRnJhbWUtPmRvY3VtZW50KCktPnVybCgpKSwgMCk7CiB9
CiAKIGJvb2wgU3RvcmFnZUFyZWFNYXA6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KQpAQCAt
MTgzLDcgKzE4Myw3IEBAIHZvaWQgU3RvcmFnZUFyZWFNYXA6OmxvYWRWYWx1ZXNJZk5lZWRlZCgp
CiAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHVzZSBhIHNwZWNpYWwgc2VuZFN5bmMgZmxhZyB0
byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IHdhbnQgdG8gcHJvY2VzcyBpbmNvbWluZyBtZXNzYWdl
cyB3aGlsZSB3YWl0aW5nIGZvciBhIHJlcGx5LgogICAgIC8vIChUaGlzIGZsYWcgZG9lcyBub3Qg
eWV0IGV4aXN0KS4gU2luY2UgbG9hZFZhbHVlc0lmTmVlZGVkKCkgZW5kcyB1cCBiZWluZyBjYWxs
ZWQgZnJvbSB3aXRoaW4gSmF2YVNjcmlwdCBjb2RlLCBwcm9jZXNzaW5nIGluY29taW5nIHN5bmNo
cm9ub3VzIG1lc3NhZ2VzCiAgICAgLy8gY291bGQgbGVhZCB0byB3ZWlyZCByZWVudHJlbmN5IGJ1
Z3Mgb3RoZXJ3aXNlLgotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFuYWdlcjo6R2V0VmFsdWVzKG1f
c3RvcmFnZU1hcElELCBtX2N1cnJlbnRTZWVkKSwgTWVzc2FnZXM6OlN0b3JhZ2VNYW5hZ2VyOjpH
ZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpTdG9yYWdlTWFu
YWdlcjo6R2V0VmFsdWVzKG1fc3RvcmFnZU1hcElELCBtX2N1cnJlbnRTZWVkKSwgTWVzc2FnZXM6
OlN0b3JhZ2VNYW5hZ2VyOjpHZXRWYWx1ZXM6OlJlcGx5KHZhbHVlcyksIDApOwogCiAgICAgbV9z
dG9yYWdlTWFwID0gU3RvcmFnZU1hcDo6Y3JlYXRlKG1fcXVvdGFJbkJ5dGVzKTsKICAgICBtX3N0
b3JhZ2VNYXAtPmltcG9ydEl0ZW1zKHZhbHVlcyk7CkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBT
dG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hTZXNzaW9uU3RvcmFnZUV2ZW50KHVpbnQ2NF90IHNvdXJj
ZVN0b3JhZ2VBcmVhSUQsIGMKIAogICAgIC8vIE5hbWVzcGFjZSBJRHMgZm9yIHNlc3Npb24gc3Rv
cmFnZSBuYW1lc3BhY2VzIGFyZSBlcXVpdmFsZW50IHRvIHdlYiBwYWdlIElEcwogICAgIC8vIHNv
IHdlIGNhbiBnZXQgdGhlIHJpZ2h0IHBhZ2UgaGVyZS4KLSAgICBXZWJQYWdlKiB3ZWJQYWdlID0g
V2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShtX3N0b3JhZ2VOYW1lc3BhY2VJRCk7CisgICAg
V2ViUGFnZSogd2ViUGFnZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndlYlBhZ2UobV9zdG9y
YWdlTmFtZXNwYWNlSUQpOwogICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0zNTAsNyArMzUwLDcgQEAgdm9pZCBTdG9yYWdlQXJlYU1hcDo6ZGlzcGF0Y2hMb2NhbFN0b3Jh
Z2VFdmVudCh1aW50NjRfdCBzb3VyY2VTdG9yYWdlQXJlYUlELCBjb24KIAogICAgIFZlY3RvcjxS
ZWZQdHI8RnJhbWU+PiBmcmFtZXM7CiAKLSAgICBQYWdlR3JvdXAmIHBhZ2VHcm91cCA9ICpXZWJQ
cm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlR3JvdXAobV9zdG9yYWdlTmFtZXNwYWNlSUQpLT5jb3Jl
UGFnZUdyb3VwKCk7CisgICAgUGFnZUdyb3VwJiBwYWdlR3JvdXAgPSAqV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkud2ViUGFnZUdyb3VwKG1fc3RvcmFnZU5hbWVzcGFjZUlEKS0+Y29yZVBhZ2VHcm91
cCgpOwogICAgIGNvbnN0IEhhc2hTZXQ8UGFnZSo+JiBwYWdlcyA9IHBhZ2VHcm91cC5wYWdlcygp
OwogICAgIGZvciAoSGFzaFNldDxQYWdlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcGFnZXMuYmVn
aW4oKSwgZW5kID0gcGFnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICYoKml0KS0+bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvVXNlckNvbnRlbnQvV2ViVXNlckNvbnRlbnRDb250cm9sbGVy
LmNwcAppbmRleCA0ZmNmODZlODU5MDkzYjcyM2U3OTAzN2MwYmZmYzkzMDZkNzc0MmMyLi4yMzYw
MzMzMGY1ODE5YjZhZTBlODAyZjA3MGE4MTk1MDEzZWY3ZDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9XZWJVc2VyQ29u
dGVudENvbnRyb2xsZXIuY3BwCkBAIC03MCwxNCArNzAsMTQgQEAgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmllcikKICAg
ICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV91c2VyQ29udGVudENvbnRyb2xs
ZXIoKlVzZXJDb250ZW50Q29udHJvbGxlcjo6Y3JlYXRlKCkpCiB7Ci0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRy
b2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyLCAqdGhpcyk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJV
c2VyQ29udGVudENvbnRyb2xsZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVy
LCAqdGhpcyk7CiB9CiAKIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjo6fldlYlVzZXJDb250ZW50
Q29udHJvbGxlcigpCiB7CiAgICAgQVNTRVJUKHVzZXJDb250ZW50Q29udHJvbGxlcnMoKS5jb250
YWlucyhtX2lkZW50aWZpZXIpKTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVXNlckNvbnRlbnRDb250cm9sbGVyOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xs
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pZGVudGlmaWVyKTsKIAogICAgIHVzZXJDb250
ZW50Q29udHJvbGxlcnMoKS5yZW1vdmUobV9pZGVudGlmaWVyKTsKIH0KQEAgLTEzMyw3ICsxMzMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgICAgIHJldHVybjsK
IAotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94eTo6RGlkUG9zdE1l
c3NhZ2Uod2ViUGFnZS0+cGFnZUlEKCksIHdlYkZyYW1lLT5mcmFtZUlEKCksIG1faWRlbnRpZmll
ciwgSVBDOjpEYXRhUmVmZXJlbmNlKHZhbHVlLT5kYXRhKCkpKSwgbV9jb250cm9sbGVyLT5pZGVu
dGlmaWVyKCkpOworICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNz
Q29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJVc2VyQ29udGVudENvbnRyb2xsZXJQcm94
eTo6RGlkUG9zdE1lc3NhZ2Uod2ViUGFnZS0+cGFnZUlEKCksIHdlYkZyYW1lLT5mcmFtZUlEKCks
IG1faWRlbnRpZmllciwgSVBDOjpEYXRhUmVmZXJlbmNlKHZhbHVlLT5kYXRhKCkpKSwgbV9jb250
cm9sbGVyLT5pZGVudGlmaWVyKCkpOwogICAgIH0KIAogICAgIFdlYkNvcmU6OlVzZXJNZXNzYWdl
SGFuZGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IoKSB7IHJldHVybiAqbV9kZXNjcmlwdG9yOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkJhdHRlcnlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJCYXR0ZXJ5Q2xpZW50LmNwcAppbmRleCAxZDEzNmU0ZjEzYzAxNWMxMzVhNzZiMzA5
NTIwMjc1YzQxODIwZWE4Li5hYTdkNGZiMGMxNmFlYzcxYzE5NjRlNjg0Yjk0Zjg3OTc5N2Q4NmNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkJhdHRlcnlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQmF0dGVyeUNsaWVudC5jcHAKQEAgLTM4LDE3ICszOCwxNyBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogdm9pZCBXZWJCYXR0ZXJ5Q2xpZW50OjpzdGFydFVwZGF0aW5nKCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigp
LT5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5z
dXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsK
IH0KIAogdm9pZCBXZWJCYXR0ZXJ5Q2xpZW50OjpzdG9wVXBkYXRpbmcoKQogewotICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8V2ViQmF0dGVyeU1hbmFnZXI+KCktPnVucmVnaXN0
ZXJXZWJQYWdlKG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKIH0KIAog
dm9pZCBXZWJCYXR0ZXJ5Q2xpZW50OjpiYXR0ZXJ5Q29udHJvbGxlckRlc3Ryb3llZCgpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJCYXR0ZXJ5TWFuYWdlcj4oKS0+
dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5z
dXBwbGVtZW50PFdlYkJhdHRlcnlNYW5hZ2VyPigpLT51bnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2Up
OwogICAgIGRlbGV0ZSB0aGlzOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggZWE1
YTM5OGQ4Y2QxM2JlMWJmN2Y4ZjI2Njg1OTExMzdkYzUzNzk0Mi4uZjJhMDFiZTI2NWI2ZWVjYjFh
ZTNlZWQ3ZGU5ZGFlNDljMDhkZDlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTM1
LDcgKzEzNSw3IEBAIEZsb2F0UmVjdCBXZWJDaHJvbWVDbGllbnQ6OndpbmRvd1JlY3QoKQogCiAg
ICAgRmxvYXRSZWN0IG5ld1dpbmRvd0ZyYW1lOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpHZXRXaW5kb3dGcmFtZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRXaW5k
b3dGcmFtZTo6UmVwbHkobmV3V2luZG93RnJhbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNl
bmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0ZyYW1lKCksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkdldFdpbmRvd0ZyYW1lOjpSZXBseShuZXdXaW5kb3dGcmFtZSksIG1f
cGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICByZXR1
cm4gbmV3V2luZG93RnJhbWU7CkBAIC0xOTIsNyArMTkyLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmZvY3VzZWRGcmFtZUNoYW5nZWQoRnJhbWUqIGZyYW1lKQogewogICAgIFdlYkZyYW1lKiB3
ZWJGcmFtZSA9IGZyYW1lID8gV2ViRnJhbWU6OmZyb21Db3JlRnJhbWUoKmZyYW1lKSA6IG51bGxw
dHI7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkZvY3VzZWRGcmFtZUNoYW5nZWQod2ViRnJh
bWUgPyB3ZWJGcmFtZS0+ZnJhbWVJRCgpIDogMCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Rm9jdXNlZEZyYW1lQ2hhbmdlZCh3ZWJGcmFtZSA/IHdlYkZy
YW1lLT5mcmFtZUlEKCkgOiAwKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIFBhZ2UqIFdlYkNo
cm9tZUNsaWVudDo6Y3JlYXRlV2luZG93KEZyYW1lKiBmcmFtZSwgY29uc3QgRnJhbWVMb2FkUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgV2luZG93RmVhdHVyZXMmIHdpbmRvd0ZlYXR1cmVzLCBjb25z
dCBOYXZpZ2F0aW9uQWN0aW9uJiBuYXZpZ2F0aW9uQWN0aW9uKQpAQCAtMjEzLDE0ICsyMTMsMTUg
QEAgUGFnZSogV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVXaW5kb3coRnJhbWUqIGZyYW1lLCBjb25z
dCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXMKIAogICAgIHVpbnQ2NF90IG5ld1BhZ2VJRCA9IDA7
CiAgICAgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6Q3JlYXRlTmV3UGFnZSh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBy
ZXF1ZXN0LnJlc291cmNlUmVxdWVzdCgpLCB3aW5kb3dGZWF0dXJlcywgbmF2aWdhdGlvbkFjdGlv
bkRhdGEpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlOjpSZXBseShuZXdQ
YWdlSUQsIHBhcmFtZXRlcnMpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKLSAgICAgICAgcmV0dXJuIDA7
CisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIGlm
ICghd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpDcmVhdGVOZXdQYWdlKHdlYkZyYW1lLT5mcmFtZUlEKCksIHJlcXVl
c3QucmVzb3VyY2VSZXF1ZXN0KCksIHdpbmRvd0ZlYXR1cmVzLCBuYXZpZ2F0aW9uQWN0aW9uRGF0
YSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkNyZWF0ZU5ld1BhZ2U6OlJlcGx5KG5ld1BhZ2VJ
RCwgcGFyYW1ldGVycyksIG1fcGFnZS0+cGFnZUlEKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGlmICghbmV3UGFnZUlEKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5jcmVhdGVXZWJQYWdlKG5l
d1BhZ2VJRCwgcGFyYW1ldGVycyk7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLndl
YlBhZ2UobmV3UGFnZUlEKS0+Y29yZVBhZ2UoKTsKKyAgICB3ZWJQcm9jZXNzLmNyZWF0ZVdlYlBh
Z2UobmV3UGFnZUlELCBwYXJhbWV0ZXJzKTsKKyAgICByZXR1cm4gd2ViUHJvY2Vzcy53ZWJQYWdl
KG5ld1BhZ2VJRCktPmNvcmVQYWdlKCk7CiB9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzaG93
KCkKQEAgLTI1MCw3ICsyNTEsNyBAQCBib29sIFdlYkNocm9tZUNsaWVudDo6dG9vbGJhcnNWaXNp
YmxlKCkKICAgICAgICAgcmV0dXJuIHRvb2xiYXJzVmlzaWJpbGl0eSA9PSBBUEk6OkluamVjdGVk
QnVuZGxlOjpQYWdlVUlDbGllbnQ6OlVJRWxlbWVudFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAg
CiAgICAgYm9vbCB0b29sYmFyc0FyZVZpc2libGUgPSB0cnVlOwotICAgIGlmICghV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJhcnNBcmVWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldFRvb2xiYXJzQXJlVmlzaWJsZTo6UmVwbHkodG9vbGJhcnNBcmVWaXNpYmxlKSwg
bV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpH
ZXRUb29sYmFyc0FyZVZpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0VG9vbGJh
cnNBcmVWaXNpYmxlOjpSZXBseSh0b29sYmFyc0FyZVZpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgp
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gdG9vbGJhcnNBcmVWaXNpYmxl
OwpAQCAtMjY4LDcgKzI2OSw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpzdGF0dXNiYXJWaXNp
YmxlKCkKICAgICAgICAgcmV0dXJuIHN0YXR1c2JhclZpc2liaWxpdHkgPT0gQVBJOjpJbmplY3Rl
ZEJ1bmRsZTo6UGFnZVVJQ2xpZW50OjpVSUVsZW1lbnRWaXNpYmlsaXR5OjpWaXNpYmxlOwogCiAg
ICAgYm9vbCBzdGF0dXNCYXJJc1Zpc2libGUgPSB0cnVlOwotICAgIGlmICghV2ViUHJvY2Vzczo6
c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFySXNWaXNpYmxlKCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkdldFN0YXR1c0JhcklzVmlzaWJsZTo6UmVwbHkoc3RhdHVzQmFySXNWaXNpYmxlKSwgbV9w
YWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRT
dGF0dXNCYXJJc1Zpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0U3RhdHVzQmFy
SXNWaXNpYmxlOjpSZXBseShzdGF0dXNCYXJJc1Zpc2libGUpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gc3RhdHVzQmFySXNWaXNpYmxlOwpA
QCAtMjk3LDcgKzI5OCw3IEBAIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjptZW51YmFyVmlzaWJsZSgp
CiAgICAgICAgIHJldHVybiBtZW51YmFyVmlzaWJpbGl0eSA9PSBBUEk6OkluamVjdGVkQnVuZGxl
OjpQYWdlVUlDbGllbnQ6OlVJRWxlbWVudFZpc2liaWxpdHk6OlZpc2libGU7CiAgICAgCiAgICAg
Ym9vbCBtZW51QmFySXNWaXNpYmxlID0gdHJ1ZTsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdl
UHJveHk6OkdldE1lbnVCYXJJc1Zpc2libGUoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0
TWVudUJhcklzVmlzaWJsZTo6UmVwbHkobWVudUJhcklzVmlzaWJsZSksIG1fcGFnZS0+cGFnZUlE
KCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6R2V0TWVudUJhcklzVmlz
aWJsZSgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRNZW51QmFySXNWaXNpYmxlOjpSZXBs
eShtZW51QmFySXNWaXNpYmxlKSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgcmV0dXJuIG1lbnVCYXJJc1Zpc2libGU7CkBAIC0zMzEsNyArMzMyLDcgQEAg
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UsIEZyYW1lKgogICAgIGlmIChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3Nh
Z2VzU2hvdWxkU3BpblJ1bkxvb3AoKSkKICAgICAgICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNw
aW5SdW5Mb29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7CiAgICAgCi0gICAgaWYgKCFXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2FnZSwgd2ViRnJh
bWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9yZVVubG9hZENv
bmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykpCisgICAgaWYgKCFXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwobWVzc2Fn
ZSwgd2ViRnJhbWUtPmZyYW1lSUQoKSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkJlZm9y
ZVVubG9hZENvbmZpcm1QYW5lbDo6UmVwbHkoc2hvdWxkQ2xvc2UpLCBtX3BhZ2UtPnBhZ2VJRCgp
LCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBzaG91bGRDbG9zZTsKQEAgLTM2Nyw3ICsz
NjgsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBhbGVydFRleHQpCiAgICAgdW5zaWduZWQgc3luY1NlbmRGbGFn
cyA9IElQQzo6SW5mb3JtUGxhdGZvcm1Qcm9jZXNzV2lsbFN1c3BlbmQ7CiAgICAgaWYgKFdlYlBh
Z2U6OnN5bmNocm9ub3VzTWVzc2FnZXNTaG91bGRTcGluUnVuTG9vcCgpKQogICAgICAgICBzeW5j
U2VuZEZsYWdzIHw9IElQQzo6U3BpblJ1bkxvb3BXaGlsZVdhaXRpbmdGb3JSZXBseTsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0QWxlcnQod2ViRnJhbWUtPmZyYW1l
SUQoKSwgYWxlcnRUZXh0KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdEFs
ZXJ0OjpSZXBseSgpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
OjptYXgoKSwgc3luY1NlbmRGbGFncyk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFy
ZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
UnVuSmF2YVNjcmlwdEFsZXJ0KHdlYkZyYW1lLT5mcmFtZUlEKCksIGFsZXJ0VGV4dCksIE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRBbGVydDo6UmVwbHkoKSwgbV9wYWdlLT5w
YWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3Mp
OwogfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6cnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0zODIsNyArMzgzLDcgQEAgYm9vbCBX
ZWJDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiBmcmFtZSwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQogICAgIGlmIChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hv
dWxkU3BpblJ1bkxvb3AoKSkKICAgICAgICAgc3luY1NlbmRGbGFncyB8PSBJUEM6OlNwaW5SdW5M
b29wV2hpbGVXYWl0aW5nRm9yUmVwbHk7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBp
ZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRT
eW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJtKHdlYkZyYW1l
LT5mcmFtZUlEKCksIG1lc3NhZ2UpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2Ny
aXB0Q29uZmlybTo6UmVwbHkocmVzdWx0KSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86
Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpKQorICAgIGlmICghV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2YVNjcmlwdENvbmZpcm0od2ViRnJhbWUtPmZyYW1lSUQo
KSwgbWVzc2FnZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRDb25maXJt
OjpSZXBseShyZXN1bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzOjptYXgoKSwgc3luY1NlbmRGbGFncykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IHJldHVybiByZXN1bHQ7CkBAIC00MDAsNyArNDAxLDcgQEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bkphdmFTY3JpcHRQcm9tcHQoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Us
IGMKICAgICBpZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdlc1Nob3VsZFNwaW5SdW5Mb29w
KCkpCiAgICAgICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGluUnVuTG9vcFdoaWxlV2FpdGlu
Z0ZvclJlcGx5OwogICAgIAotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UnVuSmF2
YVNjcmlwdFByb21wdCh3ZWJGcmFtZS0+ZnJhbWVJRCgpLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUp
LCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5KYXZhU2NyaXB0UHJvbXB0OjpSZXBseShyZXN1
bHQpLCBtX3BhZ2UtPnBhZ2VJRCgpLCBzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzOjptYXgoKSwg
c3luY1NlbmRGbGFncykpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpSdW5K
YXZhU2NyaXB0UHJvbXB0KHdlYkZyYW1lLT5mcmFtZUlEKCksIG1lc3NhZ2UsIGRlZmF1bHRWYWx1
ZSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJ1bkphdmFTY3JpcHRQcm9tcHQ6OlJlcGx5KHJl
c3VsdCksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgp
LCBzeW5jU2VuZEZsYWdzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuICFy
ZXN1bHQuaXNOdWxsKCk7CkBAIC00MTcsNyArNDE4LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdGF0dXNiYXJUZXh0KQogYm9vbCBXZWJD
aHJvbWVDbGllbnQ6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQogewogICAgIGJvb2wgc2hv
dWxkSW50ZXJydXB0ID0gZmFsc2U7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
aG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3Vs
ZEludGVycnVwdEphdmFTY3JpcHQ6OlJlcGx5KHNob3VsZEludGVycnVwdCksIG1fcGFnZS0+cGFn
ZUlEKCkpKQorICAgIGlmICghV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2hvdWxkSW50ZXJy
dXB0SmF2YVNjcmlwdCgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG91bGRJbnRlcnJ1cHRK
YXZhU2NyaXB0OjpSZXBseShzaG91bGRJbnRlcnJ1cHQpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHNob3VsZEludGVycnVwdDsKQEAgLTYw
MSw3ICs2MDIsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6bW91c2VEaWRNb3ZlT3ZlckVsZW1l
bnQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdAogCiAgICAgLy8gTm90aWZ5IHRo
ZSBVSVByb2Nlc3MuCiAgICAgV2ViSGl0VGVzdFJlc3VsdDo6RGF0YSB3ZWJIaXRUZXN0UmVzdWx0
RGF0YShoaXRUZXN0UmVzdWx0KTsKLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6TW91c2VEaWRNb3ZlT3ZlckVsZW1lbnQod2ViSGl0VGVzdFJlc3VsdERhdGEsIG1vZGlm
aWVyRmxhZ3MsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNU
b0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpNb3VzZURpZE1vdmVPdmVyRWxlbWVudCh3ZWJIaXRUZXN0UmVz
dWx0RGF0YSwgbW9kaWZpZXJGbGFncywgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNl
UHJlc3MoY29uc3QgSW50UG9pbnQmIG1vdXNlRG93blBvc2l0aW9uLCBjb25zdCBIaXRUZXN0UmVz
dWx0JiBoaXRUZXN0UmVzdWx0KQpAQCAtNjEzLDcgKzYxNCw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpkaWRCZWdpblRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoY29uc3QgSW50UG9p
bnQmIG1vCiAgICAgCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViSGl0VGVz
dFJlc3VsdDo6RGF0YSB3ZWJIaXRUZXN0UmVzdWx0RGF0YShoaXRUZXN0UmVzdWx0KTsKLSAgICBt
X3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQmVnaW5UcmFja2luZ1BvdGVu
dGlhbExvbmdNb3VzZVByZXNzKG1vdXNlRG93blBvc2l0aW9uLCB3ZWJIaXRUZXN0UmVzdWx0RGF0
YSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZEJlZ2luVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcyhtb3Vz
ZURvd25Qb3NpdGlvbiwgd2ViSGl0VGVzdFJlc3VsdERhdGEsIFVzZXJEYXRhKFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOwogfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6ZGlkUmVjb2duaXplTG9uZ01vdXNl
UHJlc3MoKQpAQCAtNjI0LDcgKzYyNSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpkaWRSZWNv
Z25pemVMb25nTW91c2VQcmVzcygpCiAgICAgbV9wYWdlLT5pbmplY3RlZEJ1bmRsZVVJQ2xpZW50
KCkuZGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MobV9wYWdlLCB1c2VyRGF0YSk7CiAKICAgICAv
LyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUmVjb2duaXplTG9uZ01vdXNlUHJlc3MoVXNlckRhdGEoV2ViUHJvY2Vzczo6
c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkp
KSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY29nbml6
ZUxvbmdNb3VzZVByZXNzKFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdl
YkNocm9tZUNsaWVudDo6ZGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91c2VQcmVzcygp
CkBAIC02MzUsNyArNjM2LDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmRpZENhbmNlbFRyYWNr
aW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MoKQogICAgIG1fcGFnZS0+aW5qZWN0ZWRCdW5kbGVV
SUNsaWVudCgpLmRpZENhbmNlbFRyYWNraW5nUG90ZW50aWFsTG9uZ01vdXNlUHJlc3MobV9wYWdl
LCB1c2VyRGF0YSk7CiAKICAgICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICBtX3BhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxM
b25nTW91c2VQcmVzcyhVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmpl
Y3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICBtX3BhZ2UtPnNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ2FuY2VsVHJhY2tpbmdQb3RlbnRpYWxMb25nTW91
c2VQcmVzcyhVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0b29sVGlwLCBUZXh0RGlyZWN0aW9uKQpA
QCAtNjYxLDcgKzY2Miw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpwcmludChGcmFtZSogZnJh
bWUpCiAgICAgLy8gdGhlIHByaW50IG9wZXJhdGlvbiBpcyBmaW5pc2hlZCB1bmV4cGVjdGVseSBh
bmQgdGhlIHdlYiBwcm9jZXNzIGNyYXNoZXMsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTI2OTc5LgogICAgIC8vIFRoZSBQcmludGVyTGlzdEd0ayBjbGFzcyBn
ZXRzIHRoZSBsaXN0IG9mIHByaW50ZXJzIGluIHRoZSBjb25zdHJ1Y3RvciBzbyB3ZSBqdXN0IG5l
ZWQgdG8gZW5zdXJlIHRoZXJlJ3MgYW4gaW5zdGFuY2UgYWxpdmUKICAgICAvLyBkdXJpbmcgdGhl
IHN5bmNocm9ub3VzIHByaW50IG9wZXJhdGlvbi4KLSAgICBSZWZQdHI8UHJpbnRlckxpc3RHdGs+
IHByaW50ZXJMaXN0ID0gUHJpbnRlckxpc3RHdGs6OnNoYXJlZCgpOworICAgIFJlZlB0cjxQcmlu
dGVyTGlzdEd0az4gcHJpbnRlckxpc3QgPSBQcmludGVyTGlzdEd0azo6c2luZ2xldG9uKCk7CiAj
ZW5kaWYKIAogICAgIHVuc2lnbmVkIHN5bmNTZW5kRmxhZ3MgPSBJUEM6OkluZm9ybVBsYXRmb3Jt
UHJvY2Vzc1dpbGxTdXNwZW5kOwpAQCAtNjkwLDcgKzY5MSw3IEBAIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlCiAgICAgICAgIGlmIChXZWJQYWdlOjpzeW5jaHJvbm91c01lc3NhZ2VzU2hvdWxkU3Bp
blJ1bkxvb3AoKSkKICAgICAgICAgICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGluUnVuTG9v
cFdoaWxlV2FpdGluZ0ZvclJlcGx5OwogICAgICAgICAKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoCisgICAgICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAog
ICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1b3Rh
KHdlYkZyYW1lLT5mcmFtZUlEKCksIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCksIGRhdGFi
YXNlTmFtZSwgZGV0YWlscy5kaXNwbGF5TmFtZSgpLCBjdXJyZW50UXVvdGEsIGN1cnJlbnRPcmln
aW5Vc2FnZSwgZGV0YWlscy5jdXJyZW50VXNhZ2UoKSwgZGV0YWlscy5leHBlY3RlZFVzYWdlKCkp
LAogICAgICAgICAgICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhjZWVkZWREYXRhYmFzZVF1
b3RhOjpSZXBseShuZXdRdW90YSksIG1fcGFnZS0+cGFnZUlEKCksIHN0ZDo6Y2hyb25vOjptaWxs
aXNlY29uZHM6Om1heCgpLCBzeW5jU2VuZEZsYWdzKTsKICAgICB9CkBAIC03MTgsNyArNzE5LDcg
QEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6OnJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGEoU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiwKICAgICAgICAgcmV0dXJuOwogCiAgICAgdWludDY0
X3QgbmV3UXVvdGEgPSAwOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKAorICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKAogICAgICAgICBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpSZWFjaGVkQXBwbGljYXRpb25DYWNoZU9yaWdpblF1b3RhKG9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCksIGN1cnJlbnRRdW90YSwgdG90YWxCeXRlc05lZWRlZCksCiAgICAgICAg
IE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlJlYWNoZWRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVv
dGE6OlJlcGx5KG5ld1F1b3RhKSwgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kczo6bWF4KCksIHN5bmNTZW5kRmxhZ3MpOwogCkBAIC0xMDUzLDcgKzEwNTQsNyBAQCB2
b2lkIFdlYkNocm9tZUNsaWVudDo6c2V0UGFnZUFjdGl2aXR5U3RhdGUoUGFnZUFjdGl2aXR5U3Rh
dGU6OkZsYWdzIGFjdGl2aXR5U3RhdAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OndyYXBDcnlwdG9L
ZXkoY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBrZXksIFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtl
eSkgY29uc3QKIHsKICAgICBib29sIHN1Y2NlZWRlZDsKLSAgICBpZiAoIVdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OldyYXBDcnlwdG9LZXkoa2V5KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V3Jh
cENyeXB0b0tleTo6UmVwbHkoc3VjY2VlZGVkLCB3cmFwcGVkS2V5KSwgbV9wYWdlLT5wYWdlSUQo
KSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXcmFwQ3J5cHRvS2V5KGtl
eSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OldyYXBDcnlwdG9LZXk6OlJlcGx5KHN1Y2NlZWRl
ZCwgd3JhcHBlZEtleSksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIHN1Y2NlZWRlZDsKIH0KQEAgLTEwNjEsNyArMTA2Miw3IEBAIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50Ojp3cmFwQ3J5cHRvS2V5KGNvbnN0IFZlY3Rvcjx1aW50OF90PiYga2V5LCBW
ZWN0b3I8dWludDhfdD4mCiBib29sIFdlYkNocm9tZUNsaWVudDo6dW53cmFwQ3J5cHRvS2V5KGNv
bnN0IFZlY3Rvcjx1aW50OF90PiYgd3JhcHBlZEtleSwgVmVjdG9yPHVpbnQ4X3Q+JiBrZXkpIGNv
bnN0CiB7CiAgICAgYm9vbCBzdWNjZWVkZWQ7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpVbndyYXBDcnlwdG9LZXkod3JhcHBlZEtleSksIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6
OlVud3JhcENyeXB0b0tleTo6UmVwbHkoc3VjY2VlZGVkLCBrZXkpLCBtX3BhZ2UtPnBhZ2VJRCgp
KSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlVud3JhcENyeXB0b0tleSh3
cmFwcGVkS2V5KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6VW53cmFwQ3J5cHRvS2V5OjpSZXBs
eShzdWNjZWVkZWQsIGtleSksIG1fcGFnZS0+cGFnZUlEKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmV0dXJuIHN1Y2NlZWRlZDsKIH0KQEAgLTEwODIsNyArMTA4Myw3IEBAIHZvaWQg
V2ViQ2hyb21lQ2xpZW50OjpoYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2soV2ViQ29yZTo6RnJh
bWVTZWxlY3Rpb24mIHNlbGVjCiAKIGJvb2wgV2ViQ2hyb21lQ2xpZW50OjpoYXNSZWxldmFudFNl
bGVjdGlvblNlcnZpY2VzKGJvb2wgaXNUZXh0T25seSkgY29uc3QKIHsKLSAgICByZXR1cm4gKGlz
VGV4dE9ubHkgJiYgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzU2VsZWN0aW9uU2VydmljZXMoKSkg
fHwgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOworICAgIHJl
dHVybiAoaXNUZXh0T25seSAmJiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5oYXNTZWxlY3Rpb25T
ZXJ2aWNlcygpKSB8fCBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5oYXNSaWNoQ29udGVudFNlcnZp
Y2VzKCk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDb2xvckNob29zZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb2xvckNob29zZXIuY3BwCmluZGV4IGI3NzkxODIx
NjJkZmE4YzJlNDQ2MDZjZDFiMmFmYzRlNTQ1NmZlMWUuLjE1ODU0YWVjMGI5YjFlYTRkYjg5YTI2
MDVjODkzOTY4NzllNjJiYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ29sb3JDaG9vc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbG9yQ2hvb3Nlci5jcHAKQEAgLTQzLDcgKzQz
LDcgQEAgV2ViQ29sb3JDaG9vc2VyOjpXZWJDb2xvckNob29zZXIoV2ViUGFnZSogcGFnZSwgQ29s
b3JDaG9vc2VyQ2xpZW50KiBjbGllbnQsIGNvbnMKICAgICAsIG1fcGFnZShwYWdlKQogewogICAg
IG1fcGFnZS0+c2V0QWN0aXZlQ29sb3JDaG9vc2VyKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2hvd0NvbG9yUGlja2VyKGluaXRpYWxDb2xvciwgY2xpZW50LT5lbGVtZW50UmVjdFJl
bGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTaG93Q29sb3JQaWNrZXIoaW5pdGlhbENvbG9yLCBjbGllbnQtPmVsZW1lbnRS
ZWN0UmVsYXRpdmVUb1Jvb3RWaWV3KCkpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogV2ViQ29s
b3JDaG9vc2VyOjp+V2ViQ29sb3JDaG9vc2VyKCkKQEAgLTc1LDcgKzc1LDcgQEAgdm9pZCBXZWJD
b2xvckNob29zZXI6OnJlYXR0YWNoQ29sb3JDaG9vc2VyKGNvbnN0IENvbG9yJiBjb2xvcikKICAg
ICBtX3BhZ2UtPnNldEFjdGl2ZUNvbG9yQ2hvb3Nlcih0aGlzKTsKIAogICAgIEFTU0VSVChtX2Nv
bG9yQ2hvb3NlckNsaWVudCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29sb3JQaWNr
ZXIoY29sb3IsIG1fY29sb3JDaG9vc2VyQ2xpZW50LT5lbGVtZW50UmVjdFJlbGF0aXZlVG9Sb290
VmlldygpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpT
aG93Q29sb3JQaWNrZXIoY29sb3IsIG1fY29sb3JDaG9vc2VyQ2xpZW50LT5lbGVtZW50UmVjdFJl
bGF0aXZlVG9Sb290VmlldygpKSwgbV9wYWdlLT5wYWdlSUQoKSk7CiB9CiAKIHZvaWQgV2ViQ29s
b3JDaG9vc2VyOjpzZXRTZWxlY3RlZENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTg2LDcg
Kzg2LDcgQEAgdm9pZCBXZWJDb2xvckNob29zZXI6OnNldFNlbGVjdGVkQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQogICAgIGlmIChtX3BhZ2UtPmFjdGl2ZUNvbG9yQ2hvb3NlcigpICE9IHRoaXMp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2V0Q29sb3JQaWNr
ZXJDb2xvcihjb2xvciksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2V0Q29sb3JQaWNrZXJDb2xvcihjb2xvciksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQog
CiB2b2lkIFdlYkNvbG9yQ2hvb3Nlcjo6ZW5kQ2hvb3NlcigpCkBAIC05NCw3ICs5NCw3IEBAIHZv
aWQgV2ViQ29sb3JDaG9vc2VyOjplbmRDaG9vc2VyKCkKICAgICBpZiAoIW1fcGFnZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFbmRDb2xvclBpY2tlcigpLCBt
X3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkVuZENvbG9yUGlj
a2VyKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRp
dG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCA1MjZhYzU3M2FlYjdmODkzZjA5NmRiYjMxYmI2OTAx
NDU4ODFmNDg2Li4zNGFmYmJhZGZkYjRkOTg2ZjVmN2NhM2RjZGRhNDcwM2ZmZTc5MjZmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgV2ViRWRpdG9yQ2xp
ZW50Ojppc1NlbGVjdFRyYWlsaW5nV2hpdGVzcGFjZUVuYWJsZWQoKQogCiBib29sIFdlYkVkaXRv
ckNsaWVudDo6aXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKQogewotICAgIHJldHVy
biBXZWJQcm9jZXNzOjpzaGFyZWQoKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNDb250aW51b3VzU3Bl
bGxDaGVja2luZ0VuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRl
eHRDaGVja2VyU3RhdGUoKS5pc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZDsKIH0KIAog
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVsbENoZWNraW5nKCkKQEAg
LTk4LDcgKzk4LDcgQEAgdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUNvbnRpbnVvdXNTcGVs
bENoZWNraW5nKCkKIAogYm9vbCBXZWJFZGl0b3JDbGllbnQ6OmlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3Rh
dGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUoKS5pc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQ7CiB9
CiAKIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVHcmFtbWFyQ2hlY2tpbmcoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxv
YWRlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcAppbmRleCA2MzRhMTRhZTAyMzVlYmQ2ZjRkNjU0ODgy
ZjVhNjkzNzlhM2QwYTU3Li45NTE0MDllMzQ2ODFkY2M3OTAyNTZiOTQ2YzgyYWE2YmMxZmQ1Y2U4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lTG9hZGVyQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRldGFjaGVkRnJvbVBhcmVudDIoKQogICAgIHdl
YlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVtb3ZlRnJhbWVGcm9tSGll
cmFyY2h5KHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUg
VUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
UmVtb3ZlRnJhbWVGcm9tSGllcmFyY2h5KG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2Vi
UHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQo
KSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpE
aWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHkobV9mcmFtZS0+ZnJhbWVJRCgpLCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGV0YWNo
ZWRGcm9tUGFyZW50MygpCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRM
b2EKICAgICBpZiAoIXdlYlBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6
OnNoYXJlZCgpLnN1cHBsZW1lbnQ8QXV0aGVudGljYXRpb25NYW5hZ2VyPigpLT5kaWRSZWNlaXZl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UobV9mcmFtZSwgY2hhbGxlbmdlKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PEF1dGhlbnRpY2F0aW9uTWFuYWdlcj4oKS0+ZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKG1fZnJhbWUsIGNoYWxsZW5nZSk7CiB9CiAK
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIC8qaWRlbnRpZmllciov
LCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpICAgIApAQCAtMjkxLDcgKzI5MSw3IEBA
IHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGly
ZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRl
ckNsaWVudCgpLmRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZy
YW1lKHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQ
cm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVj
ZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJh
bWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgdXJsLCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUt
PmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIHVybCwgVXNlckRhdGEo
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0
YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQpAQCAtMzI3LDcgKzMyNyw3IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkK
IAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9jZXNzLgogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBk
b2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUt
PmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKLSAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25Gb3JG
cmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBT
YW1lRG9jdW1lbnROYXZpZ2F0aW9uQW5jaG9yTmF2aWdhdGlvbiwgbV9mcmFtZS0+Y29yZUZyYW1l
KCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFy
ZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsK
KyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25Gb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5h
dmlnYXRpb25JRCgpLCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uQW5jaG9yTmF2aWdhdGlvbiwgbV9m
cmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCkKQEAgLTM0Myw3ICszNDMsNyBAQCB2b2lkIFdlYkZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdpdGhpblBhZ2UoKQogCiAgICAg
Ly8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCiAgICAgV2ViRG9jdW1lbnRMb2FkZXImIGRvY3VtZW50
TG9hZGVyID0gc3RhdGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXImPigqbV9mcmFtZS0+Y29yZUZy
YW1lKCktPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpOwotICAgIHdlYlBhZ2UtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdhdGlvbkZvckZyYW1lKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFNhbWVEb2N1
bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQdXNoLCBtX2ZyYW1lLT5jb3JlRnJhbWUoKS0+ZG9j
dW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdl
YlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkU2FtZURvY3VtZW50TmF2aWdh
dGlvbkZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlv
bklEKCksIFNhbWVEb2N1bWVudE5hdmlnYXRpb25TZXNzaW9uU3RhdGVQdXNoLCBtX2ZyYW1lLT5j
b3JlRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkp
LmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJl
cGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpCiAKICAgICAv
LyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1lbnRM
b2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3JlRnJh
bWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9m
cmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3Vt
ZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVJlcGxhY2UsIG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5k
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCku
dHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAg
d2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZp
Z2F0aW9uRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0
aW9uSUQoKSwgU2FtZURvY3VtZW50TmF2aWdhdGlvblNlc3Npb25TdGF0ZVJlcGxhY2UsIG1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSwgVXNlckRhdGEoV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5n
ZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFdlYkZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgpCiAKICAgICAvLyBO
b3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1lbnRMb2Fk
ZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3JlRnJhbWUo
KS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgd2ViUGFnZS0+c2VuZChNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpEaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUobV9mcmFt
ZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgU2FtZURvY3VtZW50
TmF2aWdhdGlvblNlc3Npb25TdGF0ZVBvcCwgbV9mcmFtZS0+Y29yZUZyYW1lKCktPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zv
cm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdl
LT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFNhbWVEb2N1bWVudE5hdmlnYXRpb25G
b3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgp
LCBTYW1lRG9jdW1lbnROYXZpZ2F0aW9uU2Vzc2lvblN0YXRlUG9wLCBtX2ZyYW1lLT5jb3JlRnJh
bWUoKS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgp
KSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zZSgp
CkBAIC0zODUsNyArMzg1LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hX
aWxsQ2xvc2UoKQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2Vp
dmVJY29uKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVj
dGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJY29uRGF0YWJhc2U6OkRpZFJlY2VpdmVJY29uRm9y
UGFnZVVSTChtX2ZyYW1lLT51cmwoKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkljb25EYXRhYmFz
ZTo6RGlkUmVjZWl2ZUljb25Gb3JQYWdlVVJMKG1fZnJhbWUtPnVybCgpKSwgMCk7CiB9CiAKIHZv
aWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQo
KQpAQCAtNDEzLDcgKzQxMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogICAgIFN0cmluZyB1bnJlYWNoYWJsZVVSTCA9IHBy
b3Zpc2lvbmFsTG9hZGVyLnVucmVhY2hhYmxlVVJMKCkuc3RyaW5nKCk7CiAKICAgICAvLyBOb3Rp
ZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBw
cm92aXNpb25hbExvYWRlci5uYXZpZ2F0aW9uSUQoKSwgdXJsLCB1bnJlYWNoYWJsZVVSTCwgVXNl
ckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2Vy
RGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpEaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQo
KSwgcHJvdmlzaW9uYWxMb2FkZXIubmF2aWdhdGlvbklEKCksIHVybCwgdW5yZWFjaGFibGVVUkws
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0
aXRsZSkKQEAgLTQyOSw3ICs0MjksNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZFJlY2VpdmVUaXRsZShjb25zdCBTdHJpbmdXaXRoRGlyZWN0aW9uJiB0aQogICAgIHdl
YlBhZ2UtPmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkUmVjZWl2ZVRpdGxlRm9yRnJh
bWUod2ViUGFnZSwgdGl0bGUuc3RyaW5nKCksIG1fZnJhbWUsIHVzZXJEYXRhKTsKIAogICAgIC8v
IE5vdGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2VQcm94eTo6RGlkUmVjZWl2ZVRpdGxlRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCB0aXRs
ZS5zdHJpbmcoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSZWNlaXZlVGl0bGVGb3JGcmFtZShtX2ZyYW1lLT5m
cmFtZUlEKCksIHRpdGxlLnN0cmluZygpLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIH0K
IAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDaGFuZ2VJY29ucyhXZWJD
b3JlOjpJY29uVHlwZSkKQEAgLTQ1Myw3ICs0NTMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nl
c3MuCiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZENvbW1p
dExvYWRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRp
b25JRCgpLCBkb2N1bWVudExvYWRlci5yZXNwb25zZSgpLm1pbWVUeXBlKCksIG1fZnJhbWVIYXND
dXN0b21Db250ZW50UHJvdmlkZXIsIHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2ZyYW1lLT5jb3Jl
RnJhbWUoKS0+bG9hZGVyKCkubG9hZFR5cGUoKSksIGRvY3VtZW50TG9hZGVyLnJlc3BvbnNlKCku
Y2VydGlmaWNhdGVJbmZvKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkQ29tbWl0TG9hZEZvckZyYW1lKG1fZnJh
bWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIGRvY3VtZW50TG9h
ZGVyLnJlc3BvbnNlKCkubWltZVR5cGUoKSwgbV9mcmFtZUhhc0N1c3RvbUNvbnRlbnRQcm92aWRl
ciwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5s
b2FkVHlwZSgpKSwgZG9jdW1lbnRMb2FkZXIucmVzcG9uc2UoKS5jZXJ0aWZpY2F0ZUluZm8oKSwg
VXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxl
cyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiAgICAgd2ViUGFnZS0+ZGlkQ29tbWl0TG9hZCht
X2ZyYW1lKTsKIH0KIApAQCAtNDgzLDcgKzQ4Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBl
CiAgICAgICAgIG5hdmlnYXRpb25JRCA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyKj4o
ZG9jdW1lbnRMb2FkZXIpLT5uYXZpZ2F0aW9uSUQoKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQ
cm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmFp
bFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgbmF2aWdhdGlvbklE
LCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1Rv
SGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRGYWlsUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUobV9mcmFt
ZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uSUQsIGVycm9yLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQo
KSkpKTsKIAogICAgIC8vIElmIHdlIGhhdmUgYSBsb2FkIGxpc3RlbmVyLCBub3RpZnkgaXQuCiAg
ICAgaWYgKFdlYkZyYW1lOjpMb2FkTGlzdGVuZXIqIGxvYWRMaXN0ZW5lciA9IG1fZnJhbWUtPmxv
YWRMaXN0ZW5lcigpKQpAQCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGll
bnQ6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiAKICAg
ICAvLyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KICAgICBXZWJEb2N1bWVudExvYWRlciYgZG9jdW1l
bnRMb2FkZXIgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3Jl
RnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSk7Ci0gICAgd2ViUGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGYWlsTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1l
SUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIGVycm9yLCBVc2VyRGF0YShXZWJQ
cm9jZXNzOjpzaGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgp
KS5nZXQoKSkpKTsKKyAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRp
ZEZhaWxMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5uYXZp
Z2F0aW9uSUQoKSwgZXJyb3IsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogCiAgICAgLy8g
SWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIsIG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJhbWU6
OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVyID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkpCkBA
IC01MjQsNyArNTI0LDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRG
aW5pc2hEb2N1bWVudExvYWQoKQogICAgIFdlYkRvY3VtZW50TG9hZGVyJiBkb2N1bWVudExvYWRl
ciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJhbWUtPmNvcmVGcmFtZSgp
LT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKIAogICAgIC8vIE5vdGlmeSB0aGUgVUlQcm9j
ZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNo
RG9jdW1lbnRMb2FkRm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgpLCBkb2N1bWVudExvYWRlci5u
YXZpZ2F0aW9uSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5pc2hEb2N1bWVudExvYWRGb3JGcmFtZSht
X2ZyYW1lLT5mcmFtZUlEKCksIGRvY3VtZW50TG9hZGVyLm5hdmlnYXRpb25JRCgpLCBVc2VyRGF0
YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJE
YXRhLmdldCgpKS5nZXQoKSkpKTsKIH0KIAogdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkKCkKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIFdlYkZyYW1lTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQogICAgIFdlYkRvY3VtZW50TG9hZGVy
JiBkb2N1bWVudExvYWRlciA9IHN0YXRpY19jYXN0PFdlYkRvY3VtZW50TG9hZGVyJj4oKm1fZnJh
bWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKTsKIAogICAgIC8vIE5v
dGlmeSB0aGUgVUlQcm9jZXNzLgotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6RGlkRmluaXNoTG9hZEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRM
b2FkZXIubmF2aWdhdGlvbklEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBh
Z2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmluaXNoTG9hZEZvckZyYW1lKG1f
ZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXIubmF2aWdhdGlvbklEKCksIFVzZXJEYXRh
KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRh
dGEuZ2V0KCkpLmdldCgpKSkpOwogCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxvYWQgbGlzdGVuZXIs
IG5vdGlmeSBpdC4KICAgICBpZiAoV2ViRnJhbWU6OkxvYWRMaXN0ZW5lciogbG9hZExpc3RlbmVy
ID0gbV9mcmFtZS0+bG9hZExpc3RlbmVyKCkpCkBAIC01NzUsNyArNTc1LDcgQEAgdm9pZCBXZWJG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMYXlvdXQoTGF5b3V0TWlsZXN0b25lcyBtaWxl
c3RvbmVzKQogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRo
ZSBvbGQgZGlkRmlyc3RMYXlvdXQgQVBJIHNpbmNlIHRoaXMgaXMgZG9pbmcgZG91YmxlIGR1dHkg
d2l0aCB0aGUKICAgICAgICAgLy8gbmV3IGRpZExheW91dCBBUEkuCiAgICAgICAgIHdlYlBhZ2Ut
PmluamVjdGVkQnVuZGxlTG9hZGVyQ2xpZW50KCkuZGlkRmlyc3RMYXlvdXRGb3JGcmFtZSh3ZWJQ
YWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7Ci0gICAgICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6RGlkRmlyc3RMYXlvdXRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCks
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgICAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0TGF5b3V0Rm9yRnJhbWUobV9mcmFtZS0+ZnJhbWVJRCgp
LCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5k
bGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKICAgICAg
ICAgLy8gRklYTUU6IERvIHRoaXMgb24gRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0IHdo
ZW4gTWFjIFNhZmFyaSBpcyBhYmxlIHRvIGhhbmRsZSBpdCAoPHJkYXI6Ly9wcm9ibGVtLzE3NTgw
MDIxPikKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZExheW91dChMYXlvdXRNaWxlc3RvbmVzIG1pbGVzdG9uZXMpCiAKICAgICAvLyBTZW5k
IHRoaXMgYWZ0ZXIgRGlkRmlyc3RMYXlvdXQtc3BlY2lmaWMgY2FsbHMgc2luY2Ugc29tZSBjbGll
bnRzIGV4cGVjdCB0byBnZXQgdGhvc2UgbWVzc2FnZXMgZmlyc3QuCiAgICAgd2ViUGFnZS0+aW5q
ZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRMYXlvdXQod2ViUGFnZSwgbWlsZXN0b25lcywg
dXNlckRhdGEpOwotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlk
TGF5b3V0KG1pbGVzdG9uZXMsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2Ut
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkTGF5b3V0KG1pbGVzdG9uZXMsIFVzZXJE
YXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNl
ckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogCiAgICAgaWYgKG1pbGVzdG9uZXMgJiBEaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQpIHsKICAgICAgICAgaWYgKG1fZnJhbWUtPmlzTWFpbkZyYW1l
KCkgJiYgIW1fZGlkQ29tcGxldGVQYWdlVHJhbnNpdGlvbiAmJiAhd2ViUGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0dGluZ3MoKS5zdXBwcmVzc2VzSW5jcmVtZW50YWxSZW5kZXJpbmcoKSkgewpAQCAtNjA0
LDcgKzYwNCw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTGF5b3V0
KExheW91dE1pbGVzdG9uZXMgbWlsZXN0b25lcykKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBjb25zaWRlciByZW1vdmluZyB0aGUgb2xkIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dEZvckZyYW1lIEFQSSBzaW5jZSB0aGlzIGlzIGRvaW5nCiAgICAgICAgIC8vIGRvdWJsZSBkdXR5
IHdpdGggdGhlIG5ldyBkaWRMYXlvdXQgQVBJLgogICAgICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1
bmRsZUxvYWRlckNsaWVudCgpLmRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1l
KHdlYlBhZ2UsIG1fZnJhbWUsIHVzZXJEYXRhKTsKLSAgICAgICAgd2ViUGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JGcmFt
ZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5z
Zm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgICAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dEZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSku
Z2V0KCkpKSk7CiAgICAgfQogfQogCkBAIC02ODYsNyArNjg2LDcgQEAgdm9pZCBXZWJGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnMKICAgICB1bnNpZ25lZCBzeW5jU2VuZEZsYWdzID0gSVBDOjpJbmZvcm1QbGF0Zm9y
bVByb2Nlc3NXaWxsU3VzcGVuZDsKICAgICBpZiAoV2ViUGFnZTo6c3luY2hyb25vdXNNZXNzYWdl
c1Nob3VsZFNwaW5SdW5Mb29wKCkpCiAgICAgICAgIHN5bmNTZW5kRmxhZ3MgfD0gSVBDOjpTcGlu
UnVuTG9vcFdoaWxlV2FpdGluZ0ZvclJlcGx5OwotICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJh
bWUtPmZyYW1lSUQoKSwgcmVzcG9uc2UsIHJlcXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVu
ZXJJRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFu
ZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9s
aWN5QWN0aW9uLCBkb3dubG9hZElEKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCks
IHN5bmNTZW5kRmxhZ3MpKQorICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5Rm9yUmVzcG9uc2VTeW5jKG1fZnJhbWUtPmZyYW1lSUQo
KSwgcmVzcG9uc2UsIHJlcXVlc3QsIGNhblNob3dNSU1FVHlwZSwgbGlzdGVuZXJJRCwgVXNlckRh
dGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2Vy
RGF0YS5nZXQoKSkuZ2V0KCkpKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGVjaWRlUG9saWN5
Rm9yUmVzcG9uc2VTeW5jOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgcG9saWN5QWN0aW9u
LCBkb3dubG9hZElEKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCksIHN5bmNTZW5k
RmxhZ3MpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBjYWxsIHRoaXMgc3luY2hyb25v
dXNseSBiZWNhdXNlIENGTmV0d29yayBjYW4gb25seSBjb252ZXJ0IGEgbG9hZGluZyBjb25uZWN0
aW9uIHRvIGEgZG93bmxvYWQgZnJvbSBpdHMgZGlkUmVjZWl2ZVJlc3BvbnNlIGNhbGxiYWNrLgpA
QCAtNzIxLDcgKzcyMSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKGNvbnN0IE5hdmlnYXRpCiAgICAgbmF2aWdhdGlv
bkFjdGlvbkRhdGEuaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBuYXZpZ2F0aW9uQWN0aW9uLnBy
b2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogICAgIG5hdmlnYXRpb25BY3Rpb25EYXRhLmNhbkhhbmRs
ZVJlcXVlc3QgPSB3ZWJQYWdlLT5jYW5IYW5kbGVSZXF1ZXN0KHJlcXVlc3QpOwogCi0gICAgd2Vi
UGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOZXdXaW5k
b3dBY3Rpb24obV9mcmFtZS0+ZnJhbWVJRCgpLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgcmVxdWVz
dCwgZnJhbWVOYW1lLCBsaXN0ZW5lcklELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICB3
ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvck5ld1dp
bmRvd0FjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIG5hdmlnYXRpb25BY3Rpb25EYXRhLCByZXF1
ZXN0LCBmcmFtZU5hbWUsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwog
fQogCiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5h
dmlnYXRpb25BY3Rpb24oY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgbmF2aWdhdGlvbkFjdGlvbiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gcHJw
Rm9ybVN0YXRlLCBGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uKQpAQCAtNzg4LDcgKzc4OCw3
IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2
aWdhdGlvbkFjdGlvbihjb25zdCBOYXZpZ2F0CiAgICAgICAgIGRvY3VtZW50TG9hZGVyID0gc3Rh
dGljX2Nhc3Q8V2ViRG9jdW1lbnRMb2FkZXIqPihjb3JlRnJhbWUtPmxvYWRlcigpLmRvY3VtZW50
TG9hZGVyKCkpOwogCiAgICAgLy8gTm90aWZ5IHRoZSBVSVByb2Nlc3MuCi0gICAgaWYgKCF3ZWJQ
YWdlLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JOYXZp
Z2F0aW9uQWN0aW9uKG1fZnJhbWUtPmZyYW1lSUQoKSwgZG9jdW1lbnRMb2FkZXItPm5hdmlnYXRp
b25JRCgpLCBuYXZpZ2F0aW9uQWN0aW9uRGF0YSwgb3JpZ2luYXRpbmdGcmFtZSA/IG9yaWdpbmF0
aW5nRnJhbWUtPmZyYW1lSUQoKSA6IDAsIG5hdmlnYXRpb25BY3Rpb24ucmVzb3VyY2VSZXF1ZXN0
KCksIHJlcXVlc3QsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRy
YW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSksIE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb246OlJlcGx5KHJl
Y2VpdmVkUG9saWN5QWN0aW9uLCBuZXdOYXZpZ2F0aW9uSUQsIHBvbGljeUFjdGlvbiwgZG93bmxv
YWRJRCkpKQorICAgIGlmICghd2ViUGFnZS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihtX2ZyYW1lLT5mcmFtZUlEKCksIGRv
Y3VtZW50TG9hZGVyLT5uYXZpZ2F0aW9uSUQoKSwgbmF2aWdhdGlvbkFjdGlvbkRhdGEsIG9yaWdp
bmF0aW5nRnJhbWUgPyBvcmlnaW5hdGluZ0ZyYW1lLT5mcmFtZUlEKCkgOiAwLCBuYXZpZ2F0aW9u
QWN0aW9uLnJlc291cmNlUmVxdWVzdCgpLCByZXF1ZXN0LCBsaXN0ZW5lcklELCBVc2VyRGF0YShX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRh
LmdldCgpKS5nZXQoKSkpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEZWNpZGVQb2xpY3lGb3JO
YXZpZ2F0aW9uQWN0aW9uOjpSZXBseShyZWNlaXZlZFBvbGljeUFjdGlvbiwgbmV3TmF2aWdhdGlv
bklELCBwb2xpY3lBY3Rpb24sIGRvd25sb2FkSUQpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ly8gV2UgY2FsbCB0aGlzIHN5bmNocm9ub3VzbHkgYmVjYXVzZSBXZWJDb3JlIGNhbm5vdCBncmFj
ZWZ1bGx5IGhhbmRsZSBhIGZyYW1lIGxvYWQgd2l0aG91dCBhIHN5bmNocm9ub3VzIG5hdmlnYXRp
b24gcG9saWN5IHJlcGx5LgpAQCAtODEzLDcgKzgxMyw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJv
ciYKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZVBvbGljeUNsaWVudCgpLnVuYWJsZVRvSW1w
bGVtZW50UG9saWN5KHdlYlBhZ2UsIG1fZnJhbWUsIGVycm9yLCB1c2VyRGF0YSk7CiAKICAgICAv
LyBOb3RpZnkgdGhlIFVJUHJvY2Vzcy4KLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlVuYWJsZVRvSW1wbGVtZW50UG9saWN5KG1fZnJhbWUtPmZyYW1lSUQoKSwgZXJy
b3IsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6VW5hYmxlVG9JbXBsZW1lbnRQb2xpY3kobV9mcmFtZS0+ZnJhbWVJRCgp
LCBlcnJvciwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRTdWJtaXRFdmVudChQYXNzUmVmUHRyPEZvcm1T
dGF0ZT4gcHJwRm9ybVN0YXRlKQpAQCAtODUzLDcgKzg1Myw3IEBAIHZvaWQgV2ViRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFN1Ym1pdEZvcm0oUGFzc1JlZlB0cjxGb3JtU3RhdGU+IHBy
cEZvcm1TCiAKICAgICB1aW50NjRfdCBsaXN0ZW5lcklEID0gbV9mcmFtZS0+c2V0VXBQb2xpY3lM
aXN0ZW5lcihXVEY6Om1vdmUoZnVuY3Rpb24pKTsKIAotICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6V2lsbFN1Ym1pdEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3Vy
Y2VGcmFtZS0+ZnJhbWVJRCgpLCB2YWx1ZXMsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2lsbFN1
Ym1pdEZvcm0obV9mcmFtZS0+ZnJhbWVJRCgpLCBzb3VyY2VGcmFtZS0+ZnJhbWVJRCgpLCB2YWx1
ZXMsIGxpc3RlbmVySUQsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9y
bU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdl
YkZyYW1lTG9hZGVyQ2xpZW50OjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2Fk
ZXIqKQpAQCAtMTAwOSw3ICsxMDA5LDcgQEAgYm9vbCBXZWJGcmFtZUxvYWRlckNsaWVudDo6c2hv
dWxkR29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAogICAgIGlmICghc2hv
dWxkR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6V2lsbEdvVG9CYWNrRm9yd2Fy
ZExpc3RJdGVtKGl0ZW1JRCwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3Jt
T2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpXaWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW0o
aXRlbUlELCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zvcm1PYmplY3Rz
VG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMTAyMyw3ICsxMDIzLDcgQEAgdm9pZCBXZWJGcmFtZUxvYWRlckNsaWVudDo6ZGlkRGlz
cGxheUluc2VjdXJlQ29udGVudCgpCiAKICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRl
ckNsaWVudCgpLmRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZSh3ZWJQYWdlLCBtX2Zy
YW1lLCB1c2VyRGF0YSk7CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkRpZERpc3BsYXlJbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCks
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMo
dXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOworICAgIHdlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKG1fZnJhbWUtPmZy
YW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudHJhbnNmb3JtT2JqZWN0
c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVM
b2FkZXJDbGllbnQ6OmRpZFJ1bkluc2VjdXJlQ29udGVudChTZWN1cml0eU9yaWdpbiosIGNvbnN0
IFVSTCYpCkBAIC0xMDM2LDcgKzEwMzYsNyBAQCB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRSdW5JbnNlY3VyZUNvbnRlbnQoU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBVUkwmKQogCiAgICAg
d2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVMb2FkZXJDbGllbnQoKS5kaWRSdW5JbnNlY3VyZUNvbnRl
bnRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7CiAKLSAgICB3ZWJQYWdlLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJ1bkluc2VjdXJlQ29udGVudEZvckZyYW1l
KG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNm
b3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkpKSk7CisgICAgd2ViUGFn
ZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JG
cmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQog
CiB2b2lkIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaWREZXRlY3RYU1MoY29uc3QgVVJMJiwgYm9v
bCkKQEAgLTEwNDksNyArMTA0OSw3IEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpZERl
dGVjdFhTUyhjb25zdCBVUkwmLCBib29sKQogCiAgICAgd2ViUGFnZS0+aW5qZWN0ZWRCdW5kbGVM
b2FkZXJDbGllbnQoKS5kaWREZXRlY3RYU1NGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2Vy
RGF0YSk7CiAKLSAgICB3ZWJQYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZERl
dGVjdFhTU0ZvckZyYW1lKG1fZnJhbWUtPmZyYW1lSUQoKSwgVXNlckRhdGEoV2ViUHJvY2Vzczo6
c2hhcmVkKCkudHJhbnNmb3JtT2JqZWN0c1RvSGFuZGxlcyh1c2VyRGF0YS5nZXQoKSkuZ2V0KCkp
KSk7CisgICAgd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWREZXRlY3RY
U1NGb3JGcmFtZShtX2ZyYW1lLT5mcmFtZUlEKCksIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkp
OwogfQogCiBSZXNvdXJjZUVycm9yIFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJv
cihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkdlb2xvY2F0aW9uQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25D
bGllbnQuY3BwCmluZGV4IGMyMjExMDM4Mzg0OGMzNmJmNjQxZjY4ZmZhOGQ1ZjdiOWEwYWNlMDUu
LmNmMTZiYzY4ZWFkMmRmNDU3MGQ3YzVjNjJmODM3NmFiMTA1OWE0MTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViR2VvbG9jYXRpb25DbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
R2VvbG9jYXRpb25DbGllbnQuY3BwCkBAIC00NCwyMyArNDQsMjMgQEAgV2ViR2VvbG9jYXRpb25D
bGllbnQ6On5XZWJHZW9sb2NhdGlvbkNsaWVudCgpCiAKIHZvaWQgV2ViR2VvbG9jYXRpb25DbGll
bnQ6Omdlb2xvY2F0aW9uRGVzdHJveWVkKCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5z
dXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9w
YWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0
aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKICAgICBkZWxldGUgdGhp
czsKIH0KIAogdm9pZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6c3RhcnRVcGRhdGluZygpCiB7Ci0g
ICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlvbk1hbmFnZXI+
KCktPnJlZ2lzdGVyV2ViUGFnZShtX3BhZ2UpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnN1cHBsZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyPigpLT5yZWdpc3RlcldlYlBhZ2UobV9w
YWdlKTsKIH0KIAogdm9pZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6c3RvcFVwZGF0aW5nKCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdl
cj4oKS0+dW5yZWdpc3RlcldlYlBhZ2UobV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5zdXBwbGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+dW5yZWdpc3RlcldlYlBh
Z2UobV9wYWdlKTsKIH0KIAogdm9pZCBXZWJHZW9sb2NhdGlvbkNsaWVudDo6c2V0RW5hYmxlSGln
aEFjY3VyYWN5KGJvb2wgZW5hYmxlZCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5zdXBw
bGVtZW50PFdlYkdlb2xvY2F0aW9uTWFuYWdlcj4oKS0+c2V0RW5hYmxlSGlnaEFjY3VyYWN5Rm9y
UGFnZShtX3BhZ2UsIGVuYWJsZWQpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyPigpLT5zZXRFbmFibGVIaWdoQWNjdXJhY3lGb3JQ
YWdlKG1fcGFnZSwgZW5hYmxlZCk7CiB9CiAKIEdlb2xvY2F0aW9uUG9zaXRpb24qIFdlYkdlb2xv
Y2F0aW9uQ2xpZW50OjpsYXN0UG9zaXRpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGllbnQuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJOb3RpZmljYXRpb25DbGll
bnQuY3BwCmluZGV4IDYyZmY4ZmJhMmI1YjUyYTQyYTYzNmY0MTg3ZDc0M2EzMTdiODdhNzAuLjZj
ZTY1ZjI2MTQ4YWJmY2MxODBkOTVjMzRmMjExN2ZhZmRlMjMyYWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViTm90aWZpY2F0aW9uQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYk5v
dGlmaWNhdGlvbkNsaWVudC5jcHAKQEAgLTQ5LDIyICs0OSwyMiBAQCBXZWJOb3RpZmljYXRpb25D
bGllbnQ6On5XZWJOb3RpZmljYXRpb25DbGllbnQoKQogCiBib29sIFdlYk5vdGlmaWNhdGlvbkNs
aWVudDo6c2hvdyhOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKIHsKLSAgICByZXR1cm4gV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5z
aG93KG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5zaG93KG5vdGlmaWNh
dGlvbiwgbV9wYWdlKTsKIH0KIAogdm9pZCBXZWJOb3RpZmljYXRpb25DbGllbnQ6OmNhbmNlbChO
b3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5z
dXBwbGVtZW50PFdlYk5vdGlmaWNhdGlvbk1hbmFnZXI+KCktPmNhbmNlbChub3RpZmljYXRpb24s
IG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxXZWJOb3Rp
ZmljYXRpb25NYW5hZ2VyPigpLT5jYW5jZWwobm90aWZpY2F0aW9uLCBtX3BhZ2UpOwogfQogCiB2
b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6Y2xlYXJOb3RpZmljYXRpb25zKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuc3VwcGxl
bWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5jbGVhck5vdGlmaWNhdGlvbnMoY29udGV4
dCwgbV9wYWdlKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFdlYk5v
dGlmaWNhdGlvbk1hbmFnZXI+KCktPmNsZWFyTm90aWZpY2F0aW9ucyhjb250ZXh0LCBtX3BhZ2Up
OwogfQogCiB2b2lkIFdlYk5vdGlmaWNhdGlvbkNsaWVudDo6bm90aWZpY2F0aW9uT2JqZWN0RGVz
dHJveWVkKE5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnN1cHBsZW1lbnQ8V2ViTm90aWZpY2F0aW9uTWFuYWdlcj4oKS0+ZGlkRGVzdHJveU5v
dGlmaWNhdGlvbihub3RpZmljYXRpb24sIG1fcGFnZSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc3VwcGxlbWVudDxXZWJOb3RpZmljYXRpb25NYW5hZ2VyPigpLT5kaWREZXN0cm95Tm90
aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgbV9wYWdlKTsKIH0KIAogdm9pZCBXZWJOb3RpZmljYXRp
b25DbGllbnQ6Om5vdGlmaWNhdGlvbkNvbnRyb2xsZXJEZXN0cm95ZWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQbGF0Zm9ybVN0cmF0
ZWdpZXMuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bGF0Zm9ybVN0cmF0ZWdpZXMuY3BwCmluZGV4IGIyNzlkZDJjNjZkMjI4YzFkYzk1ODI0ZmRjNjJm
ZWMyNmVkMzFlZmMuLmUzZjQyZGY1ZDJhNWJlZTgzNTZiYmE1MzJlNTBjYzFiMzgzZjk5MDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUGxh
dGZvcm1TdHJhdGVnaWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYlBsYXRmb3JtU3RyYXRlZ2llcy5jcHAKQEAgLTExMCw5ICsxMTAsMTAgQEAg
UGx1Z2luU3RyYXRlZ3kqIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y3JlYXRlUGx1Z2luU3RyYXRl
Z3koKQogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRPTShjb25zdCBO
ZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29u
c3QgVVJMJiB1cmwpCiB7CiAjaWYgRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKLSAgICBpZiAoV2Vi
UHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKKyAgICBhdXRvJiB3ZWJQ
cm9jZXNzID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCk7CisgICAgaWYgKHdlYlByb2Nlc3MudXNl
c05ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICAgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCkt
PnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2ll
c0ZvckRPTShTZXNzaW9uVHJhY2tlcjo6c2Vzc2lvbklEKHNlc3Npb24pLCBmaXJzdFBhcnR5LCB1
cmwpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JE
T006OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nv
bm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZXNGb3JET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25J
RChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpDb29raWVzRm9yRE9NOjpSZXBseShyZXN1bHQpLCAwKSkKICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0x
MjQsOCArMTI1LDkgQEAgU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0ZvckRP
TShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24KIHZvaWQgV2ViUGxhdGZvcm1T
dHJhdGVnaWVzOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3Npb24sIGNvbnN0IFVSTCYgZmlyc3RQYXJ0eSwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgY29va2llU3RyaW5nKQogewogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAg
aWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7Ci0gICAgICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlNldENvb2tpZXNG
cm9tRE9NKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVy
bCwgY29va2llU3RyaW5nKSwgMCk7CisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpOworICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7
CisgICAgICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U2V0Q29va2llc0Zy
b21ET00oU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJs
LCBjb29raWVTdHJpbmcpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgpAQCAt
MTM2LDkgKzEzOCwxMCBAQCB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6c2V0Q29va2llc0Zy
b21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaQogYm9vbCBXZWJQbGF0Zm9y
bVN0cmF0ZWdpZXM6OmNvb2tpZXNFbmFibGVkKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYg
c2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBhcnR5LCBjb25zdCBVUkwmIHVybCkKIHsKICNpZiBF
TkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2Vz
TmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKTsKKyAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewog
ICAgICAgICBib29sIHJlc3VsdDsKLSAgICAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5u
ZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llc0VuYWJsZWQoU2Vzc2lvblRyYWNrZXI6
OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVzRW5hYmxlZDo6UmVwbHkocmVzdWx0KSwgMCkp
CisgICAgICAgIGlmICghd2ViUHJvY2Vzcy5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29v
a2llc0VuYWJsZWQoU2Vzc2lvblRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0
eSwgdXJsKSwgTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDb29raWVz
RW5hYmxlZDo6UmVwbHkocmVzdWx0KSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAtMTUwLDkgKzE1MywxMCBAQCBib29sIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llc0VuYWJsZWQoY29uc3QgTmV0d29ya1N0b3JhZ2VT
ZXNzaW9uJiBzZXNzaW9uLAogU3RyaW5nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9u
LCBjb25zdCBVUkwmIGZpcnN0UGFydHksIGNvbnN0IFVSTCYgdXJsKQogewogI2lmIEVOQUJMRShO
RVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3Jr
UHJvY2VzcygpKSB7CisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOworICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CiAgICAgICAg
IFN0cmluZyByZXN1bHQ7Ci0gICAgICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQorICAgICAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29y
a0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKFNlc3Np
b25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29va2llUmVxdWVzdEhlYWRlckZpZWxk
VmFsdWU6OlJlcGx5KHJlc3VsdCksIDApKQogICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE2NCw4ICsxNjgsOSBAQCBTdHJpbmcg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25z
dCBOZXR3b3JrU3RvcmFnZQogYm9vbCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFJhd0Nvb2tp
ZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmIGZpcnN0
UGFydHksIGNvbnN0IFVSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKICNp
ZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51
c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBpZiAoIVdlYlByb2Nlc3M6OnNoYXJlZCgp
Lm5ldHdvcmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6Ok5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzKFNlc3Npb25UcmFja2Vy
OjpzZXNzaW9uSUQoc2Vzc2lvbiksIGZpcnN0UGFydHksIHVybCksIE1lc3NhZ2VzOjpOZXR3b3Jr
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6R2V0UmF3Q29va2llczo6UmVwbHkocmF3Q29va2llcyks
IDApKQorICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgICAgICBpZiAoIXdl
YlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkdldFJhd0Nvb2tpZXMoU2Vzc2lv
blRyYWNrZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgZmlyc3RQYXJ0eSwgdXJsKSwgTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpHZXRSYXdDb29raWVzOjpSZXBseShyYXdD
b29raWVzKSwgMCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KQEAgLTE3Nyw4ICsxODIsOSBAQCBib29sIFdlYlBsYXRmb3JtU3RyYXRlZ2ll
czo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sCiB2
b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9y
YWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSkKIHsKICNpZiBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQotICAgIGlmIChXZWJQcm9jZXNz
OjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpEZWxldGVDb29raWUoU2Vzc2lvblRyYWNr
ZXI6OnNlc3Npb25JRChzZXNzaW9uKSwgdXJsLCBjb29raWVOYW1lKSwgMCk7CisgICAgYXV0byYg
d2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOworICAgIGlmICh3ZWJQcm9jZXNz
LnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5l
Y3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6RGVsZXRlQ29va2llKFNlc3Npb25UcmFja2VyOjpzZXNzaW9uSUQoc2Vzc2lv
biksIHVybCwgY29va2llTmFtZSksIDApOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
CkBAIC0xOTMsOCArMTk5LDkgQEAgUmVzb3VyY2VMb2FkU2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigpCiB7CiAgICAgc3RhdGljIFJlc291cmNl
TG9hZFNjaGVkdWxlciogc2NoZWR1bGVyOwogICAgIGlmICghc2NoZWR1bGVyKSB7Ci0gICAgICAg
IGlmIChXZWJQcm9jZXNzOjpzaGFyZWQoKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAg
ICAgIHNjaGVkdWxlciA9ICZXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIoKTsKKyAgICAgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpOworICAgICAgICBpZiAod2ViUHJvY2Vzcy51c2VzTmV0d29ya1Byb2Nlc3MoKSkKKyAgICAg
ICAgICAgIHNjaGVkdWxlciA9ICZ3ZWJQcm9jZXNzLndlYlJlc291cmNlTG9hZFNjaGVkdWxlcigp
OwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzY2hlZHVsZXIgPSBXZWJDb3JlOjpyZXNvdXJj
ZUxvYWRTY2hlZHVsZXIoKTsKICAgICB9CkBAIC0yMDQsNyArMjExLDggQEAgUmVzb3VyY2VMb2Fk
U2NoZWR1bGVyKiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlc291cmNlTG9hZFNjaGVkdWxlcigp
CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5
KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0LCB1bnNpZ25lZCBsb25nIHJlc291cmNlTG9hZElk
ZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgU3RvcmVkQ3JlZGVudGlh
bHMgc3RvcmVkQ3JlZGVudGlhbHMsIENsaWVudENyZWRlbnRpYWxQb2xpY3kgY2xpZW50Q3JlZGVu
dGlhbFBvbGljeSwgUmVzb3VyY2VFcnJvciYgZXJyb3IsIFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlLCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQo
KS51c2VzTmV0d29ya1Byb2Nlc3MoKSkgeworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIXdlYlByb2Nlc3MudXNlc05ldHdvcmtQcm9jZXNz
KCkpIHsKICAgICAgICAgTG9hZGVyU3RyYXRlZ3k6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHko
Y29udGV4dCwgcmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcmVxdWVzdCwgc3RvcmVkQ3JlZGVudGlh
bHMsIGNsaWVudENyZWRlbnRpYWxQb2xpY3ksIGVycm9yLCByZXNwb25zZSwgZGF0YSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0yMzAsNyArMjM4LDcgQEAgdm9pZCBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoTmV0d29ya2luZ0NvbnRleHQqIGNv
bnRleHQKIAogICAgIGRhdGEucmVzaXplKDApOwogCi0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrQ29ubmVjdGlvbigpLT5jb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZChs
b2FkUGFyYW1ldGVycyksIE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6UmVwbHkoZXJyb3IsIHJlc3BvbnNlLCBkYXRhKSwgMCkp
IHsKKyAgICBpZiAoIXdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kU3luYyhNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZv
cm1TeW5jaHJvbm91c0xvYWQobG9hZFBhcmFtZXRlcnMpLCBNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlBlcmZvcm1TeW5jaHJvbm91c0xvYWQ6OlJlcGx5KGVycm9yLCBy
ZXNwb25zZSwgZGF0YSksIDApKSB7CiAgICAgICAgIHJlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25z
ZSgpOwogICAgICAgICBlcnJvciA9IGludGVybmFsRXJyb3IocmVxdWVzdC51cmwoKSk7CiAgICAg
fQpAQCAtMjM4LDcgKzI0Niw3IEBAIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KE5ldHdvcmtpbmdDb250ZXh0KiBjb250ZXh0CiAKIEJsb2JSZWdp
c3RyeSogV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjcmVhdGVCbG9iUmVnaXN0cnkoKQogewotICAg
IGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkudXNlc05ldHdvcmtQcm9jZXNzKCkpCisgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS51c2VzTmV0d29ya1Byb2Nlc3MoKSkKICAgICAgICAg
cmV0dXJuIExvYWRlclN0cmF0ZWd5OjpjcmVhdGVCbG9iUmVnaXN0cnkoKTsKICAgICByZXR1cm4g
bmV3IEJsb2JSZWdpc3RyeVByb3h5OyAgICAKIH0KQEAgLTI4MSw3ICsyODksNyBAQCB2b2lkIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6cG9wdWxhdGVQbHVnaW5DYWNoZSgpCiAgICAgQVNTRVJUKG1f
Y2FjaGVkUGx1Z2lucy5pc0VtcHR5KCkpOwogICAgIAogICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
ZG8gc29tZXRoaW5nIGluIGNhc2Ugb2YgZXJyb3IgaGVyZT8KLSAgICBpZiAoIVdlYlByb2Nlc3M6
OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpbnMobV9zaG91bGRSZWZyZXNoUGx1Z2lucyksIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpbnM6OlJlcGx5KG1fY2FjaGVkUGx1Z2lucywg
bV9jYWNoZWRBcHBsaWNhdGlvblBsdWdpbnMpLCAwKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpbnMobV9zaG91bGRSZWZyZXNoUGx1Z2lucyksIE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzUHJveHk6OkdldFBsdWdpbnM6OlJlcGx5KG1fY2FjaGVkUGx1Z2lucywg
bV9jYWNoZWRBcHBsaWNhdGlvblBsdWdpbnMpLCAwKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bV9zaG91bGRSZWZyZXNoUGx1Z2lucyA9IGZhbHNlOwpAQCAtMzAxLDcgKzMwOSw3IEBAIHZvaWQg
V2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpnZXRUeXBlcyhWZWN0b3I8U3RyaW5nPiYgdHlwZXMsIGNv
bnN0IFN0cmluZyYgcGFzdGViCiAgICAgaWYgKCF0eXBlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRU
eXBlcyhwYXN0ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRUeXBlczo6UmVwbHkodHlwZXMpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVHlwZXM6OlJlcGx5KHR5cGVzKSwg
MCk7CiB9CiAKIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBXZWJQbGF0Zm9ybVN0
cmF0ZWdpZXM6OmJ1ZmZlckZvclR5cGUoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKQEAgLTMxNCw3ICszMjIsNyBAQCBQYXNzUmVmUHRy
PFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpidWZmZXJGb3JU
eXBlKGNvbnN0IFN0cgogICAgIC8vIEZhbGxiYWNrIHRvIG1lc3NhZ2luZyB0aGUgVUkgcHJvY2Vz
cyBmb3IgbmF0aXZlIHBhc3RlYm9hcmQgY29udGVudC4KICAgICBTaGFyZWRNZW1vcnk6OkhhbmRs
ZSBoYW5kbGU7CiAgICAgdWludDY0X3Qgc2l6ZSA9IDA7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVk
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2Fy
ZEJ1ZmZlckZvclR5cGU6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6Okdl
dFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBseShoYW5kbGUsIHNpemUpLCAwKTsKICAgICBp
ZiAoaGFuZGxlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBSZWZQdHI8U2hhcmVk
TWVtb3J5PiBzaGFyZWRNZW1vcnlCdWZmZXIgPSBTaGFyZWRNZW1vcnk6OmNyZWF0ZShoYW5kbGUs
IFNoYXJlZE1lbW9yeTo6UmVhZE9ubHkpOwpAQCAtMzIzLDYyICszMzEsNjIgQEAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YnVmZmVyRm9y
VHlwZShjb25zdCBTdHIKIAogdm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhdGhuYW1l
c0ZvclR5cGUoVmVjdG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZShwYXN0ZWJv
YXJkTmFtZSwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpH
ZXRQYXN0ZWJvYXJkUGF0aG5hbWVzRm9yVHlwZTo6UmVwbHkocGF0aG5hbWVzKSwgMCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5
bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0Zv
clR5cGUocGFzdGVib2FyZE5hbWUsIHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KHBhdGhuYW1l
cyksIDApOwogfQogCiBTdHJpbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzdHJpbmdGb3JUeXBl
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZFR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCiB7CiAgICAgU3RyaW5nIHZhbHVlOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVu
dFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OkdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJvYXJk
VHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRTdHJpbmdG
b3JUeXBlOjpSZXBseSh2YWx1ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJk
UHJveHk6OkdldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBwYXN0ZWJv
YXJkVHlwZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRTdHJp
bmdGb3JUeXBlOjpSZXBseSh2YWx1ZSksIDApOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAogbG9u
ZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmNvcHkoY29uc3QgU3RyaW5nJiBmcm9tUGFzdGVib2Fy
ZCwgY29uc3QgU3RyaW5nJiB0b1Bhc3RlYm9hcmQpCiB7CiAgICAgdWludDY0X3QgbmV3Q2hhbmdl
Q291bnQ7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UGFzdGVib2FyZENvcHko
ZnJvbVBhc3RlYm9hcmQsIHRvUGFzdGVib2FyZCksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJv
eHk6OlBhc3RlYm9hcmRDb3B5OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlBhc3RlYm9hcmRDb3B5KGZyb21QYXN0ZWJvYXJk
LCB0b1Bhc3RlYm9hcmQpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpQYXN0ZWJvYXJk
Q29weTo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdlQ291
bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpjaGFuZ2VDb3VudChjb25zdCBX
VEY6OlN0cmluZyAmcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgdWludDY0X3QgY2hhbmdlQ291bnQ7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENoYW5nZUNv
dW50KHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFz
dGVib2FyZENoYW5nZUNvdW50OjpSZXBseShjaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFuZ2VDb3VudChwYXN0ZWJv
YXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRDaGFu
Z2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gY2hhbmdlQ291bnQ7
CiB9CiAKIFN0cmluZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnVuaXF1ZU5hbWUoKQogewogICAg
IFN0cmluZyBwYXN0ZWJvYXJkTmFtZTsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZSgpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFtZTo6UmVwbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFt
ZSgpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkVW5pcXVlTmFt
ZTo6UmVwbHkocGFzdGVib2FyZE5hbWUpLCAwKTsKICAgICByZXR1cm4gcGFzdGVib2FyZE5hbWU7
CiB9CiAKIENvbG9yIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6Y29sb3IoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYXJkTmFtZSkKIHsKICAgICBDb2xvciBjb2xvcjsKLSAgICBXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFz
dGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3IocGFzdGVib2FyZE5hbWUpLCBNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ29sb3I6OlJlcGx5KGNvbG9yKSwg
MCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZENv
bG9yKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFz
dGVib2FyZENvbG9yOjpSZXBseShjb2xvciksIDApOwogICAgIHJldHVybiBjb2xvcjsKIH0KIAog
VVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6dXJsKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCiB7CiAgICAgU3RyaW5nIHVybFN0cmluZzsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2Fy
ZFByb3h5OjpHZXRQYXN0ZWJvYXJkVVJMKHBhc3RlYm9hcmROYW1lKSwgTWVzc2FnZXM6OldlYlBh
c3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTDo6UmVwbHkodXJsU3RyaW5nKSwgMCk7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZFVSTChwYXN0
ZWJvYXJkTmFtZSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRV
Ukw6OlJlcGx5KHVybFN0cmluZyksIDApOwogICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmxTdHJpbmcpOwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6YWRkVHlwZXMo
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhc3RlYm9hcmRUeXBlcywgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdl
czo6V2ViUGFzdGVib2FyZFByb3h5OjpBZGRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUs
IHBhc3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkFkZFBhc3Rl
Ym9hcmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpBZGRQYXN0ZWJvYXJkVHlwZXMocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlcyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkFkZFBhc3RlYm9h
cmRUeXBlczo6UmVwbHkobmV3Q2hhbmdlQ291bnQpLCAwKTsKICAgICByZXR1cm4gbmV3Q2hhbmdl
Q291bnQ7CiB9CiAKIGxvbmcgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpzZXRUeXBlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFzdGVib2FyZFR5cGVzLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQogewogICAgIHVpbnQ2NF90IG5ld0NoYW5nZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVi
b2FyZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5
cGVzOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRUeXBlcyhwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2Fy
ZFR5cGVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZFR5cGVz
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsK
IH0KIApAQCAtMzk1LDQ0ICs0MDMsNDQgQEAgbG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNl
dEJ1ZmZlckZvclR5cGUoUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlciwgY28KICAgICAg
ICAgfQogICAgIH0KICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNz
OjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6
V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkQnVmZmVyRm9yVHlwZShwYXN0ZWJvYXJk
TmFtZSwgcGFzdGVib2FyZFR5cGUsIGhhbmRsZSwgYnVmZmVyID8gYnVmZmVyLT5zaXplKCkgOiAw
KSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5
cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6U2V0UGFzdGVib2FyZEJ1ZmZlckZvclR5cGUocGFzdGVib2FyZE5hbWUsIHBh
c3RlYm9hcmRUeXBlLCBoYW5kbGUsIGJ1ZmZlciA/IGJ1ZmZlci0+c2l6ZSgpIDogMCksIE1lc3Nh
Z2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRCdWZmZXJGb3JUeXBlOjpSZXBs
eShuZXdDaGFuZ2VDb3VudCksIDApOwogICAgIHJldHVybiBuZXdDaGFuZ2VDb3VudDsKIH0KIAog
bG9uZyBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnNldFBhdGhuYW1lc0ZvclR5cGUoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhuYW1lcywgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1aW50NjRfdCBuZXdDaGFuZ2VDb3Vu
dDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpTZXRQYXN0ZWJvYXJkUGF0aG5h
bWVzRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5cGUsIHBhdGhuYW1lcyksIE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBl
OjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OlNldFBhc3RlYm9hcmRQYXRobmFtZXNGb3JUeXBlKHBhc3RlYm9hcmROYW1lLCBw
YXN0ZWJvYXJkVHlwZSwgcGF0aG5hbWVzKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6
U2V0UGFzdGVib2FyZFBhdGhuYW1lc0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwgMCk7
CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiBsb25nIFdlYlBsYXRmb3JtU3RyYXRl
Z2llczo6c2V0U3RyaW5nRm9yVHlwZShjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICB1
aW50NjRfdCBuZXdDaGFuZ2VDb3VudDsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5
OjpTZXRQYXN0ZWJvYXJkU3RyaW5nRm9yVHlwZShwYXN0ZWJvYXJkTmFtZSwgcGFzdGVib2FyZFR5
cGUsIHN0cmluZyksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRT
dHJpbmdGb3JUeXBlOjpSZXBseShuZXdDaGFuZ2VDb3VudCksIDApOworICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYXN0ZWJvYXJkUHJveHk6OlNldFBhc3RlYm9hcmRTdHJpbmdGb3JUeXBlKHBhc3RlYm9h
cmROYW1lLCBwYXN0ZWJvYXJkVHlwZSwgc3RyaW5nKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQ
cm94eTo6U2V0UGFzdGVib2FyZFN0cmluZ0ZvclR5cGU6OlJlcGx5KG5ld0NoYW5nZUNvdW50KSwg
MCk7CiAgICAgcmV0dXJuIG5ld0NoYW5nZUNvdW50OwogfQogCiAjaWYgUExBVEZPUk0oSU9TKQog
dm9pZCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OndyaXRlVG9QYXN0ZWJvYXJkKGNvbnN0IFdlYkNv
cmU6OlBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3Rl
Ym9hcmRQcm94eTo6V3JpdGVXZWJDb250ZW50VG9QYXN0ZWJvYXJkKGNvbnRlbnQpLCAwKTsKKyAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OldyaXRlV2ViQ29udGVudFRvUGFzdGVib2Fy
ZChjb250ZW50KSwgMCk7CiB9CiAKIHZvaWQgV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjp3cml0ZVRv
UGFzdGVib2FyZChjb25zdCBXZWJDb3JlOjpQYXN0ZWJvYXJkSW1hZ2UmIGltYWdlKQogewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVJbWFnZVRvUGFzdGVib2FyZChpbWFnZSks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVJbWFnZVRvUGFzdGVi
b2FyZChpbWFnZSksIDApOwogfQogCiB2b2lkIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6d3JpdGVU
b1Bhc3RlYm9hcmQoY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6V3JpdGVTdHJpbmdUb1Bhc3Rl
Ym9hcmQocGFzdGVib2FyZFR5cGUsIHRleHQpLCAwKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYXN0ZWJv
YXJkUHJveHk6OldyaXRlU3RyaW5nVG9QYXN0ZWJvYXJkKHBhc3RlYm9hcmRUeXBlLCB0ZXh0KSwg
MCk7CiB9CiAKIGludCBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OmdldFBhc3RlYm9hcmRJdGVtc0Nv
dW50KCkKIHsKICAgICB1aW50NjRfdCBpdGVtc0NvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50KCksIE1lc3NhZ2VzOjpXZWJQYXN0
ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRJdGVtc0NvdW50OjpSZXBseShpdGVtc0NvdW50KSwg
MCk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24o
KS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEl0
ZW1zQ291bnQoKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6R2V0UGFzdGVib2FyZEl0
ZW1zQ291bnQ6OlJlcGx5KGl0ZW1zQ291bnQpLCAwKTsKICAgICByZXR1cm4gaXRlbXNDb3VudDsK
IH0KIApAQCAtNDQwLDcgKzQ0OCw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBXZWJQbGF0Zm9ybVN0cmF0ZWdpZXM6OnJlYWRCdWZmZXJGcm9tUGFzdGVib2FyCiB7CiAgICAg
U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlOwogICAgIHVpbnQ2NF90IHNpemUgPSAwOwotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChp
bmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFk
QnVmZmVyRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRCdWZmZXJGcm9tUGFzdGVib2FyZChpbmRl
eCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkQnVm
ZmVyRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KGhhbmRsZSwgc2l6ZSksIDApOwogICAgIGlmIChoYW5k
bGUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+
IHNoYXJlZE1lbW9yeUJ1ZmZlciA9IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGhhbmRsZSwgU2hhcmVk
TWVtb3J5OjpSZWFkT25seSk7CkBAIC00NTAsMjEgKzQ1OCwyMSBAQCBQYXNzUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gV2ViUGxhdGZvcm1TdHJhdGVnaWVzOjpyZWFkQnVmZmVyRnJvbVBh
c3RlYm9hcgogV2ViQ29yZTo6VVJMIFdlYlBsYXRmb3JtU3RyYXRlZ2llczo6cmVhZFVSTEZyb21Q
YXN0ZWJvYXJkKGludCBpbmRleCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkVHlwZSkKIHsKICAg
ICBTdHJpbmcgdXJsU3RyaW5nOwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nl
c3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJl
YWRVUkxGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2Vi
UGFzdGVib2FyZFByb3h5OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyks
IDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OlJlYWRVUkxGcm9tUGFz
dGVib2FyZChpbmRleCwgcGFzdGVib2FyZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFBy
b3h5OjpSZWFkVVJMRnJvbVBhc3RlYm9hcmQ6OlJlcGx5KHVybFN0cmluZyksIDApOwogICAgIHJl
dHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmxTdHJpbmcpOwogfQogCiBTdHJpbmcgV2ViUGxh
dGZvcm1TdHJhdGVnaWVzOjpyZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW50IGluZGV4LCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmRUeXBlKQogewogICAgIFN0cmluZyB2YWx1ZTsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoaW5kZXgs
IHBhc3RlYm9hcmRUeXBlKSwgTWVzc2FnZXM6OldlYlBhc3RlYm9hcmRQcm94eTo6UmVhZFN0cmlu
Z0Zyb21QYXN0ZWJvYXJkOjpSZXBseSh2YWx1ZSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQ
YXN0ZWJvYXJkUHJveHk6OlJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZChpbmRleCwgcGFzdGVib2Fy
ZFR5cGUpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpSZWFkU3RyaW5nRnJvbVBhc3Rl
Ym9hcmQ6OlJlcGx5KHZhbHVlKSwgMCk7CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCiBsb25nIFdl
YlBsYXRmb3JtU3RyYXRlZ2llczo6Y2hhbmdlQ291bnQoKQogewogICAgIHVpbnQ2NF90IGNoYW5n
ZUNvdW50OwotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBhc3RlYm9hcmRD
aGFuZ2VDb3VudChTdHJpbmcoKSksIE1lc3NhZ2VzOjpXZWJQYXN0ZWJvYXJkUHJveHk6OkdldFBh
c3RlYm9hcmRDaGFuZ2VDb3VudDo6UmVwbHkoY2hhbmdlQ291bnQpLCAwKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNz
YWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291bnQoU3RyaW5n
KCkpLCBNZXNzYWdlczo6V2ViUGFzdGVib2FyZFByb3h5OjpHZXRQYXN0ZWJvYXJkQ2hhbmdlQ291
bnQ6OlJlcGx5KGNoYW5nZUNvdW50KSwgMCk7CiAgICAgcmV0dXJuIGNoYW5nZUNvdW50OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YlBsdWdJbkNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYlBsdWdJbkNsaWVudC5jcHAKaW5kZXggNjE0MWVlZmMyMWUwNDg5MThkYTBjYWFmODY3
M2U1MGJkMmNhMDdmOC4uMGZmNWZjMmM3NTBiZTQwNWMzNWJhNzVmOWRiY2I1ODMxMjNmNTNlYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQ
bHVnSW5DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViUGx1Z0luQ2xpZW50LmNwcApAQCAtNTAsMTIgKzUwLDEyIEBAIHZvaWQgV2ViUGx1
Z0luQ2xpZW50OjpwYWdlRGVzdHJveWVkKCkKIAogYm9vbCBXZWJQbHVnSW5DbGllbnQ6OnNob3Vs
ZEF1dG9TdGFydEZyb21PcmlnaW4oY29uc3QgU3RyaW5nJiBwYWdlT3JpZ2luLCBjb25zdCBTdHJp
bmcmIHBsdWdpbk9yaWdpbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4g
V2ViUHJvY2Vzczo6c2hhcmVkKCkuc2hvdWxkUGx1Z0luQXV0b1N0YXJ0RnJvbU9yaWdpbihtX3dl
YlBhZ2UsIHBhZ2VPcmlnaW4sIHBsdWdpbk9yaWdpbiwgbWltZVR5cGUpOworICAgIHJldHVybiBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zaG91bGRQbHVnSW5BdXRvU3RhcnRGcm9tT3JpZ2luKG1f
d2ViUGFnZSwgcGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSk7CiB9CiAKIHZvaWQg
V2ViUGx1Z0luQ2xpZW50OjpkaWRTdGFydEZyb21PcmlnaW4oY29uc3QgU3RyaW5nJiBwYWdlT3Jp
Z2luLCBjb25zdCBTdHJpbmcmIHBsdWdpbk9yaWdpbiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
V2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQo
KS5wbHVnSW5EaWRTdGFydEZyb21PcmlnaW4ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1l
VHlwZSwgc2Vzc2lvbklEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wbHVnSW5EaWRT
dGFydEZyb21PcmlnaW4ocGFnZU9yaWdpbiwgcGx1Z2luT3JpZ2luLCBtaW1lVHlwZSwgc2Vzc2lv
bklEKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlBvcHVwTWVudS5jcHAKaW5kZXgg
YjYyZDhkMjQ5ZjEyMDkzMDJmZTQwNWZhMTdlYmY0YzRiZmEzN2RiOC4uYzhlZjliZDFiMDBkZTA4
NjBlMmUxNmUwMzlmOWUwNDZlMjVjYjIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJQb3B1cE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViUG9wdXBNZW51LmNwcApAQCAtMTEyLDcg
KzExMiw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpzaG93KGNvbnN0IEludFJlY3QmIHJlY3QsIEZy
YW1lVmlldyogdmlldywgaW50IGluZGV4KQogICAgIFBsYXRmb3JtUG9wdXBNZW51RGF0YSBwbGF0
Zm9ybURhdGE7CiAgICAgc2V0VXBQbGF0Zm9ybURhdGEocGFnZUNvb3JkaW5hdGVzLCBwbGF0Zm9y
bURhdGEpOwogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UG9wdXBNZW51KHBhZ2VDb29y
ZGluYXRlcywgbV9wb3B1cENsaWVudC0+bWVudVN0eWxlKCkudGV4dERpcmVjdGlvbigpLCBpdGVt
cywgaW5kZXgsIHBsYXRmb3JtRGF0YSksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6U2hvd1BvcHVwTWVudShwYWdlQ29vcmRpbmF0ZXMsIG1fcG9wdXBDbGll
bnQtPm1lbnVTdHlsZSgpLnRleHREaXJlY3Rpb24oKSwgaXRlbXMsIGluZGV4LCBwbGF0Zm9ybURh
dGEpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJQb3B1cE1lbnU6OmhpZGUoKQpA
QCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQgV2ViUG9wdXBNZW51OjpoaWRlKCkKICAgICBpZiAoIW1f
cGFnZSB8fCAhbV9wb3B1cENsaWVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpIaWRlUG9wdXBNZW51KCksIG1fcGFnZS0+cGFnZUlEKCkpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6SGlkZVBvcHVwTWVudSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKICAg
ICBtX3BhZ2UtPnNldEFjdGl2ZVBvcHVwTWVudSgwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1cE1lbnUuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJTZWFyY2hQb3B1
cE1lbnUuY3BwCmluZGV4IDFmOGY4YjMwNDhmZWRkOTFkZDdkOWUyZGRjOTJlMzNjZmRhNmQyNjAu
LjAyNTg0NmVjMTdmYjZhYzJkNDBhNDlmY2JkNTQ2MGE0OTRkMmU5MmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViU2VhcmNoUG9wdXBNZW51
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlNl
YXJjaFBvcHVwTWVudS5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBXZWJTZWFyY2hQb3B1cE1l
bnU6OnNhdmVSZWNlbnRTZWFyY2hlcyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGNvbnN0IFZl
Y3QKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUsIHNlYXJjaEl0ZW1zKSwgcGFnZS0+cGFnZUlE
KCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9u
KCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2F2ZVJlY2VudFNlYXJjaGVzKG5hbWUs
IHNlYXJjaEl0ZW1zKSwgcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lkIFdlYlNlYXJjaFBvcHVw
TWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVjdG9y
PFN0cmluZz4mIHJlc3VsdEl0ZW1zKQpAQCAtNjgsNyArNjgsNyBAQCB2b2lkIFdlYlNlYXJjaFBv
cHVwTWVudTo6bG9hZFJlY2VudFNlYXJjaGVzKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgVmVj
dG9yPFN0cgogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6
OldlYlBhZ2VQcm94eTo6TG9hZFJlY2VudFNlYXJjaGVzKG5hbWUpLCBNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpMb2FkUmVjZW50U2VhcmNoZXM6OlJlcGx5KHJlc3VsdEl0ZW1zKSwgcGFnZS0+cGFn
ZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkxvYWRSZWNlbnRTZWFyY2hl
cyhuYW1lKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6TG9hZFJlY2VudFNlYXJjaGVzOjpSZXBs
eShyZXN1bHRJdGVtcyksIHBhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogYm9vbCBXZWJTZWFyY2hQb3B1
cE1lbnU6OmVuYWJsZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJWaWJyYXRpb25DbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJWaWJyYXRpb25DbGllbnQuY3BwCmluZGV4IGU0MWRl
ZDI4NTgwNTA0NjU1Mzc3ZjA0YjFkZjc1ODQ1MDNiNWY2OTkuLmVlYWM2ZWNlZDJkY2Y1NjlmMmQx
YmYxYmNhOTBhYzIzYjhlZjViMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlicmF0aW9uQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYlZpYnJhdGlvbkNsaWVudC5jcHAKQEAg
LTM4LDEyICszOCwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogdm9pZCBXZWJWaWJyYXRpb25D
bGllbnQ6OnZpYnJhdGUoY29uc3QgdW5zaWduZWQmIHZpYnJhdGlvblRpbWUpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViVmlicmF0aW9uUHJveHk6OlZpYnJhdGUodmlicmF0aW9uVGltZSksIG1fcGFnZS0+cGFn
ZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlZpYnJhdGlvblByb3h5OjpWaWJyYXRlKHZpYnJhdGlv
blRpbWUpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJWaWJyYXRpb25DbGllbnQ6
OmNhbmNlbFZpYnJhdGlvbigpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViVmlicmF0aW9uUHJveHk6OkNhbmNl
bFZpYnJhdGlvbigpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJWaWJyYXRp
b25Qcm94eTo6Q2FuY2VsVmlicmF0aW9uKCksIG1fcGFnZS0+cGFnZUlEKCkpOwogfQogCiB2b2lk
IFdlYlZpYnJhdGlvbkNsaWVudDo6dmlicmF0aW9uRGVzdHJveWVkKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVu
dEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9X
ZWJFZGl0b3JDbGllbnRHdGsuY3BwCmluZGV4IGJjYTgzZTk5YzE2ZDE0OWQzOWJjMjhkY2EyNzUx
YjU5NjNlNWI1M2QuLjc2OWQ3OGM2ZDQyMzVhMTJjNTU1OGUxZTAzNDlhZWE4OWQ1MjFjOTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dl
YkVkaXRvckNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtNDQsNyArNDQsNyBAQCB2
b2lkIFdlYkVkaXRvckNsaWVudDo6Z2V0RWRpdG9yQ29tbWFuZHNGb3JLZXlFdmVudChjb25zdCBL
ZXlib2FyZEV2ZW50KiBldmVudCwgVgogCiAgICAgLyogRmlyc3QgdHJ5IHRvIGludGVycHJldCB0
aGUgY29tbWFuZCBpbiB0aGUgVUkgYW5kIGdldCB0aGUgY29tbWFuZHMuCiAgICAgICAgVUkgbmVl
ZHMgdG8gcmVjZWl2ZSBldmVudCB0eXBlIGJlY2F1c2Ugb25seSBrbm93cyBjdXJyZW50IE5hdGl2
ZVdlYktleWJvYXJkRXZlbnQuKi8KLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9j
ZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpHZXRFZGl0
b3JDb21tYW5kc0ZvcktleUV2ZW50KGV2ZW50LT50eXBlKCkpLAorICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoZXZlbnQtPnR5cGUoKSks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdl
czo6V2ViUGFnZVByb3h5OjpHZXRFZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50OjpSZXBseShwZW5k
aW5nRWRpdG9yQ29tbWFuZHMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9wYWdlLT5wYWdlSUQoKSwgc3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6
bWF4KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9pb3MvV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYlF1aWNrTG9va0hhbmRsZUNsaWVudC5j
cHAKaW5kZXggYzNhNzI3NDViMzhkMTdjYzY1NDEwOTdiMDUxYjVkMDFlNmFlODM2Yy4uMTdiOTg5
ZjJhMzliYTExMjEyYTg2OTNlOWRjNTg1OTc5M2E3NzUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViUXVpY2tMb29rSGFuZGxlQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lv
cy9XZWJRdWlja0xvb2tIYW5kbGVDbGllbnQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIFdlYlF1aWNr
TG9va0hhbmRsZUNsaWVudDo6V2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50KGNvbnN0IFdlYkNvcmU6
OlF1aWNrTG9va0hhbmRsCiAgICAgLCBtX3V0aShoYW5kbGUucHJldmlld1VUSSgpKQogICAgICwg
bV9wYWdlSUQocGFnZUlEKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkU3RhcnRMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5G
cmFtZShtX2ZpbGVOYW1lLCBtX3V0aSksIG1fcGFnZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFN0YXJ0TG9hZEZvclF1aWNr
TG9va0RvY3VtZW50SW5NYWluRnJhbWUobV9maWxlTmFtZSwgbV91dGkpLCBtX3BhZ2VJRCk7CiB9
CiAKIHZvaWQgV2ViUXVpY2tMb29rSGFuZGxlQ2xpZW50OjpkaWRSZWNlaXZlRGF0YUFycmF5KENG
QXJyYXlSZWYgZGF0YUFycmF5KQpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIFdlYlF1aWNrTG9va0hh
bmRsZUNsaWVudDo6ZGlkUmVjZWl2ZURhdGFBcnJheShDRkFycmF5UmVmIGRhdGFBcnJheSkKIAog
dm9pZCBXZWJRdWlja0xvb2tIYW5kbGVDbGllbnQ6OmRpZEZpbmlzaExvYWRpbmcoKQogewotICAg
IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkRmlu
aXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUobV9kYXRhKSwgbV9wYWdlSUQp
OworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRnJhbWUobV9kYXRhKSwg
bV9wYWdlSUQpOwogICAgIG1fZGF0YS5jbGVhcigpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0b3JDbGllbnRNYWMu
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJFZGl0
b3JDbGllbnRNYWMubW0KaW5kZXggNDlkNTliZTNiYzM1NDg5ZmU5MjNlMDZhYzZmYTQ5ZTk4ZmRh
MDQ1Yi4uYzA2OWUwODVkNGQ2Mjk3MGI0NWYwZWY0YmU2NmZkMWQ2NDA1ODJhMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9tYWMvV2ViRWRpdG9y
Q2xpZW50TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvbWFjL1dlYkVkaXRvckNsaWVudE1hYy5tbQpAQCAtMTg1LDcgKzE4NSw3IEBAIHZvaWQgV2Vi
RWRpdG9yQ2xpZW50Ojp0b2dnbGVTbWFydEluc2VydERlbGV0ZSgpCiAKIGJvb2wgV2ViRWRpdG9y
Q2xpZW50Ojppc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCiB7Ci0gICAgcmV0
dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1F1
b3RlU3Vic3RpdHV0aW9uRW5hYmxlZDsKKyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
OwogfQogCiB2b2lkIFdlYkVkaXRvckNsaWVudDo6dG9nZ2xlQXV0b21hdGljUXVvdGVTdWJzdGl0
dXRpb24oKQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVB
dXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbigpCiAKIGJvb2wgV2ViRWRpdG9yQ2xpZW50Ojppc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6
c2hhcmVkKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRDaGVja2VyU3RhdGUo
KS5pc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkOwogfQogCiB2b2lkIFdlYkVkaXRvckNs
aWVudDo6dG9nZ2xlQXV0b21hdGljTGlua0RldGVjdGlvbigpCkBAIC0yMDcsNyArMjA3LDcgQEAg
dm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY0xpbmtEZXRlY3Rpb24oKQogCiBi
b29sIFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgp
CiB7Ci0gICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5p
c0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkOworICAgIHJldHVybiBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS50ZXh0Q2hlY2tlclN0YXRlKCkuaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0
aW9uRW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JDbGllbnQ6OnRvZ2dsZUF1dG9tYXRpY0Rh
c2hTdWJzdGl0dXRpb24oKQpAQCAtMjE4LDcgKzIxOCw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50
Ojp0b2dnbGVBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uKCkKIAogYm9vbCBXZWJFZGl0b3JDbGll
bnQ6OmlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpCiB7Ci0gICAgcmV0dXJuIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnRleHRDaGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1RleHRSZXBs
YWNlbWVudEVuYWJsZWQ7CisgICAgcmV0dXJuIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRleHRD
aGVja2VyU3RhdGUoKS5pc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQ7CiB9CiAKIHZv
aWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnQoKQpAQCAt
MjI5LDcgKzIyOSw3IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50Ojp0b2dnbGVBdXRvbWF0aWNUZXh0
UmVwbGFjZW1lbnQoKQogCiBib29sIFdlYkVkaXRvckNsaWVudDo6aXNBdXRvbWF0aWNTcGVsbGlu
Z0NvcnJlY3Rpb25FbmFibGVkKCkKIHsKLSAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2hhcmVkKCku
dGV4dENoZWNrZXJTdGF0ZSgpLmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsK
KyAgICByZXR1cm4gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkudGV4dENoZWNrZXJTdGF0ZSgpLmlz
QXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZDsKIH0KIAogdm9pZCBXZWJFZGl0b3JD
bGllbnQ6OnRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L21hYy9XZWJGcmFtZU5ldHdv
cmtpbmdDb250ZXh0Lm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9tYWMvV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dC5tbQppbmRleCBiMDI3Mjk0YjZjYzlmNGUx
ZTU4OWZmMDA0NDg3MTk1NDJjZDBmNzIyLi43ZmU0OWY1NTJiMTFkYjUzN2YzMmI1NjNjYjM0YTU1
ZTU5MmZhN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L21hYy9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvbWFjL1dlYkZyYW1lTmV0d29ya2luZ0NvbnRl
eHQubW0KQEAgLTg4LDcgKzg4LDcgQEAgUmV0YWluUHRyPENGRGF0YVJlZj4gV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dDo6c291cmNlQXBwbGljYXRpb25BdWRpdERhdGEoKSBjb24KIHsKICNpZiBQ
TEFURk9STShJT1MpCiAgICAgYXVkaXRfdG9rZW5fdCBhdWRpdFRva2VuOwotICAgIGlmICghV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tl
bihhdWRpdFRva2VuKSkKKyAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPmdldEF1ZGl0VG9rZW4oYXVkaXRUb2tlbikpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiBhZG9wdENGKENGRGF0YUNyZWF0ZSgwLCAoY29uc3Qg
VUludDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVkaXRUb2tlbikpKTsKICNlbHNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAppbmRleCBl
NmNlZDllMjM1MjFlY2I5OGQyN2FjZmYzMDJiN2Q2NzkyNjRmZDVlLi4xMmEzNjQ0NzQyODQxMzQ4
OWRlMmRkYTRmMWJiOThjZTc3OTUyNDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKQEAgLTgxLDEyICs4MSwxMiBAQCBEcmF3aW5n
QXJlYTo6RHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBlIHR5cGUsIFdlYlBhZ2UmIHdlYlBhZ2Up
CiAgICAgLCBtX25hdGl2ZVN1cmZhY2VIYW5kbGVGb3JDb21wb3NpdGluZygwKQogI2VuZGlmCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OkRyYXdpbmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdl
SUQoKSwgKnRoaXMpOwogfQogCiBEcmF3aW5nQXJlYTo6fkRyYXdpbmdBcmVhKCkKIHsKLSAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkRyYXdp
bmdBcmVhOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2ViUGFnZS5wYWdlSUQoKSk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpE
cmF3aW5nQXJlYTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOwog
fQogCiB2b2lkIERyYXdpbmdBcmVhOjpkaXNwYXRjaEFmdGVyRW5zdXJpbmdVcGRhdGVkU2Nyb2xs
UG9zaXRpb24oc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBmdW5jdGlvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKaW5kZXgg
Yjc5MmExMTQwM2Q2ODlmYWViNjQ2MGNhMjUzYWVmNDk3ZmExOTJjNy4uNzFjMzNmNDgyZWJlMWY2
NWY2YTY1ZmFmYTBhMDUwMDVhNzdhNzFjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5jcHAKQEAgLTIwNSw3ICsyMDUsNyBA
QCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hUb3VjaEV2ZW50cygpCiAgICAgfQogCiAg
ICAgZm9yIChhdXRvJiBzbG90IDogbG9jYWxDb3B5KSB7Ci0gICAgICAgIGlmIChXZWJQYWdlKiB3
ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShzbG90LmtleSkpCisgICAgICAg
IGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViUGFnZShz
bG90LmtleSkpCiAgICAgICAgICAgICB3ZWJQYWdlLT5kaXNwYXRjaEFzeW5jaHJvbm91c1RvdWNo
RXZlbnRzKHNsb3QudmFsdWUpOwogICAgIH0KIH0KQEAgLTIxNSw3ICsyMTUsNyBAQCB2b2lkIEV2
ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3Qg
V2ViV2hlZWxFdmVudCYgdwogewogICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7CiAKLSAg
ICBXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShwYWdlSUQp
OworICAgIFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdl
KHBhZ2VJRCk7CiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTIyNSw3
ICsyMjUsNyBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KHVpbnQ2
NF90IHBhZ2VJRCwgY29uc3QgV2ViV2hlZWxFdmVudCYgdwogI2lmIEVOQUJMRShBU1lOQ19TQ1JP
TExJTkcpCiB2b2lkIEV2ZW50RGlzcGF0Y2hlcjo6c2VuZERpZFJlY2VpdmVFdmVudCh1aW50NjRf
dCBwYWdlSUQsIGNvbnN0IFdlYkV2ZW50JiBldmVudCwgYm9vbCBkaWRIYW5kbGVFdmVudCkKIHsK
LSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFdmVudChzdGF0aWNfY2FzdDx1aW50
MzJfdD4oZXZlbnQudHlwZSgpKSwgZGlkSGFuZGxlRXZlbnQpLCBwYWdlSUQpOworICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUV2ZW50KHN0YXRpY19jYXN0PHVpbnQzMl90Pihl
dmVudC50eXBlKCkpLCBkaWRIYW5kbGVFdmVudCksIHBhZ2VJRCk7CiB9CiAjZW5kaWYKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwCmluZGV4IDgwY2RlNjJjODk5M2U5NjU2YzBj
MzBmYzQ0OTc0YmIzMzU3N2EzYzQuLmRmNzAxM2QyZmY2ZjFjMDQ2YjIzN2NmM2UxYmU4NzE0Yzc2
NTU3YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKQEAgLTU3LDEyICs1
NywxMiBAQCBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpWaWV3R2VzdHVyZUdlb21ldHJ5
Q29sbGVjdG9yKFdlYlBhZ2UmIHdlYlBhZ2UpCiAgICAgLCBtX3JlbmRlclRyZWVTaXplTm90aWZp
Y2F0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmVmlld0dlc3R1cmVHZW9tZXRyeUNv
bGxlY3Rvcjo6cmVuZGVyVHJlZVNpemVOb3RpZmljYXRpb25UaW1lckZpcmVkKQogI2VuZGlmCiB7
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpW
aWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fd2Vi
UGFnZS5wYWdlSUQoKSwgKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCksICp0aGlzKTsKIH0KIAogVmll
d0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6flZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3Io
KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3dlYlBhZ2UucGFnZUlEKCkpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnJlbW92
ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Vmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3dlYlBhZ2UucGFnZUlEKCkpOwogfQogCiB2b2lkIFZp
ZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmRpc3BhdGNoRGlkQ29sbGVjdEdlb21ldHJ5Rm9y
U21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShGbG9hdFBvaW50IG9yaWdpbiwgRmxvYXRSZWN0IHRh
cmdldFJlY3QsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVs
ZW1lbnQsIGRvdWJsZSB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11
bVNjYWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zp
ZXdVcGRhdGVEaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAKaW5kZXggOWE0MDc3OWQ1ODBmMWNhMzEyYTU2MWRi
NjVkYTkyNjI1YmNkMGVmZi4uYzk4NzA0MzMzZTY4MDUwMjU4MmZlMDgxZWVhYzJlNzA2MDQ2ZWQw
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRh
dGVEaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Vmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCkBAIC04NCw3ICs4NCw3IEBAIHZvaWQgVmlld1VwZGF0
ZURpc3BhdGNoZXI6OmRpc3BhdGNoVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKCkKICAgICB9CiAK
ICAgICBmb3IgKGF1dG8mIHNsb3QgOiB1cGRhdGUpIHsKLSAgICAgICAgaWYgKFdlYlBhZ2UqIHdl
YlBhZ2UgPSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHNsb3Qua2V5KSkKKyAgICAgICAg
aWYgKFdlYlBhZ2UqIHdlYlBhZ2UgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlKHNs
b3Qua2V5KSkKICAgICAgICAgICAgIHdlYlBhZ2UtPnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMo
c2xvdC52YWx1ZS52aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLCBzbG90LnZhbHVlLm9sZGVz
dFRpbWVzdGFtcCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKaW5k
ZXggYmExODcxZmI0MDA0YjcwMzUwMTY5YzYxNWI4ZTVkNjY1YzcwYzA3YS4uZDM1OWIxOWUwODIx
YjQ1MzE2NDAxNzJkOGZhYTk1NWJjYjRlYzg5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXIuY3BwCkBAIC01OSwxNCArNTksMTQgQEAgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHUKIFZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcih1aW50NjRf
dCBpZGVudGlmaWVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCiB7Ci0gICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lkZW50aWZpZXIsICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faWRlbnRpZmllciwgKnRoaXMpOwogfQogCiBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6
flZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKCkKIHsKICAgICBBU1NFUlQodmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXJzKCkuY29udGFpbnMobV9pZGVudGlmaWVyKSk7CiAKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faWRlbnRpZmllcik7Cisg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lk
ZW50aWZpZXIpOwogCiAgICAgdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJzKCkucmVtb3ZlKG1f
aWRlbnRpZmllcik7CiB9CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgVmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXI6OmFkZFZpc2l0ZWRMaW5rKFBhZ2UmIHBhZ2UsIExpbmtIYXNoIGxpbmtIYXNoKQog
ICAgIGlmICghd2ViUGFnZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6VmlzaXRlZExp
bmtQcm92aWRlcjo6QWRkVmlzaXRlZExpbmtIYXNoRnJvbVBhZ2Uod2ViUGFnZS0+cGFnZUlEKCks
IGxpbmtIYXNoKSwgbV9pZGVudGlmaWVyKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpWaXNpdGVkTGlua1Byb3Zp
ZGVyOjpBZGRWaXNpdGVkTGlua0hhc2hGcm9tUGFnZSh3ZWJQYWdlLT5wYWdlSUQoKSwgbGlua0hh
c2gpLCBtX2lkZW50aWZpZXIpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
OjpzZXRWaXNpdGVkTGlua1RhYmxlKGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBoYW5kbGUp
CkBAIC05NywyMCArOTcsMjAgQEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6c2V0
VmlzaXRlZExpbmtUYWJsZShjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYKICAgICBtX3Zpc2l0
ZWRMaW5rVGFibGUuc2V0U2hhcmVkTWVtb3J5KHNoYXJlZE1lbW9yeS5yZWxlYXNlKCkpOwogCiAg
ICAgaW52YWxpZGF0ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQo
KS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpz
aW5nbGV0b24oKS5tYXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZv
aWQgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OnZpc2l0ZWRMaW5rU3RhdGVDaGFuZ2VkKGNv
bnN0IFZlY3RvcjxXZWJDb3JlOjpMaW5rSGFzaD4mIGxpbmtIYXNoZXMpCiB7CiAgICAgZm9yIChh
dXRvIGxpbmtIYXNoIDogbGlua0hhc2hlcykKICAgICAgICAgaW52YWxpZGF0ZVN0eWxlc0Zvckxp
bmsobGlua0hhc2gpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9yVmlzaXRl
ZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFya1BhZ2Vz
Rm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB2b2lkIFZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyOjphbGxWaXNpdGVkTGlua1N0YXRlQ2hhbmdlZCgpCiB7CiAgICAgaW52YWxpZGF0
ZVN0eWxlc0ZvckFsbExpbmtzKCk7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5tYXJrUGFnZXNG
b3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24oKS5t
YXJrUGFnZXNGb3JWaXNpdGVkTGlua1N0eWxlUmVjYWxjKCk7CiB9CiAKIHZvaWQgVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2l0ZWRMaW5rcygpCkBAIC0xMTgsNyArMTE4
LDcgQEAgdm9pZCBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaXRlZExp
bmtzKCkKICAgICBtX3Zpc2l0ZWRMaW5rVGFibGUuY2xlYXIoKTsKIAogICAgIGludmFsaWRhdGVT
dHlsZXNGb3JBbGxMaW5rcygpOwotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkubWFya1BhZ2VzRm9y
VmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOworICAgIFBhZ2VDYWNoZTo6c2luZ2xldG9uKCkubWFy
a1BhZ2VzRm9yVmlzaXRlZExpbmtTdHlsZVJlY2FsYygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJC
YWNrRm9yd2FyZExpc3RQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCmluZGV4IDc1ZTI3YmE1MTBhMmQ0YTQzNjUx
OTEyNDk1MDdjYzI0MTA2NTIxMGUuLmE5YzY3NzkwNTZiOTJkNjBkNDk0YjUxNTg5ZjM0ZDUzMTQ1
ODhjZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJC
YWNrRm9yd2FyZExpc3RQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApAQCAtOTEsNyArOTEsNyBAQCB2b2lk
IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2Vzcyh1
aW50NjRfdCBpdGVtSUQpCiAKIHN0YXRpYyB2b2lkIHVwZGF0ZUJhY2tGb3J3YXJkSXRlbSh1aW50
NjRfdCBpdGVtSUQsIHVpbnQ2NF90IHBhZ2VJRCwgSGlzdG9yeUl0ZW0qIGl0ZW0pCiB7Ci0gICAg
V2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpBZGRCYWNrRm9yd2FyZEl0ZW0oaXRlbUlELCBwYWdlSUQs
IHRvUGFnZVN0YXRlKCppdGVtKSksIDApOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBh
cmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3NQcm94eTo6
QWRkQmFja0ZvcndhcmRJdGVtKGl0ZW1JRCwgcGFnZUlELCB0b1BhZ2VTdGF0ZSgqaXRlbSkpLCAw
KTsKIH0KIAogdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nl
c3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBwcnBJ
dGVtLCB1aW50NjRfdCBwYWdlSUQpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6cmVtb3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpCiAgICAgaWYgKCFpdGVt
KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIFBhZ2VDYWNoZTo6c2hhcmVkKCkucmVt
b3ZlKCppdGVtKTsKKyAgICBQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZSgqaXRlbSk7CiAg
ICAgV2ViQ29yZTo6UGFnZTo6Y2xlYXJQcmV2aW91c0l0ZW1Gcm9tQWxsUGFnZXMoaXRlbS5nZXQo
KSk7CiAgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkucmVtb3ZlKGl0ZW0pOwogfQpAQCAtMTgxLDcg
KzE4MSw3IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbUF0SW5k
ZXgoaW50IGl0ZW1JbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICB1aW50NjRfdCBpdGVt
SUQgPSAwOwotICAgIGlmICghV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZFN5bmMoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVt
QXRJbmRleChpdGVtSW5kZXgpLCBNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEl0
ZW1BdEluZGV4OjpSZXBseShpdGVtSUQpLCBtX3BhZ2UtPnBhZ2VJRCgpKSkKKyAgICBpZiAoIVdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5j
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4
KSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHko
aXRlbUlEKSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgaWYg
KCFpdGVtSUQpCkBAIC0xOTYsNyArMTk2LDcgQEAgaW50IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjpiYWNrTGlzdENvdW50KCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpbnQgYmFja0xpc3RD
b3VudCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJh
Y2tMaXN0Q291bnQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlz
dENvdW50OjpSZXBseShiYWNrTGlzdENvdW50KSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYg
KCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
U3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEJhY2tMaXN0Q291bnQoKSwg
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRCYWNrTGlzdENvdW50OjpSZXBseShi
YWNrTGlzdENvdW50KSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIGJhY2tMaXN0Q291bnQ7CkBAIC0yMDgsNyArMjA4LDcgQEAgaW50IFdlYkJhY2tG
b3J3YXJkTGlzdFByb3h5Ojpmb3J3YXJkTGlzdENvdW50KCkKICAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICBpbnQgZm9yd2FyZExpc3RDb3VudCA9IDA7Ci0gICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFy
ZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50
KSwgbV9wYWdlLT5wYWdlSUQoKSkpCisgICAgaWYgKCFXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpCYWNrRm9yd2FyZEZvcndhcmRMaXN0Q291bnQoKSwgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
QmFja0ZvcndhcmRGb3J3YXJkTGlzdENvdW50OjpSZXBseShmb3J3YXJkTGlzdENvdW50KSwgbV9w
YWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgcmV0dXJuIGZvcndhcmRM
aXN0Q291bnQ7CkBAIC0yMTgsNyArMjE4LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6Y2xvc2UoKQogewogICAgIGZvciAoYXV0byYgaXRlbUlEIDogbV9hc3NvY2lhdGVkSXRlbUlE
cykgewogICAgICAgICBpZiAoSGlzdG9yeUl0ZW0qIGl0ZW0gPSBpdGVtRm9ySUQoaXRlbUlEKSkK
LSAgICAgICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2hhcmVkKCkucmVtb3ZlKCppdGVtKTsK
KyAgICAgICAgICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKCppdGVt
KTsKICAgICB9CiAKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmNsZWFyKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkNvbnRleHRNZW51LmNwcAppbmRl
eCA1ODFlYzI2NzM2MmRmNGU4ZDUxOTI4ODQxMWQyNjZlYWYwODEwYzc3Li5lMDk3MmI1M2I2NGMz
ZTFiODY0N2Y0MTJlNjAwNTAwOTc5MTFhYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQ29udGV4dE1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJDb250ZXh0TWVudS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAg
dm9pZCBXZWJDb250ZXh0TWVudTo6c2hvdygpCiAKICAgICAvLyBNYXJrIHRoZSBXZWJQYWdlIGhh
cyBoYXZpbmcgYSBzaG93biBjb250ZXh0IG1lbnUgdGhlbiBub3RpZnkgdGhlIFVJUHJvY2Vzcy4K
ICAgICBtX3BhZ2UtPmNvbnRleHRNZW51U2hvd2luZygpOwotICAgIG1fcGFnZS0+c2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29udGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRv
dyhjb250cm9sbGVyLmhpdFRlc3RSZXN1bHQoKS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1l
KCkpLCBjb250ZXh0TWVudUNvbnRleHREYXRhLCBtZW51SXRlbXMsIFVzZXJEYXRhKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdl
dCgpKSkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93Q29u
dGV4dE1lbnUodmlldy0+Y29udGVudHNUb1dpbmRvdyhjb250cm9sbGVyLmhpdFRlc3RSZXN1bHQo
KS5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCkpLCBjb250ZXh0TWVudUNvbnRleHREYXRh
LCBtZW51SXRlbXMsIFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9i
amVjdHNUb0hhbmRsZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogfQogCiB2b2lkIFdlYkNv
bnRleHRNZW51OjppdGVtU2VsZWN0ZWQoY29uc3QgV2ViQ29udGV4dE1lbnVJdGVtRGF0YSYgaXRl
bSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmlu
ZGV4IGIwNTQ2MGE5ODM3MTY4MTM5ZThiNTk3ZmNmMjIwZjVmNGU5NjdlOWEuLjE1MTNiODgyZWY3
NTUzYWUzNmZkNmRlY2FkZWVkNTRjYjcyNzI3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIFdlYkZyYW1l
OjpXZWJGcmFtZShzdGQ6OnVuaXF1ZV9wdHI8V2ViRnJhbWVMb2FkZXJDbGllbnQ+IGZyYW1lTG9h
ZGVyQ2xpZW50KQogICAgICwgbV9mcmFtZUlEKGdlbmVyYXRlRnJhbWVJRCgpKQogewogICAgIG1f
ZnJhbWVMb2FkZXJDbGllbnQtPnNldFdlYkZyYW1lKHRoaXMpOwotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLmFkZFdlYkZyYW1lKG1fZnJhbWVJRCwgdGhpcyk7CisgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuYWRkV2ViRnJhbWUobV9mcmFtZUlELCB0aGlzKTsKIAogI2lmbmRlZiBOREVCVUcK
ICAgICB3ZWJGcmFtZUNvdW50ZXIuaW5jcmVtZW50KCk7CkBAIC0xOTIsNyArMTkyLDcgQEAgV2Vi
RnJhbWUqIFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKEZyYW1lJiBmcmFtZSkKIAogdm9pZCBXZWJG
cmFtZTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlV2Vi
RnJhbWUobV9mcmFtZUlEKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVXZWJG
cmFtZShtX2ZyYW1lSUQpOwogICAgIG1fY29yZUZyYW1lID0gMDsKIH0KIApAQCAtMjUwLDE0ICsy
NTAsMTUgQEAgdm9pZCBXZWJGcmFtZTo6c3RhcnREb3dubG9hZChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgdWludDY0X3QgcG9saWN5RG93bmxvYWRJRCA9IG1f
cG9saWN5RG93bmxvYWRJRDsKICAgICBtX3BvbGljeURvd25sb2FkSUQgPSAwOwogCisgICAgYXV0
byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpOwogI2lmIEVOQUJMRShORVRX
T1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlByb2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJv
Y2VzcygpKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLm5ldHdvcmtDb25uZWN0aW9u
KCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlN0YXJ0RG93bmxvYWQocGFnZSgpLT5zZXNzaW9uSUQoKSwgcG9saWN5RG93bmxvYWRJ
RCwgcmVxdWVzdCksIDApOworICAgIGlmICh3ZWJQcm9jZXNzLnVzZXNOZXR3b3JrUHJvY2Vzcygp
KSB7CisgICAgICAgIHdlYlByb2Nlc3MubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6U3RhcnREb3du
bG9hZChwYWdlKCktPnNlc3Npb25JRCgpLCBwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KSwgMCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQocG9saWN5RG93bmxvYWRJRCwgcmVx
dWVzdCk7CisgICAgd2ViUHJvY2Vzcy5kb3dubG9hZE1hbmFnZXIoKS5zdGFydERvd25sb2FkKHBv
bGljeURvd25sb2FkSUQsIHJlcXVlc3QpOwogfQogCiB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFp
blJlc291cmNlTG9hZFRvRG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQpAQCAtMjY5LDggKzI3MCw5IEBAIHZvaWQgV2ViRnJhbWU6OmNvbnZlcnRNYWluUmVz
b3VyY2VMb2FkVG9Eb3dubG9hZChEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIsCiAKICAg
ICBSZXNvdXJjZUxvYWRlciogbWFpblJlc291cmNlTG9hZGVyID0gZG9jdW1lbnRMb2FkZXItPm1h
aW5SZXNvdXJjZUxvYWRlcigpOwogCisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpOwogI2lmIEVOQUJMRShORVRXT1JLX1BST0NFU1MpCi0gICAgaWYgKFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLnVzZXNOZXR3b3JrUHJvY2VzcygpKSB7CisgICAgaWYgKHdlYlByb2Nl
c3MudXNlc05ldHdvcmtQcm9jZXNzKCkpIHsKICAgICAgICAgLy8gVXNlIDAgdG8gaW5kaWNhdGUg
dGhhdCB0aGVyZSBpcyBubyBtYWluIHJlc291cmNlIGxvYWRlci4KICAgICAgICAgLy8gVGhpcyBj
YW4gaGFwcGVuIGlmIHRoZSBtYWluIHJlc291cmNlIGlzIGluIHRoZSBXZWJDb3JlIG1lbW9yeSBj
YWNoZS4KICAgICAgICAgdWludDY0X3QgbWFpblJlc291cmNlTG9hZElkZW50aWZpZXI7CkBAIC0y
NzksMTggKzI4MSwxOCBAQCB2b2lkIFdlYkZyYW1lOjpjb252ZXJ0TWFpblJlc291cmNlTG9hZFRv
RG93bmxvYWQoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyLAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBtYWluUmVzb3VyY2VMb2FkSWRlbnRpZmllciA9IDA7CiAKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya0Nvbm5lY3Rpb24oKS0+Y29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q29udmVydE1haW5SZXNv
dXJjZUxvYWRUb0Rvd25sb2FkKG1haW5SZXNvdXJjZUxvYWRJZGVudGlmaWVyLCBwb2xpY3lEb3du
bG9hZElELCByZXF1ZXN0LCByZXNwb25zZSksIDApOworICAgICAgICB3ZWJQcm9jZXNzLm5ldHdv
cmtDb25uZWN0aW9uKCktPmNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OkNvbnZlcnRNYWluUmVzb3VyY2VMb2FkVG9Eb3dubG9hZChtYWlu
UmVzb3VyY2VMb2FkSWRlbnRpZmllciwgcG9saWN5RG93bmxvYWRJRCwgcmVxdWVzdCwgcmVzcG9u
c2UpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgogCiAgICAgaWYgKCFtYWlu
UmVzb3VyY2VMb2FkZXIpIHsKICAgICAgICAgLy8gVGhlIG1haW4gcmVzb3VyY2UgaGFzIGFscmVh
ZHkgYmVlbiBsb2FkZWQuIFN0YXJ0IGEgbmV3IGRvd25sb2FkIGluc3RlYWQuCi0gICAgICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigpLnN0YXJ0RG93bmxvYWQocG9saWN5
RG93bmxvYWRJRCwgcmVxdWVzdCk7CisgICAgICAgIHdlYlByb2Nlc3MuZG93bmxvYWRNYW5hZ2Vy
KCkuc3RhcnREb3dubG9hZChwb2xpY3lEb3dubG9hZElELCByZXF1ZXN0KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmRvd25sb2FkTWFuYWdlcigp
LmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKHBvbGljeURvd25sb2FkSUQsIGRvY3VtZW50TG9hZGVy
LT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFuZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKKyAg
ICB3ZWJQcm9jZXNzLmRvd25sb2FkTWFuYWdlcigpLmNvbnZlcnRIYW5kbGVUb0Rvd25sb2FkKHBv
bGljeURvd25sb2FkSUQsIGRvY3VtZW50TG9hZGVyLT5tYWluUmVzb3VyY2VMb2FkZXIoKS0+aGFu
ZGxlKCksIHJlcXVlc3QsIHJlc3BvbnNlKTsKIH0KIAogU3RyaW5nIFdlYkZyYW1lOjpzb3VyY2Uo
KSBjb25zdCAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3Rvci5jcHAKaW5kZXggZjQyNGRiNmQ5MzZkNDIzM2JmYTMyMDdjMzYwZTNjNGUzYjVkYTA2
ZC4uNDU3MGY5MTM0N2NmZTA1ODEzOWUwNzU4YzYyMGE5Mzg1MDg2MDk5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKQEAgLTky
LDEyICs5MiwxMiBAQCB2b2lkIFdlYkluc3BlY3Rvcjo6Y3JlYXRlSW5zcGVjdG9yUGFnZShib29s
IHVuZGVyVGVzdCkKICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbiA9IElQQzo6Q29ubmVjdGlvbjo6
Y3JlYXRlU2VydmVyQ29ubmVjdGlvbihjb25uZWN0aW9uSWRlbnRpZmllciwgKnRoaXMsIFJ1bkxv
b3A6Om1haW4oKSk7CiAgICAgbV9mcm9udGVuZENvbm5lY3Rpb24tPm9wZW4oKTsKIAotICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclByb3h5OjpDcmVhdGVJbnNwZWN0b3JQYWdlKGNvbm5lY3Rpb25DbGll
bnRQb3J0LCBjYW5BdHRhY2hXaW5kb3coKSwgdW5kZXJUZXN0KSwgbV9wYWdlLT5wYWdlSUQoKSk7
CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkNyZWF0ZUluc3BlY3RvclBhZ2UoY29u
bmVjdGlvbkNsaWVudFBvcnQsIGNhbkF0dGFjaFdpbmRvdygpLCB1bmRlclRlc3QpLCBtX3BhZ2Ut
PnBhZ2VJRCgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3I6OmNsb3NlRnJvbnRlbmQoKQogewot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQo
TWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpEaWRDbG9zZSgpLCBtX3BhZ2UtPnBhZ2VJRCgp
KTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigp
LT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9wYWdlLT5w
YWdlSUQoKSk7CiAKICAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+aW52YWxpZGF0ZSgpOwogICAg
IG1fZnJvbnRlbmRDb25uZWN0aW9uID0gbnVsbHB0cjsKQEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lk
IFdlYkluc3BlY3Rvcjo6Y2xvc2VGcm9udGVuZCgpCiAKIHZvaWQgV2ViSW5zcGVjdG9yOjpicmlu
Z1RvRnJvbnQoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQo
KSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50
UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkJy
aW5nVG9Gcm9udCgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKIH0KIAogLy8gQ2FsbGVkIGJ5IFdlYklu
c3BlY3RvciBtZXNzYWdlcwpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjpz
aG93UmVzb3VyY2VzKCkKIAogdm9pZCBXZWJJbnNwZWN0b3I6OnNob3dNYWluUmVzb3VyY2VGb3JG
cmFtZSh1aW50NjRfdCBmcmFtZUlkZW50aWZpZXIpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0g
V2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJZGVudGlmaWVyKTsKKyAgICBXZWJG
cmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlkZW50
aWZpZXIpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjM0LDcgKzIz
NCw3IEBAIHZvaWQgV2ViSW5zcGVjdG9yOjp1cGRhdGVEb2NraW5nQXZhaWxhYmlsaXR5KCkKIAog
ICAgIG1fcHJldmlvdXNDYW5BdHRhY2ggPSBjYW5BdHRhY2hXaW5kb3c7CiAKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5k
b3cpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
QXR0YWNoQXZhaWxhYmlsaXR5Q2hhbmdlZChjYW5BdHRhY2hXaW5kb3cpLCBtX3BhZ2UtPnBhZ2VJ
RCgpKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKQEAgLTI0OSw3ICsyNDksNyBAQCBib29sIFdlYkluc3BlY3Rvcjo6
c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX1NFUlZFUikKICAgICBpZiAobV9yZW1vdGVGcm9udGVuZENvbm5lY3RlZCkK
LSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNlbmRNZXNzYWdlVG9SZW1vdGVGcm9u
dGVuZChtZXNzYWdlKSwgbV9wYWdlLT5wYWdlSUQoKSk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYklu
c3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQobWVzc2FnZSksIG1fcGFn
ZS0+cGFnZUlEKCkpOwogICAgIGVsc2UKICNlbmRpZgogICAgICAgICBtX2Zyb250ZW5kQ29ubmVj
dGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChtZXNzYWdlKSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9yVUkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkluc3BlY3RvclVJLmNwcAppbmRleCA3YzljZTZkNmQwNDdlZmY2OTliMTc3YmU0ODY0
NTBhOTE1Yjc5ZWFmLi5kZWQzNjk5YmM0MjVhZWNiNGVhNGFhM2Y5MmI0MTMwMDUwNDg2ZDYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9y
VUkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3JVSS5jcHAKQEAgLTExMSwxMiArMTExLDEyIEBAIHZvaWQgV2ViSW5zcGVjdG9yVUk6Om1vdmVX
aW5kb3dCeShmbG9hdCB4LCBmbG9hdCB5KQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpicmluZ1Rv
RnJvbnQoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpCcmluZ1RvRnJvbnQoKSwg
bV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
cGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJv
eHk6OkJyaW5nVG9Gcm9udCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9p
ZCBXZWJJbnNwZWN0b3JVSTo6Y2xvc2VXaW5kb3coKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpEaWRDbG9zZSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6RGlkQ2xvc2UoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRp
Zmllcik7CiAKICAgICBtX2JhY2tlbmRDb25uZWN0aW9uLT5pbnZhbGlkYXRlKCk7CiAgICAgbV9i
YWNrZW5kQ29ubmVjdGlvbiA9IG51bGxwdHI7CkBAIC0xMjcsMTcgKzEyNywxNiBAQCB2b2lkIFdl
Ykluc3BlY3RvclVJOjpjbG9zZVdpbmRvdygpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnJlcXVl
c3RTZXREb2NrU2lkZShEb2NrU2lkZSBzaWRlKQogeworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKTsKICAgICBzd2l0Y2ggKHNpZGUpIHsKICAgICBjYXNlIERv
Y2tTaWRlOjpVbmRvY2tlZDoKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJv
Y2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OkRldGFj
aCgpLCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6
RGV0YWNoKCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKLQog
ICAgIGNhc2UgRG9ja1NpZGU6OlJpZ2h0OgotICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5w
YXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94
eTo6QXR0YWNoUmlnaHQoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgICAgIHdl
YlByb2Nlc3MucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5z
cGVjdG9yUHJveHk6OkF0dGFjaFJpZ2h0KCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwog
ICAgICAgICBicmVhazsKLQogICAgIGNhc2UgRG9ja1NpZGU6OkJvdHRvbToKLSAgICAgICAgV2Vi
UHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdl
czo6V2ViSW5zcGVjdG9yUHJveHk6OkF0dGFjaEJvdHRvbSgpLCBtX2luc3BlY3RlZFBhZ2VJZGVu
dGlmaWVyKTsKKyAgICAgICAgd2ViUHJvY2Vzcy5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXR0YWNoQm90dG9tKCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBAIC0xNjcsMTcg
KzE2NiwxNyBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpzZXREb2NrU2lkZShEb2NrU2lkZSBzaWRl
KQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpjaGFuZ2VBdHRhY2hlZFdpbmRvd0hlaWdodCh1bnNp
Z25lZCBoZWlnaHQpCiB7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yUHJveHk6OlNldEF0dGFjaGVk
V2luZG93SGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVz
c2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRBdHRhY2hlZFdpbmRvd0hlaWdodChoZWlnaHQp
LCBtX2luc3BlY3RlZFBhZ2VJZGVudGlmaWVyKTsKIH0KIAogdm9pZCBXZWJJbnNwZWN0b3JVSTo6
Y2hhbmdlQXR0YWNoZWRXaW5kb3dXaWR0aCh1bnNpZ25lZCB3aWR0aCkKIHsKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3JQcm94eTo6U2V0QXR0YWNoZWRXaW5kb3dXaWR0aCh3aWR0aCksIG1faW5zcGVj
dGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFBy
b2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRB
dHRhY2hlZFdpbmRvd1dpZHRoKHdpZHRoKSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CiB9
CiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNldFRvb2xiYXJIZWlnaHQodW5zaWduZWQgaGVpZ2h0
KQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCkt
PnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpTZXRUb29sYmFySGVpZ2h0KGhlaWdo
dCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpTZXRUb29sYmFySGVpZ2h0KGhlaWdodCksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZp
ZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5OZXdUYWIoY29uc3QgU3RyaW5n
JiB1cmwpCkBAIC0xODgsMTcgKzE4NywxNyBAQCB2b2lkIFdlYkluc3BlY3RvclVJOjpvcGVuSW5O
ZXdUYWIoY29uc3QgU3RyaW5nJiB1cmwpCiAKIHZvaWQgV2ViSW5zcGVjdG9yVUk6OnNhdmUoY29u
c3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKQogewotICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNh
dmVBcyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3Bl
Y3RvclByb3h5OjpTYXZlKGZpbGVuYW1lLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNh
dmVBcyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3Rv
clVJOjphcHBlbmQoY29uc3QgV1RGOjpTdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBXVEY6OlN0cmlu
ZyYgY29udGVudCkKIHsKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JQcm94eTo6QXBwZW5kKGZpbGVu
YW1lLCBjb250ZW50KSwgbV9pbnNwZWN0ZWRQYWdlSWRlbnRpZmllcik7CisgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6
V2ViSW5zcGVjdG9yUHJveHk6OkFwcGVuZChmaWxlbmFtZSwgY29udGVudCksIG1faW5zcGVjdGVk
UGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lkIFdlYkluc3BlY3RvclVJOjppbnNwZWN0ZWRVUkxD
aGFuZ2VkKGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rv
clByb3h5OjpJbnNwZWN0ZWRVUkxDaGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlk
ZW50aWZpZXIpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25u
ZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3RvclByb3h5OjpJbnNwZWN0ZWRVUkxD
aGFuZ2VkKHVybFN0cmluZyksIG1faW5zcGVjdGVkUGFnZUlkZW50aWZpZXIpOwogfQogCiB2b2lk
IFdlYkluc3BlY3RvclVJOjpzaG93Q29uc29sZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggZDg2ZDcyNjZjODMyMzFiODFiN2EyZmRjMTdj
ZmU3YzFiYjI2N2Q5OC4uNjBhMTBiOTgxM2YzZjQ2ZWVlY2I1Nzk1ZmJiZjI4ZTViMTJhZTM0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAt
MjQwLDggKzI0MCw4IEBAIFBhc3NSZWZQdHI8V2ViUGFnZT4gV2ViUGFnZTo6Y3JlYXRlKHVpbnQ2
NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1lCiB7CiAgICAgUmVmUHRyPFdl
YlBhZ2U+IHBhZ2UgPSBhZG9wdFJlZihuZXcgV2ViUGFnZShwYWdlSUQsIHBhcmFtZXRlcnMpKTsK
IAotICAgIGlmIChwYWdlLT5wYWdlR3JvdXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgp
ICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCktPmRpZENyZWF0ZVBhZ2UocGFnZS5nZXQo
KSk7CisgICAgaWYgKHBhZ2UtPnBhZ2VHcm91cCgpLT5pc1Zpc2libGVUb0luamVjdGVkQnVuZGxl
KCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKSkKKyAgICAgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKS0+ZGlkQ3JlYXRlUGFnZShw
YWdlLmdldCgpKTsKIAogICAgIHJldHVybiBwYWdlLnJlbGVhc2UoKTsKIH0KQEAgLTM0Nyw3ICsz
NDcsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNy
ZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAvLyA0bXMgc2hvdWxkIGJlIGFkb3B0
ZWQgcHJvamVjdC13aWRlIG5vdywgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTYxMjE0CiAgICAgU2V0dGluZ3M6OnNldERlZmF1bHRNaW5ET01UaW1lckludGVydmFsKDAu
MDA0KTsKIAotICAgIG1fcGFnZUdyb3VwID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZUdy
b3VwKHBhcmFtZXRlcnMucGFnZUdyb3VwRGF0YSk7CisgICAgbV9wYWdlR3JvdXAgPSBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS53ZWJQYWdlR3JvdXAocGFyYW1ldGVycy5wYWdlR3JvdXBEYXRhKTsK
IAogI2lmIFBMQVRGT1JNKElPUykKICAgICBTZXR0aW5nczo6c2V0U2hvdWxkTWFuYWdlQXVkaW9T
ZXNzaW9uQ2F0ZWdvcnkodHJ1ZSk7CkBAIC00NzQsMTYgKzQ3NCwxNyBAQCBXZWJQYWdlOjpXZWJQ
YWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFy
YW1ldGVycykKICAgICAvLyBXZSB1c2UgdGhlIERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91
dCBtaWxlc3RvbmUgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gdW5mcmVlemUgdGhlIGxheWVyIHRyZWUu
CiAgICAgbV9wYWdlLT5hZGRMYXlvdXRNaWxlc3RvbmVzKERpZEZpcnN0TGF5b3V0IHwgRGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KTsKIAotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2VJRCwgKnRoaXMpOworICAgIGF1dG8mIHdlYlByb2Nlc3MgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKTsKKyAgICB3ZWJQcm9jZXNzLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIG9iamVjdCBjb25zdHJ1Y3RvcnMs
IGFuZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzIHNob3VsZCBiZSBtZXNzYWdlIHJlY2VpdmVycy4K
ICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1NfTVVMVElQUk9DRVNTKQotICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6Q29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CisgICAg
d2ViUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwogI2VuZGlm
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpX
ZWJJbnNwZWN0b3I6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlSUQsICp0aGlzKTsKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYklu
c3BlY3RvclVJOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CisgICAg
d2ViUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOworICAgIHdlYlByb2Nlc3MuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX3BhZ2VJRCwgKnRoaXMpOwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAg
ICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkZ1
bGxTY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7
CisgICAgd2ViUHJvY2Vzcy5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3Jl
ZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlELCAqdGhpcyk7CiAjZW5k
aWYKIAogI2lmbmRlZiBOREVCVUcKQEAgLTQ5Miw3ICs0OTMsNyBAQCBXZWJQYWdlOjpXZWJQYWdl
KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1l
dGVycykKIAogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgaWYgKG1fdXNlQXN5bmNT
Y3JvbGxpbmcpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigp
LmFkZFNjcm9sbGluZ1RyZWVGb3JQYWdlKHRoaXMpOworICAgICAgICB3ZWJQcm9jZXNzLmV2ZW50
RGlzcGF0Y2hlcigpLmFkZFNjcm9sbGluZ1RyZWVGb3JQYWdlKHRoaXMpOwogI2VuZGlmCiAKICAg
ICBmb3IgKGF1dG8mIG1pbWVUeXBlIDogcGFyYW1ldGVycy5taW1lVHlwZXNXaXRoQ3VzdG9tQ29u
dGVudFByb3ZpZGVycykKQEAgLTUwMCw3ICs1MDEsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2
NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykK
IAogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKLSAgICBpZiAoV2ViTWVkaWFLZXlT
dG9yYWdlTWFuYWdlciogbWFuYWdlciA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnN1cHBsZW1lbnQ8
V2ViTWVkaWFLZXlTdG9yYWdlTWFuYWdlcj4oKSkKKyAgICBpZiAoV2ViTWVkaWFLZXlTdG9yYWdl
TWFuYWdlciogbWFuYWdlciA9IHdlYlByb2Nlc3Muc3VwcGxlbWVudDxXZWJNZWRpYUtleVN0b3Jh
Z2VNYW5hZ2VyPigpKQogICAgICAgICBtX3BhZ2UtPnNldHRpbmdzKCkuc2V0TWVkaWFLZXlzU3Rv
cmFnZURpcmVjdG9yeShtYW5hZ2VyLT5tZWRpYUtleVN0b3JhZ2VEaXJlY3RvcnkoKSk7CiAjZW5k
aWYKIH0KQEAgLTUzOSw5ICs1NDAsMTAgQEAgV2ViUGFnZTo6fldlYlBhZ2UoKQogCiAgICAgQVNT
RVJUKCFtX3BhZ2UpOwogCisgICAgYXV0byYgd2ViUHJvY2VzcyA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpOwogI2lmIEVOQUJMRShBU1lOQ19TQ1JPTExJTkcpCiAgICAgaWYgKG1fdXNlQXN5bmNT
Y3JvbGxpbmcpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmV2ZW50RGlzcGF0Y2hlcigp
LnJlbW92ZVNjcm9sbGluZ1RyZWVGb3JQYWdlKHRoaXMpOworICAgICAgICB3ZWJQcm9jZXNzLmV2
ZW50RGlzcGF0Y2hlcigpLnJlbW92ZVNjcm9sbGluZ1RyZWVGb3JQYWdlKHRoaXMpOwogI2VuZGlm
CiAKICAgICBwbGF0Zm9ybURldGFjaCgpOwpAQCAtNTU4LDE2ICs1NjAsMTYgQEAgV2ViUGFnZTo6
fldlYlBhZ2UoKQogICAgICAgICBtX2Zvb3RlckJhbm5lci0+ZGV0YWNoRnJvbVBhZ2UoKTsKICNl
bmRpZiAvLyAhUExBVEZPUk0oSU9TKQogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJQYWdlOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcGFnZUlEKTsKKyAgICB3ZWJQcm9jZXNzLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdl
czo6V2ViUGFnZTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAKICAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUgb2JqZWN0IGRlc3RydWN0b3JzLCBhbmQg
dGhlIG9iamVjdHMgdGhlbXNlbHZlcyBzaG91bGQgYmUgbWVzc2FnZSByZWNlaXZlcnMuCiAjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTX01VTFRJUFJPQ0VTUykKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJU
cmVlSG9zdDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgd2ViUHJvY2Vz
cy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OkNvb3JkaW5hdGVkTGF5ZXJUcmVlSG9z
dDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CiAjZW5kaWYKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rv
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7Ci0gICAgV2ViUHJvY2Vzczo6c2hh
cmVkKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3JVSTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgd2ViUHJvY2Vzcy5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3BhZ2VJRCk7CisgICAgd2ViUHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OldlYkluc3BlY3RvclVJOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcGFnZUlEKTsKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpXZWJGdWxsU2NyZWVuTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3BhZ2VJRCk7CisgICAgd2ViUHJvY2Vzcy5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OldlYkZ1bGxTY3JlZW5NYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1fcGFnZUlEKTsKICNlbmRpZgogCiAjaWZuZGVmIE5ERUJVRwpAQCAtNTgxLDcgKzU4Myw3
IEBAIHZvaWQgV2ViUGFnZTo6ZHVtbXkoYm9vbCYpCiAKIElQQzo6Q29ubmVjdGlvbiogV2ViUGFn
ZTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKQogewotICAgIHJldHVybiBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpOworICAgIHJldHVybiBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpOwogfQogCiB1aW50NjRfdCBX
ZWJQYWdlOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpCkBAIC05NzQsOCArOTc2LDggQEAg
dm9pZCBXZWJQYWdlOjpjbG9zZSgpCiAgICAgaWYgKCFtYWluV2ViRnJhbWUoKS0+dXJsKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXBvcnRVc2VkRmVhdHVyZXMoKTsKIAotICAgIGlmIChwYWdlR3Jv
dXAoKS0+aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LmluamVjdGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVk
QnVuZGxlKCktPndpbGxEZXN0cm95UGFnZSh0aGlzKTsKKyAgICBpZiAocGFnZUdyb3VwKCktPmlz
VmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmpl
Y3RlZEJ1bmRsZSgpKQorICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5pbmplY3RlZEJ1
bmRsZSgpLT53aWxsRGVzdHJveVBhZ2UodGhpcyk7CiAKICAgICBpZiAobV9pbnNwZWN0b3IpIHsK
ICAgICAgICAgbV9pbnNwZWN0b3ItPmRpc2Nvbm5lY3RGcm9tUGFnZSgpOwpAQCAtMTAzOSw3ICsx
MDQxLDcgQEAgdm9pZCBXZWJQYWdlOjpjbG9zZSgpCiAgICAgbV9pc1J1bm5pbmdNb2RhbCA9IGZh
bHNlOwogCiAgICAgLy8gVGhlIFdlYlBhZ2UgY2FuIGJlIGRlc3Ryb3llZCBieSB0aGlzIGNhbGwu
Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkucmVtb3ZlV2ViUGFnZShtX3BhZ2VJRCk7CisgICAg
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucmVtb3ZlV2ViUGFnZShtX3BhZ2VJRCk7CiAKICAgICBp
ZiAoaXNSdW5uaW5nTW9kYWwpCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5zdG9wKCk7CkBAIC0x
MDY0LDcgKzEwNjYsNyBAQCB2b2lkIFdlYlBhZ2U6OnNlbmRDbG9zZSgpCiAKIHZvaWQgV2ViUGFn
ZTo6bG9hZFVSTEluRnJhbWUoY29uc3QgU3RyaW5nJiB1cmwsIHVpbnQ2NF90IGZyYW1lSUQpCiB7
Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJh
bWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2Vi
RnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0x
MDgxLDcgKzEwODMsNyBAQCB2b2lkIFdlYlBhZ2U6OmxvYWRSZXF1ZXN0KHVpbnQ2NF90IG5hdmln
YXRpb25JRCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAogCiAgICAgLy8gTGV0IHRo
ZSBJbmplY3RlZEJ1bmRsZSBrbm93IHdlIGFyZSBhYm91dCB0byBzdGFydCB0aGUgbG9hZCwgcGFz
c2luZyB0aGUgdXNlciBkYXRhIGZyb20gdGhlIFVJUHJvY2VzcwogICAgIC8vIHRvIGFsbCB0aGUg
Y2xpZW50IHRvIHNldCB1cCBhbnkgbmVlZGVkIHN0YXRlLgotICAgIG1fbG9hZGVyQ2xpZW50Lndp
bGxMb2FkVVJMUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBXZWJQcm9jZXNzOjpzaGFyZWQoKS50cmFu
c2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CisgICAgbV9s
b2FkZXJDbGllbnQud2lsbExvYWRVUkxSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHModXNlckRhdGEub2JqZWN0KCkp
LmdldCgpKTsKIAogICAgIC8vIEluaXRhdGUgdGhlIGxvYWQgaW4gV2ViQ29yZS4KICAgICBjb3Jl
UGFnZSgpLT51c2VySW5wdXRCcmlkZ2UoKS5sb2FkUmVxdWVzdChGcmFtZUxvYWRSZXF1ZXN0KG1f
bWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgcmVxdWVzdCkpOwpAQCAtMTEwMCw3ICsxMTAyLDcgQEAg
dm9pZCBXZWJQYWdlOjpsb2FkRGF0YUltcGwodWludDY0X3QgbmF2aWdhdGlvbklELCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gc2hhcmUKIAogICAgIC8vIExldCB0aGUgSW5qZWN0ZWRCdW5kbGUg
a25vdyB3ZSBhcmUgYWJvdXQgdG8gc3RhcnQgdGhlIGxvYWQsIHBhc3NpbmcgdGhlIHVzZXIgZGF0
YSBmcm9tIHRoZSBVSVByb2Nlc3MKICAgICAvLyB0byBhbGwgdGhlIGNsaWVudCB0byBzZXQgdXAg
YW55IG5lZWRlZCBzdGF0ZS4KLSAgICBtX2xvYWRlckNsaWVudC53aWxsTG9hZERhdGFSZXF1ZXN0
KHRoaXMsIHJlcXVlc3QsIGNvbnN0X2Nhc3Q8U2hhcmVkQnVmZmVyKj4oc3Vic3RpdHV0ZURhdGEu
Y29udGVudCgpKSwgc3Vic3RpdHV0ZURhdGEubWltZVR5cGUoKSwgc3Vic3RpdHV0ZURhdGEudGV4
dEVuY29kaW5nKCksIHN1YnN0aXR1dGVEYXRhLmZhaWxpbmdVUkwoKSwgV2ViUHJvY2Vzczo6c2hh
cmVkKCkudHJhbnNmb3JtSGFuZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkp
OworICAgIG1fbG9hZGVyQ2xpZW50LndpbGxMb2FkRGF0YVJlcXVlc3QodGhpcywgcmVxdWVzdCwg
Y29uc3RfY2FzdDxTaGFyZWRCdWZmZXIqPihzdWJzdGl0dXRlRGF0YS5jb250ZW50KCkpLCBzdWJz
dGl0dXRlRGF0YS5taW1lVHlwZSgpLCBzdWJzdGl0dXRlRGF0YS50ZXh0RW5jb2RpbmcoKSwgc3Vi
c3RpdHV0ZURhdGEuZmFpbGluZ1VSTCgpLCBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS50cmFuc2Zv
cm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiAKICAgICAvLyBJ
bml0YXRlIHRoZSBsb2FkIGluIFdlYkNvcmUuCiAgICAgbV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LT5sb2FkZXIoKS5sb2FkKEZyYW1lTG9hZFJlcXVlc3QobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgp
LCByZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSkpOwpAQCAtMTE2Miw3ICsxMTY0LDcgQEAgdm9pZCBX
ZWJQYWdlOjpuYXZpZ2F0ZVRvVVJMV2l0aFNpbXVsYXRlZENsaWNrKGNvbnN0IFN0cmluZyYgdXJs
LCBJbnRQb2ludCBkb2N1bWUKIAogdm9pZCBXZWJQYWdlOjpzdG9wTG9hZGluZ0ZyYW1lKHVpbnQ2
NF90IGZyYW1lSUQpCiB7Ci0gICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVk
KCkud2ViRnJhbWUoZnJhbWVJRCk7CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xNjE2LDExICsxNjE4LDEyIEBAIHZvaWQgV2ViUGFnZTo6c2V0R2FwQmV0
d2VlblBhZ2VzKGRvdWJsZSBnYXApCiAKIHZvaWQgV2ViUGFnZTo6cG9zdEluamVjdGVkQnVuZGxl
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVc2VyRGF0YSYgdXNlckRh
dGEpCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6
c2hhcmVkKCkuaW5qZWN0ZWRCdW5kbGUoKTsKKyAgICBhdXRvJiB3ZWJQcm9jZXNzID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCk7CisgICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVkQnVuZGxlID0g
d2ViUHJvY2Vzcy5pbmplY3RlZEJ1bmRsZSgpOwogICAgIGlmICghaW5qZWN0ZWRCdW5kbGUpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGluamVjdGVkQnVuZGxlLT5kaWRSZWNlaXZlTWVzc2FnZVRv
UGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgV2ViUHJvY2Vzczo6c2hhcmVkKCkudHJhbnNmb3JtSGFu
ZGxlc1RvT2JqZWN0cyh1c2VyRGF0YS5vYmplY3QoKSkuZ2V0KCkpOworICAgIGluamVjdGVkQnVu
ZGxlLT5kaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSh0aGlzLCBtZXNzYWdlTmFtZSwgd2ViUHJvY2Vz
cy50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3RzKHVzZXJEYXRhLm9iamVjdCgpKS5nZXQoKSk7CiB9
CiAKICNpZiAhUExBVEZPUk0oSU9TKQpAQCAtMjE1NCw3ICsyMTU3LDcgQEAgdm9pZCBXZWJQYWdl
OjpkaXNwYXRjaFRvdWNoRXZlbnQoY29uc3QgV2ViVG91Y2hFdmVudCYgdG91Y2hFdmVudCwgYm9v
bCYgaGFuZGxlZCkKIHZvaWQgV2ViUGFnZTo6dG91Y2hFdmVudFN5bmMoY29uc3QgV2ViVG91Y2hF
dmVudCYgdG91Y2hFdmVudCwgYm9vbCYgaGFuZGxlZCkKIHsKICAgICBFdmVudERpc3BhdGNoZXI6
OlRvdWNoRXZlbnRRdWV1ZSBxdWV1ZWRFdmVudHM7Ci0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCku
ZXZlbnREaXNwYXRjaGVyKCkuZ2V0UXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlzLCBxdWV1
ZWRFdmVudHMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV2ZW50RGlzcGF0Y2hlcigp
LmdldFF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSgqdGhpcywgcXVldWVkRXZlbnRzKTsKICAgICBk
aXNwYXRjaEFzeW5jaHJvbm91c1RvdWNoRXZlbnRzKHF1ZXVlZEV2ZW50cyk7CiAKICAgICBkaXNw
YXRjaFRvdWNoRXZlbnQodG91Y2hFdmVudCwgaGFuZGxlZCk7CkBAIC0yMzMxLDcgKzIzMzQsNyBA
QCB2b2lkIFdlYlBhZ2U6OnVwZGF0ZUlzSW5XaW5kb3coYm9vbCBpc0luaXRpYWxTdGF0ZSkKICAg
ICAgICAgCiAgICAgICAgIC8vIFRoZSBXZWJQcm9jZXNzIGRvZXMgbm90IHlldCBrbm93IGFib3V0
IHRoaXMgcGFnZTsgbm8gbmVlZCB0byB0ZWxsIGl0IHdlJ3JlIGxlYXZpbmcgdGhlIHdpbmRvdy4K
ICAgICAgICAgaWYgKCFpc0luaXRpYWxTdGF0ZSkKLSAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNo
YXJlZCgpLnBhZ2VXaWxsTGVhdmVXaW5kb3cobV9wYWdlSUQpOworICAgICAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkucGFnZVdpbGxMZWF2ZVdpbmRvdyhtX3BhZ2VJRCk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgLy8gRGVmZXIgdGhlIGNhbGwgdG8gUGFnZTo6c2V0Q2FuU3RhcnRNZWRp
YSgpIHNpbmNlIGl0IGVuZHMgdXAgc2VuZGluZyBhIHN5bmNocm9ub3VzIG1lc3NhZ2UgdG8gdGhl
IFVJIHByb2Nlc3MKICAgICAgICAgLy8gaW4gb3JkZXIgdG8gZ2V0IHBsdWctaW4gY29ubmVjdGlv
bnMsIGFuZCB0aGUgVUkgcHJvY2VzcyB3aWxsIGJlIHdhaXRpbmcgZm9yIHRoZSBXZWIgcHJvY2Vz
cyB0byB1cGRhdGUgdGhlIGJhY2tpbmcKQEAgLTIzMzksNyArMjM0Miw3IEBAIHZvaWQgV2ViUGFn
ZTo6dXBkYXRlSXNJbldpbmRvdyhib29sIGlzSW5pdGlhbFN0YXRlKQogICAgICAgICBpZiAobV9t
YXlTdGFydE1lZGlhV2hlbkluV2luZG93KQogICAgICAgICAgICAgbV9zZXRDYW5TdGFydE1lZGlh
VGltZXIuc3RhcnRPbmVTaG90KDApOwogCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLnBh
Z2VEaWRFbnRlcldpbmRvdyhtX3BhZ2VJRCk7CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnBhZ2VEaWRFbnRlcldpbmRvdyhtX3BhZ2VJRCk7CiAgICAgfQogCiAgICAgaWYgKGlzSW5X
aW5kb3cpCkBAIC0yMzc3LDEzICsyMzgwLDEzIEBAIHZvaWQgV2ViUGFnZTo6c2V0TGF5ZXJIb3N0
aW5nTW9kZSh1bnNpZ25lZCBsYXllckhvc3RpbmdNb2RlKQogdm9pZCBXZWJQYWdlOjpzZXRTZXNz
aW9uSUQoU2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1l
cmFsKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmVuc3VyZVByaXZhdGVCcm93c2lu
Z1Nlc3Npb24oc2Vzc2lvbklEKTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihzZXNzaW9uSUQpOwogICAgIG1fcGFnZS0+c2V0U2Vz
c2lvbklEKHNlc3Npb25JRCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZVBvbGljeURl
Y2lzaW9uKHVpbnQ2NF90IGZyYW1lSUQsIHVpbnQ2NF90IGxpc3RlbmVySUQsIHVpbnQzMl90IHBv
bGljeUFjdGlvbiwgdWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBkb3dubG9hZElEKQog
ewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZy
YW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLndl
YkZyYW1lKGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKICAgICBm
cmFtZS0+ZGlkUmVjZWl2ZVBvbGljeURlY2lzaW9uKGxpc3RlbmVySUQsIHN0YXRpY19jYXN0PFBv
bGljeUFjdGlvbj4ocG9saWN5QWN0aW9uKSwgbmF2aWdhdGlvbklELCBkb3dubG9hZElEKTsKQEAg
LTI0OTUsNyArMjQ5OCw3IEBAIEludFJlY3QgV2ViUGFnZTo6d2luZG93UmVzaXplclJlY3QoKSBj
b25zdAogCiBLZXlib2FyZFVJTW9kZSBXZWJQYWdlOjprZXlib2FyZFVJTW9kZSgpCiB7Ci0gICAg
Ym9vbCBmdWxsS2V5Ym9hcmRBY2Nlc3NFbmFibGVkID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkuZnVs
bEtleWJvYXJkQWNjZXNzRW5hYmxlZCgpOworICAgIGJvb2wgZnVsbEtleWJvYXJkQWNjZXNzRW5h
YmxlZCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmZ1bGxLZXlib2FyZEFjY2Vzc0VuYWJsZWQo
KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRVSU1vZGU+KChmdWxsS2V5Ym9hcmRB
Y2Nlc3NFbmFibGVkID8gS2V5Ym9hcmRBY2Nlc3NGdWxsIDogS2V5Ym9hcmRBY2Nlc3NEZWZhdWx0
KSB8IChtX3RhYlRvTGlua3MgPyBLZXlib2FyZEFjY2Vzc1RhYnNUb0xpbmtzIDogMCkpOwogfQog
CkBAIC0yNTgxLDcgKzI1ODQsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFNlbGVjdGlvbk9yQ29udGVu
dHNBc1N0cmluZyh1aW50NjRfdCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpnZXRTb3VyY2VG
b3JGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIFN0
cmluZyByZXN1bHRTdHJpbmc7Ci0gICAgaWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6
OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1lSUQpKQorICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53ZWJGcmFtZShmcmFtZUlEKSkKICAgICAgICByZXN1bHRT
dHJpbmcgPSBmcmFtZS0+c291cmNlKCk7CiAKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlN0cmluZ0NhbGxiYWNrKHJlc3VsdFN0cmluZywgY2FsbGJhY2tJRCkpOwpAQCAtMjU5MCw3
ICsyNTkzLDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRTb3VyY2VGb3JGcmFtZSh1aW50NjRfdCBmcmFt
ZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQogdm9pZCBXZWJQYWdlOjpnZXRNYWluUmVzb3VyY2VE
YXRhT2ZGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKLSAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0g
V2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsKKyAgICBpZiAoV2ViRnJh
bWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsK
ICAgICAgICAgaWYgKFBsdWdpblZpZXcqIHBsdWdpblZpZXcgPSBwbHVnaW5WaWV3Rm9yRnJhbWUo
ZnJhbWUtPmNvcmVGcmFtZSgpKSkKICAgICAgICAgICAgIGJ1ZmZlciA9IHBsdWdpblZpZXctPmxp
dmVSZXNvdXJjZURhdGEoKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsKQEAgLTI2MjIsNyArMjYy
NSw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVzb3VyY2VEYXRhRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHJlCiB2b2lkIFdlYlBhZ2U6OmdldFJlc291cmNl
RGF0YUZyb21GcmFtZSh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBTdHJpbmcmIHJlc291cmNlVVJM
U3RyaW5nLCB1aW50NjRfdCBjYWxsYmFja0lEKQogewogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlcjsKLSAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCku
d2ViRnJhbWUoZnJhbWVJRCkpIHsKKyAgICBpZiAoV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkud2ViRnJhbWUoZnJhbWVJRCkpIHsKICAgICAgICAgVVJMIHJlc291cmNl
VVJMKFVSTCgpLCByZXNvdXJjZVVSTFN0cmluZyk7CiAgICAgICAgIGJ1ZmZlciA9IHJlc291cmNl
RGF0YUZvckZyYW1lKGZyYW1lLT5jb3JlRnJhbWUoKSwgcmVzb3VyY2VVUkwpOwogICAgICAgICBp
ZiAoIWJ1ZmZlcikgewpAQCAtMjY0Miw3ICsyNjQ1LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRXZWJB
cmNoaXZlT2ZGcmFtZSh1aW50NjRfdCBmcmFtZUlELCB1aW50NjRfdCBjYWxsYmFja0lEKQogewog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGE7Ci0gICAg
aWYgKFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1lKGZyYW1l
SUQpKQorICAgIGlmIChXZWJGcmFtZSogZnJhbWUgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS53
ZWJGcmFtZShmcmFtZUlEKSkKICAgICAgICAgZGF0YSA9IGZyYW1lLT53ZWJBcmNoaXZlRGF0YShu
dWxscHRyLCBudWxscHRyKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lSUQpOwpAQCAt
Mzc2OCw3ICszNzcxLDcgQEAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBXZWJQYWdlOjpwZGZEb2N1
bWVudEZvclByaW50aW5nRnJhbWUoRnJhbWUqIGNvcmVGcmFtZSkKIAogdm9pZCBXZWJQYWdlOjpi
ZWdpblByaW50aW5nKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZv
KQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1l
KGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYkZyYW1lKGZyYW1lSUQpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMzgzMyw3ICszODM2LDcgQEAgdm9pZCBXZWJQYWdlOjpjb21wdXRlUGFnZXNGb3JQcmludGlu
Z0ltcGwodWludDY0X3QgZnJhbWVJRCwgY29uc3QgUHJpbnRJbmZvJiBwcmkKICNpZiBQTEFURk9S
TShDT0NPQSkKIHZvaWQgV2ViUGFnZTo6ZHJhd1JlY3RUb0ltYWdlKHVpbnQ2NF90IGZyYW1lSUQs
IGNvbnN0IFByaW50SW5mbyYgcHJpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBpbWFnZVNpemUsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiB7Ci0gICAg
V2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViRnJhbWUoZnJhbWVJRCk7
CisgICAgV2ViRnJhbWUqIGZyYW1lID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkud2ViRnJhbWUo
ZnJhbWVJRCk7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGZyYW1lID8gZnJhbWUtPmNvcmVGcmFt
ZSgpIDogMDsKIAogICAgIFJlZlB0cjxXZWJJbWFnZT4gaW1hZ2U7CkBAIC0zODg1LDcgKzM4ODgs
NyBAQCB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1RvUERGKHVpbnQ2NF90IGZyYW1lSUQsIGNvbnN0
IFByaW50SW5mbyYgcHJpbnRJbmZvLCB1aW50MwogCiB2b2lkIFdlYlBhZ2U6OmRyYXdQYWdlc1Rv
UERGSW1wbCh1aW50NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgdWlu
dDMyX3QgZmlyc3QsIHVpbnQzMl90IGNvdW50LCBSZXRhaW5QdHI8Q0ZNdXRhYmxlRGF0YVJlZj4m
IHBkZlBhZ2VEYXRhKQogewotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLndlYkZyYW1lKGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLndlYkZyYW1lKGZyYW1lSUQpOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBm
cmFtZSA/IGZyYW1lLT5jb3JlRnJhbWUoKSA6IDA7CiAKICAgICBwZGZQYWdlRGF0YSA9IGFkb3B0
Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAwKSk7CkBAIC00NTQ5LDcgKzQ1NTIsNyBAQCB2b2lk
IFdlYlBhZ2U6OmRpZENvbW1pdExvYWQoV2ViRnJhbWUqIGZyYW1lKQogICAgIGNhbmNlbFBvdGVu
dGlhbFRhcCgpOwogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCi0gICAgV2ViUHJvY2Vz
czo6c2hhcmVkKCkuZXZlbnREaXNwYXRjaGVyKCkuY2xlYXJRdWV1ZWRUb3VjaEV2ZW50c0ZvclBh
Z2UoKnRoaXMpOworICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmV2ZW50RGlzcGF0Y2hlcigp
LmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlzKTsKICNlbmRpZgogCiAgICAgcmVz
ZXRWaWV3cG9ydERlZmF1bHRDb25maWd1cmF0aW9uKGZyYW1lKTsKQEAgLTQ1NjMsNyArNDU2Niw3
IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFtZSogZnJhbWUpCiAgICAgcmVz
ZXRQcmltYXJ5U25hcHNob3R0ZWRQbHVnSW4oKTsKICNlbmRpZgogCi0gICAgV2ViUHJvY2Vzczo6
c2hhcmVkKCkudXBkYXRlQWN0aXZlUGFnZXMoKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS51cGRhdGVBY3RpdmVQYWdlcygpOwogCiAgICAgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsT2Zmc2V0
UGlubmluZygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKaW5kZXggNjQwNTJlYzkzNGVmNTkwMDY4YzUxOTlk
MmNkZmVjNDcwNmFmZTczNS4uZWUyMjM1YTI4Y2VmYmYyNDQwMWYyN2RhOTJjOTFmOWQ1NjAzMTQ0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VH
cm91cFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZUdyb3VwUHJveHkuY3BwCkBAIC0zOCw4ICszOCw4IEBAIFBhc3NSZWZQdHI8V2ViUGFnZUdy
b3VwUHJveHk+IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0
YSYKIHsKICAgICBSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+IHBhZ2VHcm91cCA9IGFkb3B0UmVm
KG5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAgICAgCi0gICAgaWYgKHBhZ2VHcm91cC0+
aXNWaXNpYmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVj
dGVkQnVuZGxlKCkpCi0gICAgICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxl
KCktPmRpZEluaXRpYWxpemVQYWdlR3JvdXAocGFnZUdyb3VwLmdldCgpKTsKKyAgICBpZiAocGFn
ZUdyb3VwLT5pc1Zpc2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuaW5qZWN0ZWRCdW5kbGUoKSkKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
aW5qZWN0ZWRCdW5kbGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAuZ2V0KCkp
OwogCiAgICAgcmV0dXJuIHBhZ2VHcm91cC5yZWxlYXNlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuY3BwCmlu
ZGV4IGMzZTM2NGI2NGU4MmYwMmI1NDlhOWVkZTE5MzQ5ODdhMjA1MDM5NWUuLjliMzlhZjcyNDQ2
YmM5ZGJlMzJmN2ZlNGMwZDJjZWE3NGQ3NWU3ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuY3BwCkBAIC0zNCw3
ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBQcmludGVyTGlzdEd0ayogUHJpbnRlckxp
c3RHdGs6OnNfc2hhcmVkUHJpbnRlckxpc3QgPSBudWxscHRyOwogCi1SZWZQdHI8UHJpbnRlckxp
c3RHdGs+IFByaW50ZXJMaXN0R3RrOjpzaGFyZWQoKQorUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBQ
cmludGVyTGlzdEd0azo6c2luZ2xldG9uKCkKIHsKICAgICBpZiAoc19zaGFyZWRQcmludGVyTGlz
dCkKICAgICAgICAgcmV0dXJuIHNfc2hhcmVkUHJpbnRlckxpc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1ByaW50ZXJMaXN0R3RrLmgKaW5kZXgg
NWE0NjZmNDdkMTAwYjQ5YzBlZTVhYTU5ZDI1ODg4ODg1ZTkxZmRhMS4uZmFiYTgyY2VmNzk5YWY0
MWIzNjAyNTgzYzUyZWNjNzBkNTZhMDAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL2d0ay9QcmludGVyTGlzdEd0ay5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvUHJpbnRlckxpc3RHdGsuaApAQCAtMzgsNyArMzgsNyBA
QCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUHJpbnRlckxpc3RHdGs6IHB1YmxpYyBSZWZD
b3VudGVkPFByaW50ZXJMaXN0R3RrPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxQcmlu
dGVyTGlzdEd0az4gc2hhcmVkKCk7CisgICAgc3RhdGljIFJlZlB0cjxQcmludGVyTGlzdEd0az4g
c2luZ2xldG9uKCk7CiAgICAgflByaW50ZXJMaXN0R3RrKCk7CiAKICAgICBHdGtQcmludGVyKiBm
aW5kUHJpbnRlcihjb25zdCBjaGFyKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlByaW50T3BlcmF0aW9uR3RrLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3Bw
CmluZGV4IDIzMzI2YjQwYzU3ZmVlOTMxNGI1NThiNDdiZGQ5OGE0MjE5MzAwZmUuLjk4NTkyOThl
ZjM4ODUzMWE2Mzc4NWQ3YzZiM2MwYjQ3NTNhNmM5NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25HdGsuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUHJpbnRPcGVyYXRpb25H
dGsuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9wcmludENvbnRleHQg
PSBwcmludENvbnRleHQ7CiAgICAgICAgIG1fY2FsbGJhY2tJRCA9IGNhbGxiYWNrSUQ7CiAKLSAg
ICAgICAgUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBwcmludGVyTGlzdCA9IFByaW50ZXJMaXN0R3Rr
OjpzaGFyZWQoKTsKKyAgICAgICAgUmVmUHRyPFByaW50ZXJMaXN0R3RrPiBwcmludGVyTGlzdCA9
IFByaW50ZXJMaXN0R3RrOjpzaW5nbGV0b24oKTsKICAgICAgICAgY29uc3QgY2hhciogcHJpbnRl
ck5hbWUgPSBndGtfcHJpbnRfc2V0dGluZ3NfZ2V0X3ByaW50ZXIobV9wcmludFNldHRpbmdzLmdl
dCgpKTsKICAgICAgICAgR3RrUHJpbnRlciogcHJpbnRlciA9IHByaW50ZXJOYW1lID8gcHJpbnRl
ckxpc3QtPmZpbmRQcmludGVyKHByaW50ZXJOYW1lKSA6IHByaW50ZXJMaXN0LT5kZWZhdWx0UHJp
bnRlcigpOwogICAgICAgICBpZiAoIXByaW50ZXIpIHsKQEAgLTE0OSwxMyArMTQ5LDEzIEBAIHB1
YmxpYzoKICAgICBzdGF0aWMgdm9pZCBwcmludEpvYkZpbmlzaGVkKFdlYlByaW50T3BlcmF0aW9u
R3RrVW5peCogcHJpbnRPcGVyYXRpb24pCiAgICAgewogICAgICAgICBwcmludE9wZXJhdGlvbi0+
ZGVyZWYoKTsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZW5hYmxlVGVybWluYXRpb24o
KTsKKyAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5hYmxlVGVybWluYXRpb24oKTsK
ICAgICB9CiAKICAgICB2b2lkIGVuZFByaW50KCkgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIC8v
IERpc2FibGUgd2ViIHByb2Nlc3MgdGVybWluYXRpb24gdW50aWwgdGhlIHByaW50IGpvYiBmaW5p
c2hlcy4KLSAgICAgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuZGlzYWJsZVRlcm1pbmF0aW9uKCk7
CisgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmRpc2FibGVUZXJtaW5hdGlvbigpOwog
CiAgICAgICAgIGNhaXJvX3N1cmZhY2VfZmluaXNoKGd0a19wcmludF9qb2JfZ2V0X3N1cmZhY2Uo
bV9wcmludEpvYi5nZXQoKSwgMCkpOwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIG9wZXJhdGlv
biBpcyBhbGl2ZSB1bnRpbCB0aGUgam9iIGlzIHNlbnQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggYTg5NWJjNWQ2OTQ2
NzhjMGMwNDRmODE3ZjYxMzIyMGUzOTZlN2M0Yi4uYjk4NzlhYmI3YTQzNTRkNWU0ZGQ2YTJhZjdh
YmQ5ZTBlMDViYjRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjgxLDcgKzI4MSw3IEBAIGJvb2wgV2ViUGFnZTo6
aGFuZGxlRWRpdGluZ0tleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCogZXZlbnQpCiAKICAgICAv
LyBGSVhNRTogSW50ZXJwcmV0IHRoZSBldmVudCBpbW1lZGlhdGVseSB1cG9uIHJlY2VpdmluZyBp
dCBpbiBVSSBwcm9jZXNzLCB3aXRob3V0IHNlbmRpbmcgdG8gV2ViUHJvY2VzcyBmaXJzdC4KICAg
ICBib29sIGV2ZW50V2FzSGFuZGxlZCA9IGZhbHNlOwotICAgIGJvb2wgc2VuZFJlc3VsdCA9IFdl
YlByb2Nlc3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1l
c3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldEtleUV2ZW50KGVkaXRvclN0YXRlKCksIHBs
YXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OkNoYXIpLAorICAg
IGJvb2wgc2VuZFJlc3VsdCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3ND
b25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkludGVycHJldEtl
eUV2ZW50KGVkaXRvclN0YXRlKCksIHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQ6OkNoYXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OkludGVycHJldEtleUV2ZW50OjpSZXBseShldmVudFdhc0hhbmRsZWQpLCBtX3Bh
Z2VJRCk7CiAgICAgaWYgKCFzZW5kUmVzdWx0KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0y
Mjc3LDcgKzIyNzcsNyBAQCB2b2lkIFdlYlBhZ2U6OmVsZW1lbnREaWRGb2N1cyhXZWJDb3JlOjpO
b2RlKiBub2RlKQogICAgICAgICBpZiAobV91c2VySXNJbnRlcmFjdGluZykKICAgICAgICAgICAg
IG1fZm9ybUNsaWVudC0+d2lsbEJlZ2luSW5wdXRTZXNzaW9uKHRoaXMsIGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpLCBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFtZSgqbm9kZS0+ZG9jdW1lbnQoKS5mcmFt
ZSgpKSwgdXNlckRhdGEpOwogCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U3RhcnRBc3Npc3RpbmdOb2RlKGluZm9ybWF0aW9uLCBtX3VzZXJJc0ludGVyYWN0aW5nLCBtX2hh
c1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpzaGFyZWQoKS50
cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkpKTsKKyAgICAg
ICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdGFydEFzc2lzdGluZ05vZGUoaW5mb3Jt
YXRpb24sIG1fdXNlcklzSW50ZXJhY3RpbmcsIG1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb24s
IFVzZXJEYXRhKFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRs
ZXModXNlckRhdGEuZ2V0KCkpLmdldCgpKSkpOwogICAgICAgICBtX2hhc1BlbmRpbmdCbHVyTm90
aWZpY2F0aW9uID0gZmFsc2U7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0gYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbQppbmRleCBkMDRlM2M3NGI3NDA5NDA0N2UxYjUwNmQ2NzAxYzA5MDhiMDhhNTJh
Li4xZWY5YTk5MTExNzlmMzkxNTUzZTliNmI3MTgwNmZhOTU2MGM1Yzc1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQpAQCAtNTksNyArNTksNyBAQCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b206OlBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbShMYXllclR5cGUg
bGF5ZXJUeXBlLCBQbAogewogICAgIHN3aXRjaCAoY29udGV4dC5sYXllckhvc3RpbmdNb2RlKCkp
IHsKICAgICBjYXNlIExheWVySG9zdGluZ01vZGU6OkluUHJvY2VzczoKLSAgICAgICAgbV9sYXll
ckhvc3RpbmdDb250ZXh0ID0gTGF5ZXJIb3N0aW5nQ29udGV4dDo6Y3JlYXRlRm9yUG9ydChXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5jb21wb3NpdGluZ1JlbmRlclNlcnZlclBvcnQoKSk7CisgICAgICAg
IG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGluZ0NvbnRleHQ6OmNyZWF0ZUZvclBv
cnQoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuY29tcG9zaXRpbmdSZW5kZXJTZXJ2ZXJQb3J0KCkp
OwogICAgICAgICBicmVhazsKICNpZiBIQVZFKE9VVF9PRl9QUk9DRVNTX0xBWUVSX0hPU1RJTkcp
CiAgICAgY2FzZSBMYXllckhvc3RpbmdNb2RlOjpPdXRPZlByb2Nlc3M6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCBmMTMxZDVlMmYwODI0YmI1MjQ4MzM1MTk2ZjBi
Y2NjNjI2NjAxZWFjLi5hNzU0OTA3ZmE5NDA3ZmUyYTRlMmEyZmFiMGQxNGUxOGM0OWU1ZDExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KQEAgLTM5MywxNCArMzkzLDE0
IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5ZXJzKCkKICAgICBp
ZiAoaGFkQW55Q2hhbmdlZEJhY2tpbmdTdG9yZSkKICAgICAgICAgYmFja2luZ1N0b3JlQ29sbGVj
dGlvbi5zY2hlZHVsZVZvbGF0aWxpdHlUaW1lcigpOwogCi0gICAgUmVmUHRyPEJhY2tpbmdTdG9y
ZUZsdXNoZXI+IGJhY2tpbmdTdG9yZUZsdXNoZXIgPSBCYWNraW5nU3RvcmVGbHVzaGVyOjpjcmVh
dGUoV2ViUHJvY2Vzczo6c2hhcmVkKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKSwgV1RGOjpt
b3ZlKGNvbW1pdEVuY29kZXIpLCBXVEY6Om1vdmUoY29udGV4dHNUb0ZsdXNoKSk7CisgICAgUmVm
UHRyPEJhY2tpbmdTdG9yZUZsdXNoZXI+IGJhY2tpbmdTdG9yZUZsdXNoZXIgPSBCYWNraW5nU3Rv
cmVGbHVzaGVyOjpjcmVhdGUoV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nv
bm5lY3Rpb24oKSwgV1RGOjptb3ZlKGNvbW1pdEVuY29kZXIpLCBXVEY6Om1vdmUoY29udGV4dHNU
b0ZsdXNoKSk7CiAgICAgbV9wZW5kaW5nQmFja2luZ1N0b3JlRmx1c2hlciA9IGJhY2tpbmdTdG9y
ZUZsdXNoZXI7CiAKICAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBhZ2UucGFnZUlEKCk7CiAg
ICAgZGlzcGF0Y2hfYXN5bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdTdG9yZUZsdXNoZXIsIHBh
Z2VJRF0gewogICAgICAgICBiYWNraW5nU3RvcmVGbHVzaGVyLT5mbHVzaCgpOwogCi0gICAgICAg
IGlmIChXZWJQYWdlICp3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCkud2ViUGFnZShwYWdl
SUQpKSB7CisgICAgICAgIGlmIChXZWJQYWdlICp3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkud2ViUGFnZShwYWdlSUQpKSB7CiAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVzdGFtcCA9IHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHMoc3RhdGljX2Nhc3Q8
c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kczo6cmVwPihtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSAqIDEwMDApKTsKICAgICAgICAgICAgIGRpc3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9t
YWluX3F1ZXVlKCksIF57CiAgICAgICAgICAgICAgICAgd2ViUGFnZS0+ZGlkRmx1c2hMYXllclRy
ZWVBdFRpbWUodGltZXN0YW1wKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCmluZGV4IDJmNDViMmY0YjU5NWM1MDViODQ2Y2VhZjgyZjM4MTY2MDFkMDQwZWQuLjY3
ODM3OTc3NGFhN2M3ZWU4ZTMwNjliMzU2ZGZiMmQwNzQ5YWEwZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2lu
Z0FyZWEubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQpAQCAtNDgyLDcgKzQ4Miw3IEBAIHZvaWQgVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZUxheWVySG9zdGluZ0NvbnRleHQoKQog
ICAgIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IGFuZCBzZXQgaXQgdXAuCiAgICAgc3dpdGNoICht
X3dlYlBhZ2UubGF5ZXJIb3N0aW5nTW9kZSgpKSB7CiAgICAgY2FzZSBMYXllckhvc3RpbmdNb2Rl
OjpJblByb2Nlc3M6Ci0gICAgICAgIG1fbGF5ZXJIb3N0aW5nQ29udGV4dCA9IExheWVySG9zdGlu
Z0NvbnRleHQ6OmNyZWF0ZUZvclBvcnQoV2ViUHJvY2Vzczo6c2hhcmVkKCkuY29tcG9zaXRpbmdS
ZW5kZXJTZXJ2ZXJQb3J0KCkpOworICAgICAgICBtX2xheWVySG9zdGluZ0NvbnRleHQgPSBMYXll
ckhvc3RpbmdDb250ZXh0OjpjcmVhdGVGb3JQb3J0KFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmNv
bXBvc2l0aW5nUmVuZGVyU2VydmVyUG9ydCgpKTsKICAgICAgICAgYnJlYWs7CiAjaWYgSEFWRShP
VVRfT0ZfUFJPQ0VTU19MQVlFUl9IT1NUSU5HKQogICAgIGNhc2UgTGF5ZXJIb3N0aW5nTW9kZTo6
T3V0T2ZQcm9jZXNzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IDRkYjZhYjc3MTdkZGJjYzUzMjQxZjczYzA4ZDdjYjk1
MDYxYmJjNWYuLmUyZjY2NzViMTNhZWEyNWZiNjcwMDc5ZmRkMDhlOTEzN2UzNDg4YzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KQEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtSW5pdGlhbGl6ZSgp
CiAgICAgV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCogbW9ja0FjY2Vzc2liaWxpdHlFbGVt
ZW50ID0gW1tbV0tBY2Nlc3NpYmlsaXR5V2ViUGFnZU9iamVjdCBhbGxvY10gaW5pdF0gYXV0b3Jl
bGVhc2VdOwogCiAgICAgLy8gR2V0IHRoZSBwaWQgZm9yIHRoZSBzdGFydGluZyBwcm9jZXNzLgot
ICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLnByZXNlbnRlckFwcGxpY2F0aW9u
UGlkKCk7ICAgIAorICAgIHBpZF90IHBpZCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnByZXNl
bnRlckFwcGxpY2F0aW9uUGlkKCk7CiAgICAgV0tBWEluaXRpYWxpemVFbGVtZW50V2l0aFByZXNl
bnRlclBpZChtb2NrQWNjZXNzaWJpbGl0eUVsZW1lbnQsIHBpZCk7CiAgICAgW21vY2tBY2Nlc3Np
YmlsaXR5RWxlbWVudCBzZXRXZWJQYWdlOnRoaXNdOwogICAgIApAQCAtMjEyLDcgKzIxMiw3IEBA
IGJvb2wgV2ViUGFnZTo6ZXhlY3V0ZUtleXByZXNzQ29tbWFuZHNJbnRlcm5hbChjb25zdCBWZWN0
b3I8V2ViQ29yZTo6S2V5cHJlc3NDb21tCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICBib29sIGNvbW1hbmRXYXNIYW5kbGVkQnlVSVByb2Nl
c3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJlbnRQ
cm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kU3luYyhNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFeGVj
dXRlU2F2ZWRDb21tYW5kQnlTZWxlY3Rvcihjb21tYW5kc1tpXS5jb21tYW5kTmFtZSksIAorICAg
ICAgICAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0
aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkV4ZWN1dGVTYXZlZENvbW1h
bmRCeVNlbGVjdG9yKGNvbW1hbmRzW2ldLmNvbW1hbmROYW1lKSwKICAgICAgICAgICAgICAgICAg
ICAgTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RXhlY3V0ZVNhdmVkQ29tbWFuZEJ5U2VsZWN0b3I6
OlJlcGx5KGNvbW1hbmRXYXNIYW5kbGVkQnlVSVByb2Nlc3MpLCBtX3BhZ2VJRCk7CiAgICAgICAg
ICAgICAgICAgZXZlbnRXYXNIYW5kbGVkIHw9IGNvbW1hbmRXYXNIYW5kbGVkQnlVSVByb2Nlc3M7
CiAgICAgICAgICAgICB9CkBAIC04MTUsNyArODE1LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVI
ZWFkZXJBbmRGb290ZXJMYXllcnNGb3JEZXZpY2VTY2FsZUNoYW5nZShmbG9hdCBzY2FsZUZhY3Rv
cikKIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZVBhZ2VzRm9yUHJpbnRpbmdQREZEb2N1bWVudCh1aW50
NjRfdCBmcmFtZUlELCBjb25zdCBQcmludEluZm8mIHByaW50SW5mbywgVmVjdG9yPEludFJlY3Q+
JiByZXN1bHRQYWdlUmVjdHMpCiB7CiAgICAgQVNTRVJUKHJlc3VsdFBhZ2VSZWN0cy5pc0VtcHR5
KCkpOwotICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNoYXJlZCgpLndlYkZyYW1l
KGZyYW1lSUQpOworICAgIFdlYkZyYW1lKiBmcmFtZSA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LndlYkZyYW1lKGZyYW1lSUQpOwogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBmcmFtZSA/IGZyYW1l
LT5jb3JlRnJhbWUoKSA6IDA7CiAgICAgUmV0YWluUHRyPFBERkRvY3VtZW50PiBwZGZEb2N1bWVu
dCA9IGNvcmVGcmFtZSA/IHBkZkRvY3VtZW50Rm9yUHJpbnRpbmdGcmFtZShjb3JlRnJhbWUpIDog
MDsKICAgICBpZiAoW3BkZkRvY3VtZW50IGFsbG93c1ByaW50aW5nXSkgewpAQCAtMTA4MSw3ICsx
MDgxLDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtQWN0aW9uTWVudUhpdFRlc3RBdExvY2F0aW9u
KFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb25JblYKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+
IHVzZXJEYXRhOwogICAgIGluamVjdGVkQnVuZGxlQ29udGV4dE1lbnVDbGllbnQoKS5wcmVwYXJl
Rm9yQWN0aW9uTWVudSgqdGhpcywgaGl0VGVzdFJlc3VsdCwgdXNlckRhdGEpOwogCi0gICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3JtQWN0aW9uTWVudUhpdFRlc3QoYWN0
aW9uTWVudVJlc3VsdCwgZm9ySW1tZWRpYXRlQWN0aW9uLCBVc2VyRGF0YShXZWJQcm9jZXNzOjpz
aGFyZWQoKS50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKHVzZXJEYXRhLmdldCgpKS5nZXQoKSkp
KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1BY3Rpb25NZW51
SGl0VGVzdChhY3Rpb25NZW51UmVzdWx0LCBmb3JJbW1lZGlhdGVBY3Rpb24sIFVzZXJEYXRhKFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXModXNlckRhdGEu
Z2V0KCkpLmdldCgpKSkpOwogfQogCiBQYXNzUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBXZWJQYWdl
Ojpsb29rdXBUZXh0QXRMb2NhdGlvbihGbG9hdFBvaW50IGxvY2F0aW9uSW5WaWV3Q29vb3JkaW5h
dGVzLCBOU0RpY3Rpb25hcnkgKipvcHRpb25zKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggOTYxNmIwMGQ5ZjY2MTIwMDI4YzczMzc5OTQwMGE5NGVkZGEzMDNk
OS4uZjVhOTczZDhlOGJiMDRjZmViN2ExMmIyNGU4ZDk5MDBlODg1ODk2ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBub25WaXNpYmxlUHJvY2Vzc0NsZWFudXBEZWxheSA9IDEwOwogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotV2ViUHJvY2VzcyYgV2ViUHJvY2Vzczo6c2hhcmVkKCkKK1dlYlBy
b2Nlc3MmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpCiB7CiAgICAgc3RhdGljIFdlYlByb2Nlc3Mm
IHByb2Nlc3MgPSAqbmV3IFdlYlByb2Nlc3M7CiAgICAgcmV0dXJuIHByb2Nlc3M7CkBAIC0yMzEs
NyArMjMxLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb24qIGNvbm5lY3Rpb24pCiAjZW5kaWYKIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElN
KQotICAgIFNlY0l0ZW1TaGltOjpzaGFyZWQoKS5pbml0aWFsaXplQ29ubmVjdGlvbihjb25uZWN0
aW9uKTsKKyAgICBTZWNJdGVtU2hpbTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZUNvbm5lY3Rpb24o
Y29ubmVjdGlvbik7CiAjZW5kaWYKICAgICAKICAgICBXZWJQcm9jZXNzU3VwcGxlbWVudE1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N1cHBsZW1lbnRzLmJlZ2luKCk7CkBAIC0zNTMsNyArMzUz
LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjppbml0aWFsaXplV2ViUHJvY2VzcyhXZWJQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJiYgcGFyYW1ldGVycykKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IGlmICh1c2VzTmV0d29ya1Byb2Nlc3MoKSkKLSAgICAgICAgQ29va2llU3RvcmFnZVNoaW06OnNo
YXJlZCgpLmluaXRpYWxpemUoKTsKKyAgICAgICAgQ29va2llU3RvcmFnZVNoaW06OnNpbmdsZXRv
bigpLmluaXRpYWxpemUoKTsKICNlbmRpZgogI2VuZGlmCiAgICAgc2V0VGVybWluYXRpb25UaW1l
b3V0KHBhcmFtZXRlcnMudGVybWluYXRpb25UaW1lb3V0KTsKQEAgLTM3Miw3ICszNzIsNyBAQCB2
b2lkIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzKFdlYlByb2Nlc3NDcmVhdGlvblBh
cmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQogICAgIGF1ZGl0X3Rva2VuX3QgYXVkaXRUb2tlbjsKICAg
ICBpZiAocGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+Z2V0QXVkaXRUb2tlbihhdWRpdFRva2Vu
KSkgewogICAgICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBhdWRpdERhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZShudWxscHRyLCAoY29uc3QgVUludDgqKSZhdWRpdFRva2VuLCBzaXplb2YoYXVk
aXRUb2tlbikpKTsKLSAgICAgICAgSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3I6OnNoYXJlZCgp
LnNldFBhcmVudFByb2Nlc3NJbmZvcm1hdGlvbihwcmVzZW50ZXJBcHBsaWNhdGlvblBpZCgpLCBh
dWRpdERhdGEpOworICAgICAgICBJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3Rvcjo6c2luZ2xldG9u
KCkuc2V0UGFyZW50UHJvY2Vzc0luZm9ybWF0aW9uKHByZXNlbnRlckFwcGxpY2F0aW9uUGlkKCks
IGF1ZGl0RGF0YSk7CiAgICAgfQogI2VuZGlmCiB9CkBAIC03MDgsNyArNzA4LDcgQEAgdm9pZCBX
ZWJQcm9jZXNzOjpjbGVhclJlc291cmNlQ2FjaGVzKFJlc291cmNlQ2FjaGVzVG9DbGVhciByZXNv
dXJjZUNhY2hlc1RvQ2xlYXIKICAgICBtZW1vcnlDYWNoZSgpLmV2aWN0UmVzb3VyY2VzKCk7CiAK
ICAgICAvLyBFbXB0eSB0aGUgY3Jvc3Mtb3JpZ2luIHByZWZsaWdodCBjYWNoZS4KLSAgICBDcm9z
c09yaWdpblByZWZsaWdodFJlc3VsdENhY2hlOjpzaGFyZWQoKS5lbXB0eSgpOworICAgIENyb3Nz
T3JpZ2luUHJlZmxpZ2h0UmVzdWx0Q2FjaGU6OnNpbmdsZXRvbigpLmVtcHR5KCk7CiB9CiAKIHZv
aWQgV2ViUHJvY2Vzczo6Y2xlYXJBcHBsaWNhdGlvbkNhY2hlKCkKQEAgLTk1MSw3ICs5NTEsNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OnNldEphdmFTY3JpcHRHYXJiYWdlQ29sbGVjdG9yVGltZXJFbmFi
bGVkKGJvb2wgZmxhZykKIAogdm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVJbmplY3RlZEJ1bmRsZU1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlTmFtZSwgY29uc3QgVXNlckRhdGEmIG1lc3NhZ2VC
b2R5KQogewotICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlByb2Nlc3M6
OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCk7CisgICAgSW5qZWN0ZWRCdW5kbGUqIGluamVjdGVk
QnVuZGxlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKTsKICAgICBp
ZiAoIWluamVjdGVkQnVuZGxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTk2MCw3ICs5NjAsNyBA
QCB2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZUluamVjdGVkQnVuZGxlTWVzc2FnZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2VOYW1lLCBjb25zdCBVcwogCiB2b2lkIFdlYlByb2Nlc3M6OnNldEluamVjdGVk
QnVuZGxlUGFyYW1ldGVyKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBJUEM6OkRhdGFSZWZlcmVu
Y2UmIHZhbHVlKQogewotICAgIEluamVjdGVkQnVuZGxlKiBpbmplY3RlZEJ1bmRsZSA9IFdlYlBy
b2Nlc3M6OnNoYXJlZCgpLmluamVjdGVkQnVuZGxlKCk7CisgICAgSW5qZWN0ZWRCdW5kbGUqIGlu
amVjdGVkQnVuZGxlID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5kbGUoKTsK
ICAgICBpZiAoIWluamVjdGVkQnVuZGxlKQogICAgICAgICByZXR1cm47CiAKQEAgLTEwNzksNyAr
MTA3OSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6c2V0RW5oYW5jZWRBY2Nlc3NpYmlsaXR5KGJvb2wg
ZmxhZykKIHZvaWQgV2ViUHJvY2Vzczo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSYgc2FtcGxlTG9nRmlsZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBzYW1w
bGVMb2dGaWxlUGF0aCwgY29uc3QgZG91YmxlIGludGVydmFsKQogewogI2lmIEVOQUJMRShNRU1P
UllfU0FNUExFUikgICAgCi0gICAgV2ViTWVtb3J5U2FtcGxlcjo6c2hhcmVkKCktPnN0YXJ0KHNh
bXBsZUxvZ0ZpbGVIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCk7CisgICAgV2Vi
TWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0YXJ0KHNhbXBsZUxvZ0ZpbGVIYW5kbGUsIHNh
bXBsZUxvZ0ZpbGVQYXRoLCBpbnRlcnZhbCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzYW1w
bGVMb2dGaWxlSGFuZGxlKTsKICAgICBVTlVTRURfUEFSQU0oc2FtcGxlTG9nRmlsZVBhdGgpOwpA
QCAtMTA5MCw3ICsxMDkwLDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzdGFydE1lbW9yeVNhbXBsZXIo
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlJiBzYW1wbGVMb2dGaWwKIHZvaWQgV2ViUHJv
Y2Vzczo6c3RvcE1lbW9yeVNhbXBsZXIoKQogewogI2lmIEVOQUJMRShNRU1PUllfU0FNUExFUikK
LSAgICBXZWJNZW1vcnlTYW1wbGVyOjpzaGFyZWQoKS0+c3RvcCgpOworICAgIFdlYk1lbW9yeVNh
bXBsZXI6OnNpbmdsZXRvbigpLT5zdG9wKCk7CiAjZW5kaWYKIH0KIApAQCAtMTExNiw3ICsxMTE2
LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpzZXRUZXh0Q2hlY2tlclN0YXRlKGNvbnN0IFRleHRDaGVj
a2VyU3RhdGUmIHRleHRDaGVja2VyU3RhdGUpCiAKIHZvaWQgV2ViUHJvY2Vzczo6cmVsZWFzZVBh
Z2VDYWNoZSgpCiB7Ci0gICAgUGFnZUNhY2hlOjpzaGFyZWQoKS5wcnVuZVRvU2l6ZU5vdygwLCBQ
cnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CisgICAgUGFnZUNhY2hlOjpzaW5nbGV0b24o
KS5wcnVuZVRvU2l6ZU5vdygwLCBQcnVuaW5nUmVhc29uOjpNZW1vcnlQcmVzc3VyZSk7CiB9CiAK
ICNpZiAhUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5o
CmluZGV4IGY5Y2YzN2NhYWI4MzMyNzBmOWIyY2MyZDZiNmMzM2JmN2IwMTkzMGQuLjViYWYwNzIx
MzdkZTZhZTdkZjVjNzNmNTRiNWQzODk5ZjhmZDMyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUHJvY2Vzcy5oCkBAIC05Myw3ICs5Myw3IEBAIGNsYXNzIFdlYlRvRGF0YWJhc2VQcm9j
ZXNzQ29ubmVjdGlvbjsKIGNsYXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzLCBw
dWJsaWMgV2ViT3JpZ2luRGF0YU1hbmFnZXJTdXBwbGVtZW50LCBwcml2YXRlIERvd25sb2FkTWFu
YWdlcjo6Q2xpZW50IHsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RG93bmxvYWRN
YW5hZ2VyPjsKIHB1YmxpYzoKLSAgICBzdGF0aWMgV2ViUHJvY2VzcyYgc2hhcmVkKCk7CisgICAg
c3RhdGljIFdlYlByb2Nlc3MmIHNpbmdsZXRvbigpOwogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+CiAgICAgVCogc3VwcGxlbWVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCmluZGV4IGJjNDg2ZTczZWU3ZjNiMWYzYWVlYjM2
ZWM4ZDU5YmFlMDI0NDM1OTEuLjBkOGEzY2YxNTU4OGNkMDdhZmZiMzU0MTFiMGEzYTRkMWVlYTNm
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vz
c0NvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vz
c0NvY29hLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybVNl
dENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQogCiAgICAgbWVtb3J5Q2FjaGUoKS5z
ZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBjYWNoZU1heERlYWRDYXBhY2l0eSwg
Y2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBtZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0
YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29kZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAg
UGFnZUNhY2hlOjpzaGFyZWQoKS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOworICAgIFBhZ2VD
YWNoZTo6c2luZ2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogICAgIE5TVVJM
Q2FjaGUgKm5zdXJsQ2FjaGUgPSBbTlNVUkxDYWNoZSBzaGFyZWRVUkxDYWNoZV07CiAKQEAgLTE0
NCw3ICsxNDQsNyBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtQ2xlYXJSZXNvdXJjZUNhY2hl
cyhSZXNvdXJjZUNhY2hlc1RvQ2xlYXIgY2FjaGVzVG9DbGVhcgogI2lmIFVTRShBUFBLSVQpCiBz
dGF0aWMgaWQgTlNBcHBsaWNhdGlvbkFjY2Vzc2liaWxpdHlGb2N1c2VkVUlFbGVtZW50KE5TQXBw
bGljYXRpb24qLCBTRUwpCiB7Ci0gICAgV2ViUGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmZvY3VzZWRXZWJQYWdlKCk7CisgICAgV2ViUGFnZSogcGFnZSA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmZvY3VzZWRXZWJQYWdlKCk7CiAgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5hY2Nl
c3NpYmlsaXR5UmVtb3RlT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0yMjYsNyAr
MjI2LDcgQEAgdm9pZCBXZWJQcm9jZXNzOjpwbGF0Zm9ybUluaXRpYWxpemVQcm9jZXNzKGNvbnN0
IENoaWxkUHJvY2Vzc0luaXRpYWxpemF0aW9uUGFyYW0KICAgICBXS0FYUmVnaXN0ZXJSZW1vdGVB
cHAoKTsKIAogI2lmIEVOQUJMRShTRUNfSVRFTV9TSElNKQotICAgIFNlY0l0ZW1TaGltOjpzaGFy
ZWQoKS5pbml0aWFsaXplKHRoaXMpOworICAgIFNlY0l0ZW1TaGltOjpzaW5nbGV0b24oKS5pbml0
aWFsaXplKHRoaXMpOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKaW5kZXggYjMzZTI4NmFlNDZlODJj
ODYzNTFjOGNkN2Q2MjAxMTE5OWY3NGU5YS4uZjBiOTYzZWIyNjc0OTljYjZiZGRmMjlkNTQ4ZWQ0
ZGU1NGVkZTg3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0
ZW5zaW9uTWFuYWdlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwv
RXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNlIFdl
YktpdCB7CiAKLUV4dGVuc2lvbk1hbmFnZXJFZmwmIEV4dGVuc2lvbk1hbmFnZXJFZmw6OnNoYXJl
ZCgpCitFeHRlbnNpb25NYW5hZ2VyRWZsJiBFeHRlbnNpb25NYW5hZ2VyRWZsOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxFeHRlbnNpb25NYW5hZ2VyRWZsPiBleHRl
bnNpb25NYW5hZ2VyOwogICAgIHJldHVybiBleHRlbnNpb25NYW5hZ2VyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5oIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5oCmluZGV4IDli
YTUzYjY5ODhkNDA0ZDRjNzc4MjRhYzA5N2JlMGMyNjRjY2FhYjguLjIyZTVlYTg2OGYwZTI3YWYw
OTUzMTQ0MWI1NzhmMDU4ZjUzZjlkNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmgKQEAgLTQwLDcgKzQwLDcgQEAgY2xhc3Mg
TW9kdWxlOwogY2xhc3MgRXh0ZW5zaW9uTWFuYWdlckVmbCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRXh0ZW5zaW9uTWFuYWdlckVmbCk7CiBwdWJsaWM6Ci0gICAgV0tfRVhQT1JUIHN0YXRp
YyBFeHRlbnNpb25NYW5hZ2VyRWZsJiBzaGFyZWQoKTsKKyAgICBXS19FWFBPUlQgc3RhdGljIEV4
dGVuc2lvbk1hbmFnZXJFZmwmIHNpbmdsZXRvbigpOwogICAgIFdLX0VYUE9SVCB2b2lkIGluaXRp
YWxpemUoV0tCdW5kbGVSZWYsIFdLVHlwZVJlZik7CiBwcml2YXRlOgogICAgIEV4dGVuc2lvbk1h
bmFnZXJFZmwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dl
YkluamVjdGVkQnVuZGxlTWFpbkVmbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Vm
bC9XZWJJbmplY3RlZEJ1bmRsZU1haW5FZmwuY3BwCmluZGV4IDllNTBhOGNjMWJmZDZlOGU1YmZi
ZGIyNzI0NWQ2ZGY4NDVjMDBhZWYuLjgyMDU5Zjk5OTg5MTA3NzljYTYyZGNkYTllNzg2ZGZhZmIx
ZjYzOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL1dlYkluamVj
dGVkQnVuZGxlTWFpbkVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwv
V2ViSW5qZWN0ZWRCdW5kbGVNYWluRWZsLmNwcApAQCAtMzIsNSArMzIsNSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OwogCiBleHRlcm4gIkMiIHZvaWQgV0tCdW5kbGVJbml0aWFsaXplKFdLQnVu
ZGxlUmVmIGJ1bmRsZSwgV0tUeXBlUmVmIHVzZXJEYXRhKQogewotICAgIEV4dGVuc2lvbk1hbmFn
ZXJFZmw6OnNoYXJlZCgpLmluaXRpYWxpemUoYnVuZGxlLCB1c2VyRGF0YSk7CisgICAgRXh0ZW5z
aW9uTWFuYWdlckVmbDo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShidW5kbGUsIHVzZXJEYXRhKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVu
c2lvbk1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0
ZW5zaW9uTWFuYWdlci5jcHAKaW5kZXggNThjYzc1ZDIwYzUxZDRiZmEyOGY0MTA2ZTcwMjE2Yzll
NGNhYTYyYi4uZGUyNWUzZGJjMTYwYWU0ODgzNzJhMTg4MzAxYjBkZDYyYzg0ZGMyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdl
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0ZW5zaW9u
TWFuYWdlci5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVdl
Ykd0a0V4dGVuc2lvbk1hbmFnZXImIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXI6OnNoYXJlZCgpCitX
ZWJHdGtFeHRlbnNpb25NYW5hZ2VyJiBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxXZWJHdGtFeHRlbnNpb25NYW5hZ2VyPiBl
eHRlbnNpb25NYW5hZ2VyOwogICAgIHJldHVybiBleHRlbnNpb25NYW5hZ2VyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrRXh0ZW5zaW9uTWFuYWdlci5o
CmluZGV4IGZjYzg2NmI0N2E4MTAwNmM3YjVmMTI1N2M3MDQ5ZDA2ZDdjZDllN2IuLjM3YzVlNjY3
NjU5MWRlMzUyNjBjYWYzMGE1OWUzYTQ0MTIwM2VkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0V4dGVuc2lvbk1hbmFnZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtFeHRlbnNpb25NYW5hZ2VyLmgKQEAgLTM5LDcg
KzM5LDcgQEAgY2xhc3MgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoV2ViR3RrRXh0ZW5zaW9uTWFuYWdlcik7CiAKIHB1YmxpYzoKLSAgICBXS19FWFBP
UlQgc3RhdGljIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXImIHNoYXJlZCgpOworICAgIFdLX0VYUE9S
VCBzdGF0aWMgV2ViR3RrRXh0ZW5zaW9uTWFuYWdlciYgc2luZ2xldG9uKCk7CiAKICAgICBXS19F
WFBPUlQgdm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUmVmLCBXS1R5cGVSZWYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtJbmplY3RlZEJ1bmRsZU1h
aW4uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViR3RrSW5qZWN0ZWRCdW5k
bGVNYWluLmNwcAppbmRleCBmMTkyZmFhMzk2NWU5YzFkYjhkMGEyYTNlNGJkYzA2OWY3NGQ1MTNi
Li4wMDM3Y2Q0NzY5NGE3NjI5OTg4ZjFiYmIyM2E5NDY5MjQ4ODhiYmU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJHdGtJbmplY3RlZEJ1bmRsZU1haW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkd0a0luamVjdGVkQnVuZGxl
TWFpbi5jcHAKQEAgLTMxLDUgKzMxLDUgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiB2b2lkIFdLQnVu
ZGxlSW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiB1c2VyRGF0YSkKIHsK
LSAgICBXZWJHdGtFeHRlbnNpb25NYW5hZ2VyOjpzaGFyZWQoKS5pbml0aWFsaXplKGJ1bmRsZSwg
dXNlckRhdGEpOworICAgIFdlYkd0a0V4dGVuc2lvbk1hbmFnZXI6OnNpbmdsZXRvbigpLmluaXRp
YWxpemUoYnVuZGxlLCB1c2VyRGF0YSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9pb3MvV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5tbQppbmRleCBmZmIw
NGJkNWUzYTRjNjJkOTRiNzE3ZmI0ODlhZTY0ZjA4MTY0NzRjLi43NDJlOWRiNWJmOWNmYTQyODk2
YmQ4NTA1MmE2YTIyZDM4MDcxY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2lvcy9XZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvaW9zL1dlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIubW0KQEAgLTczLDEyICs3
MywxMiBAQCBXZWJWaWRlb0Z1bGxzY3JlZW5NYW5hZ2VyOjpXZWJWaWRlb0Z1bGxzY3JlZW5NYW5h
Z2VyKFBhc3NSZWZQdHI8V2ViUGFnZT4gcGFnZSkKICAgICAsIG1faXNGdWxsc2NyZWVuKGZhbHNl
KQogewogICAgIHNldFdlYlZpZGVvRnVsbHNjcmVlbkludGVyZmFjZSh0aGlzKTsKLSAgICBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVvRnVs
bHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcGFnZS0+cGFnZUlEKCksICp0
aGlzKTsKKyAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwg
cGFnZS0+cGFnZUlEKCksICp0aGlzKTsKIH0KIAogV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6
fldlYlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIoKQogewotICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgp
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6V2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3BhZ2UtPnBhZ2VJRCgpKTsKKyAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlZpZGVv
RnVsbHNjcmVlbk1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9wYWdlLT5wYWdlSUQo
KSk7CiB9CiAKIGJvb2wgV2ViVmlkZW9GdWxsc2NyZWVuTWFuYWdlcjo6c3VwcG9ydHNWaWRlb0Z1
bGxzY3JlZW4oKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9z
b3VwL1dlYlByb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9X
ZWJQcm9jZXNzU291cC5jcHAKaW5kZXggMTE4YzcyMmY3NjI0OWE1ZTJmZWE0YWFlZjA1NWY4NDlm
YWMwOWMwNi4uOWEyODcwODQ1N2Y0YTJjNTFjZGYwM2NkMzllM2Y1YjgyMzI0YzkyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYlByb2Nlc3NTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1NvdXAuY3BwCkBA
IC0xMDQsMTAgKzEwNCwxMCBAQCB2b2lkIFdlYlByb2Nlc3M6OnBsYXRmb3JtU2V0Q2FjaGVNb2Rl
bChDYWNoZU1vZGVsIGNhY2hlTW9kZWwpCiAgICAgV2ViQ29yZTo6bWVtb3J5Q2FjaGUoKS5zZXRE
aXNhYmxlZChjYWNoZU1vZGVsID09IENhY2hlTW9kZWxEb2N1bWVudFZpZXdlcik7CiAgICAgV2Vi
Q29yZTo6bWVtb3J5Q2FjaGUoKS5zZXRDYXBhY2l0aWVzKGNhY2hlTWluRGVhZENhcGFjaXR5LCBj
YWNoZU1heERlYWRDYXBhY2l0eSwgY2FjaGVUb3RhbENhcGFjaXR5KTsKICAgICBXZWJDb3JlOjpt
ZW1vcnlDYWNoZSgpLnNldERlYWREZWNvZGVkRGF0YURlbGV0aW9uSW50ZXJ2YWwoZGVhZERlY29k
ZWREYXRhRGVsZXRpb25JbnRlcnZhbCk7Ci0gICAgV2ViQ29yZTo6UGFnZUNhY2hlOjpzaGFyZWQo
KS5zZXRNYXhTaXplKHBhZ2VDYWNoZVNpemUpOworICAgIFdlYkNvcmU6OlBhZ2VDYWNoZTo6c2lu
Z2xldG9uKCkuc2V0TWF4U2l6ZShwYWdlQ2FjaGVTaXplKTsKIAogI2lmIFBMQVRGT1JNKEdUSykK
LSAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNoYXJlZCgpLnNldFNob3VsZENsZWFyQmFja2luZ1N0
b3Jlcyh0cnVlKTsKKyAgICBXZWJDb3JlOjpQYWdlQ2FjaGU6OnNpbmdsZXRvbigpLnNldFNob3Vs
ZENsZWFyQmFja2luZ1N0b3Jlcyh0cnVlKTsKICNlbmRpZgogCiAgICAgaWYgKCF1c2VzTmV0d29y
a1Byb2Nlc3MoKSkgewpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDAxZDg3NTJkMTNkNzI1NmRjMDlkODljY2M4ZTllNmRjNzA3YzEyYzIuLmMyMmJm
ODI2N2I4ZjgzMTJiYTI1ZDQ5NmY2YmY0OTYyOTAyMGVlOWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0No
YW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNS0wMS0z
MCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBzaGFy
ZWQoKSBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyB0byBzaW5nbGV0b24oKSBmb3Igc2luZ2xldG9u
IGNsYXNzZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDEwODgKKworICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5pd2EgYW5kIEJlbmphbWlu
IFBvdWxhaW4uCisKKyAgICAgICAgUmVuYW1lIHNoYXJlZCgpIHN0YXRpYyBtZW1iZXIgZnVuY3Rp
b25zIHRvIHNpbmdsZXRvbigpIGZvciBzaW5nbGV0b24KKyAgICAgICAgY2xhc3NlcyBhcyBwZXIg
dGhlIHJlY2VudCBjb2Rpbmcgc3R5bGUgY2hhbmdlLgorCiAyMDE1LTAxLTI5ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWx0IHJlc3VsdCB0YWtlcyB0
b28gbG9uZyB0byBiZSBjb21wcmVzc2VkIG9uIGJvdHMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5l
ci5jcHAKaW5kZXggNDVmYjk3YWQ3MTYxZjBhMWYyZjc1NGRmMGViN2JmODRjYWYyZTMxNS4uNTAz
NDAzMTE0YjBlYjA4Zjc2ZjNhOWE0YjE2NDFhOTcwYzIwOTNiOSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
VGVzdFJ1bm5lci5jcHAKQEAgLTIxNDQsMzcgKzIxNDQsMzcgQEAgSlNTdGF0aWNGdW5jdGlvbiog
VGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxv
YWRIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpTU3RyaW5nUmVmIGJhc2VVUkwpCiB7
Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVldWUobmV3IExvYWRIVE1MU3RyaW5nSXRlbShj
b250ZW50LCBiYXNlVVJMKSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS5xdWV1ZShuZXcg
TG9hZEhUTUxTdHJpbmdJdGVtKGNvbnRlbnQsIGJhc2VVUkwpKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpxdWV1ZUxvYWRBbHRlcm5hdGVIVE1MU3RyaW5nKEpTU3RyaW5nUmVmIGNvbnRlbnQsIEpT
U3RyaW5nUmVmIGJhc2VVUkwsIEpTU3RyaW5nUmVmIHVucmVhY2hhYmxlVVJMKQogewotICAgIFdv
cmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwg
YmFzZVVSTCwgdW5yZWFjaGFibGVVUkwpKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLnF1
ZXVlKG5ldyBMb2FkSFRNTFN0cmluZ0l0ZW0oY29udGVudCwgYmFzZVVSTCwgdW5yZWFjaGFibGVV
UkwpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUJhY2tOYXZpZ2F0aW9uKGludCBob3dG
YXJCYWNrKQogewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1ZXVlKG5ldyBCYWNrSXRlbSho
b3dGYXJCYWNrKSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS5xdWV1ZShuZXcgQmFja0l0
ZW0oaG93RmFyQmFjaykpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmln
YXRpb24oaW50IGhvd0ZhckZvcndhcmQpCiB7Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+cXVl
dWUobmV3IEZvcndhcmRJdGVtKGhvd0ZhckZvcndhcmQpKTsKKyAgICBXb3JrUXVldWU6OnNpbmds
ZXRvbigpLnF1ZXVlKG5ldyBGb3J3YXJkSXRlbShob3dGYXJGb3J3YXJkKSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVMb2FkaW5nU2NyaXB0KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAg
ICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0
KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0b24oKS5xdWV1ZShuZXcgTG9hZGluZ1NjcmlwdEl0
ZW0oc2NyaXB0KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVOb25Mb2FkaW5nU2NyaXB0
KEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShu
ZXcgTm9uTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0KSk7CisgICAgV29ya1F1ZXVlOjpzaW5nbGV0
b24oKS5xdWV1ZShuZXcgTm9uTG9hZGluZ1NjcmlwdEl0ZW0oc2NyaXB0KSk7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6cXVldWVSZWxvYWQoKQogewotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnF1
ZXVlKG5ldyBSZWxvYWRJdGVtKTsKKyAgICBXb3JrUXVldWU6OnNpbmdsZXRvbigpLnF1ZXVlKG5l
dyBSZWxvYWRJdGVtKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjppZ25vcmVMZWdhY3lXZWJOb3Rp
ZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdHMoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvV29ya1F1ZXVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5jcHAK
aW5kZXggYzJmYzA0ZjEzNmM3NTExNzM0NjYxNzRjMGY3MjQ4ZDQwYzQ1ODY3OC4uMDk3ZjRjZGQy
ZWE1YWEyZmYyNzRiMDkwMWUzMTIyMTEyMTczNzEzMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvV29ya1F1ZXVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9Xb3JrUXVl
dWUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJXb3JrUXVldWVJdGVtLmgiCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHF1ZXVlTGVuZ3RoID0gMTAyNDsKIApAQCAtMzgs
OSArMzksOSBAQCBzdGF0aWMgV29ya1F1ZXVlSXRlbSogdGhlUXVldWVbcXVldWVMZW5ndGhdOwog
c3RhdGljIHVuc2lnbmVkIHN0YXJ0T2ZRdWV1ZTsKIHN0YXRpYyB1bnNpZ25lZCBlbmRPZlF1ZXVl
OwogCi1Xb3JrUXVldWUqIFdvcmtRdWV1ZTo6c2hhcmVkKCkKK1dvcmtRdWV1ZSYgV29ya1F1ZXVl
OjpzaW5nbGV0b24oKQogewotICAgIHN0YXRpYyBXb3JrUXVldWUqIHNoYXJlZEluc3RhbmNlID0g
bmV3IFdvcmtRdWV1ZTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8V29ya1F1ZXVlPiBzaGFy
ZWRJbnN0YW5jZTsKICAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7CiB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1dvcmtRdWV1ZS5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
V29ya1F1ZXVlLmgKaW5kZXggODM1ODVlYTY3ODNmYjdjOGJlMzQwZDQ5ZTMxMDU0NWFkYzU4MWU0
OS4uMDY5N2U3YzNlMWIwYTNkZTM1MzJhMmMxN2UwNWE5YWJjN2VlZmE2MiAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvV29ya1F1ZXVlLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvV29ya1F1ZXVlLmgKQEAgLTI5LDExICsyOSwxNSBAQAogI2lmbmRlZiBXb3JrUXVldWVfaAog
I2RlZmluZSBXb3JrUXVldWVfaAogCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKwogY2xhc3Mg
V29ya1F1ZXVlSXRlbTsKIAogY2xhc3MgV29ya1F1ZXVlIHsKK2ZyaWVuZCBjbGFzcyBXVEY6Ok5l
dmVyRGVzdHJveWVkPFdvcmtRdWV1ZT47CisKIHB1YmxpYzoKLSAgICBzdGF0aWMgV29ya1F1ZXVl
KiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgV29ya1F1ZXVlJiBzaW5nbGV0b24oKTsKIAogICAgIHZv
aWQgcXVldWUoV29ya1F1ZXVlSXRlbSopOwogICAgIFdvcmtRdWV1ZUl0ZW0qIGRlcXVldWUoKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCBkMjVlMDc4
ODRkZTViYTNhMmRmNTQ1MGU3NTgzYTg5Y2NlNzYzMDFhLi4yNjE2MjBlNmM3MGY5ZTNkZmVmZWFi
ZThmODU1NTg2NjgzNTFjYjNkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCkBAIC0xODcwLDggKzE4NzAsOSBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0
IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIFtwcmV2VGVzdEJGSXRlbSByZWxlYXNlXTsKICAgICBw
cmV2VGVzdEJGSXRlbSA9IFtbW1ttYWluRnJhbWUgd2ViVmlld10gYmFja0ZvcndhcmRMaXN0XSBj
dXJyZW50SXRlbV0gcmV0YWluXTsKIAotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNsZWFyKCk7
Ci0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKGZhbHNlKTsKKyAgICBhdXRvJiB3
b3JrUXVldWUgPSBXb3JrUXVldWU6OnNpbmdsZXRvbigpOworICAgIHdvcmtRdWV1ZS5jbGVhcigp
OworICAgIHdvcmtRdWV1ZS5zZXRGcm96ZW4oZmFsc2UpOwogCiAgICAgYm9vbCBpZ25vcmVXZWJD
b3JlTm9kZUxlYWtzID0gc2hvdWxkSWdub3JlV2ViQ29yZU5vZGVMZWFrcyh0ZXN0VVJMKTsKICAg
ICBpZiAoaWdub3JlV2ViQ29yZU5vZGVMZWFrcykKQEAgLTE4OTUsNyArMTg5Niw3IEBAIHN0YXRp
YyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgW0V2ZW50U2VuZGlu
Z0NvbnRyb2xsZXIgY2xlYXJTYXZlZEV2ZW50c107CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10g
c2V0U2VsZWN0ZWRET01SYW5nZTpuaWwgYWZmaW5pdHk6TlNTZWxlY3Rpb25BZmZpbml0eURvd25z
dHJlYW1dOwogCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+Y2xlYXIoKTsKKyAgICB3b3JrUXVl
dWUuY2xlYXIoKTsKIAogICAgIGlmIChnVGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dz
V2hlbkNvbXBsZXRlKCkpIHsKICAgICAgICAgTlNBcnJheSogYXJyYXkgPSBbRHVtcFJlbmRlclRy
ZWVXaW5kb3cgb3BlbldpbmRvd3NdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0ZyYW1lTG9hZERlbGVnYXRlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0ZyYW1l
TG9hZERlbGVnYXRlLm1tCmluZGV4IDA0NTcyOTM1MzYyMDE0ODBkMTkxMjY1ODI2YmY1MTNkMGNm
M2I3NGQuLjVlOTdjZWE3N2FjMGIxZWExNzg4MTdiNDU0ZmY2MTNlYzk3ZDRhZWIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9GcmFtZUxvYWREZWxlZ2F0ZS5tbQorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRnJhbWVMb2FkRGVsZWdhdGUubW0KQEAgLTE0Niw3ICsx
NDYsNyBAQAogI2VuZGlmCiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxsIHRoZSBjb21tYW5kcywg
d2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVldWU6OnNoYXJlZCgpLT5w
cm9jZXNzV29yaygpICYmICFnVGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQorICAgIGlmIChXb3Jr
UXVldWU6OnNpbmdsZXRvbigpLnByb2Nlc3NXb3JrKCkgJiYgIWdUZXN0UnVubmVyLT53YWl0VG9E
dW1wKCkpCiAgICAgICAgIGR1bXAoKTsKIH0KIApAQCAtMTU5LDkgKzE1OSwxMCBAQAogewogICAg
IGlmIChbZGF0YVNvdXJjZSB3ZWJGcmFtZV0gPT0gdG9wTG9hZGluZ0ZyYW1lKSB7CiAgICAgICAg
IHRvcExvYWRpbmdGcmFtZSA9IG5pbDsKLSAgICAgICAgV29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0
RnJvemVuKHRydWUpOyAvLyBmaXJzdCBjb21wbGV0ZSBsb2FkIGZyZWV6ZXMgdGhlIHF1ZXVlIGZv
ciB0aGUgcmVzdCBvZiB0aGlzIHRlc3QKKyAgICAgICAgYXV0byYgd29ya1F1ZXVlID0gV29ya1F1
ZXVlOjpzaW5nbGV0b24oKTsKKyAgICAgICAgd29ya1F1ZXVlLnNldEZyb3plbih0cnVlKTsgLy8g
Zmlyc3QgY29tcGxldGUgbG9hZCBmcmVlemVzIHRoZSBxdWV1ZSBmb3IgdGhlIHJlc3Qgb2YgdGhp
cyB0ZXN0CiAgICAgICAgIGlmICghZ1Rlc3RSdW5uZXItPndhaXRUb0R1bXAoKSkgewotICAgICAg
ICAgICAgaWYgKFdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCisgICAgICAgICAgICBpZiAo
d29ya1F1ZXVlLmNvdW50KCkpCiAgICAgICAgICAgICAgICAgW3NlbGYgcGVyZm9ybVNlbGVjdG9y
OkBzZWxlY3Rvcihwcm9jZXNzV29yazopIHdpdGhPYmplY3Q6bmlsIGFmdGVyRGVsYXk6MF07CiAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZHVtcCgpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCBkMzJkOTY0NjBkMmViNmI3OWQ4NzQ0Yzli
YTI2ODU2YjJmNzJkNzJhLi5kMDRlMzBkMDRmMDBkMWNhNWE5MzhmYTY1Y2RiYjk3MDI1Y2I0NTIw
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQor
KysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtMjYxLDcg
KzI2MSw3IEBAIHNpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIAogdm9p
ZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKIHsKLSAgICBpZiAobV93YWl0VG9EdW1wICYmICF0
b3BMb2FkaW5nRnJhbWUgJiYgIVdvcmtRdWV1ZTo6c2hhcmVkKCktPmNvdW50KCkpCisgICAgaWYg
KG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1lICYmICFXb3JrUXVldWU6OnNpbmdsZXRv
bigpLmNvdW50KCkpCiAgICAgICAgIGR1bXAoKTsKICAgICBtX3dhaXRUb0R1bXAgPSBmYWxzZTsK
IH0KQEAgLTMzOSw3ICszMzksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlTG9hZChKU1N0cmlu
Z1JlZiB1cmwsIEpTU3RyaW5nUmVmIHRhcmdldCkKICAgICBOU1N0cmluZyAqbnN1cmxTdHJpbmcg
PSBbbnN1cmwgYWJzb2x1dGVTdHJpbmddOwogCiAgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IGFic29sdXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhbbnN1cmxT
dHJpbmcgVVRGOFN0cmluZ10pKTsKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgpLT5xdWV1ZShuZXcg
TG9hZEl0ZW0oYWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOworICAgIFdvcmtRdWV1ZTo6c2lu
Z2xldG9uKCkucXVldWUobmV3IExvYWRJdGVtKGFic29sdXRlVVJMLmdldCgpLCB0YXJnZXQpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRpdGluZyhib29sIG5ld0FjY2VwdHNF
ZGl0aW5nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5k
ZXggM2RjZWNmNzQzZGJlNDllYmViYzgwMDcwZDAxOTFjY2JhYjBjZjI4MS4uNjJkZmM5ZDUwNTFi
ZmI5NmZjYmEyNWZjMTU5ZTg3YjViODNjZDYzMyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93
aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC0xMTA3LDggKzExMDcsOSBAQCBzdGF0aWMgdm9pZCBy
dW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIGlmICh3ZWJWaWV3ICYmIFNVQ0NF
RURFRCh3ZWJWaWV3LT5iYWNrRm9yd2FyZExpc3QoJmJmTGlzdCkpKQogICAgICAgICBiZkxpc3Qt
PmN1cnJlbnRJdGVtKCZwcmV2VGVzdEJGSXRlbSk7CiAKLSAgICBXb3JrUXVldWU6OnNoYXJlZCgp
LT5jbGVhcigpOwotICAgIFdvcmtRdWV1ZTo6c2hhcmVkKCktPnNldEZyb3plbihmYWxzZSk7Cisg
ICAgYXV0byYgd29ya1F1ZXVlID0gV29ya1F1ZXVlOjpzaW5nbGV0b24oKTsKKyAgICB3b3JrUXVl
dWUuY2xlYXIoKTsKKyAgICB3b3JrUXVldWUuc2V0RnJvemVuKGZhbHNlKTsKIAogICAgIE1TRyBt
c2cgPSB7IDAgfTsKICAgICBIV05EIGhvc3RXaW5kb3c7CkBAIC0xMTQwLDcgKzExNDEsNyBAQCBz
dGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIH0KIAogICAg
IC8vIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXIgY2xlYXJTYXZlZEV2ZW50cwotICAgIFdvcmtRdWV1
ZTo6c2hhcmVkKCktPmNsZWFyKCk7CisgICAgd29ya1F1ZXVlLmNsZWFyKCk7CiAKICAgICBpZiAo
OjpnVGVzdFJ1bm5lci0+Y2xvc2VSZW1haW5pbmdXaW5kb3dzV2hlbkNvbXBsZXRlKCkpIHsKICAg
ICAgICAgVmVjdG9yPEhXTkQ+IHdpbmRvd3MgPSBvcGVuV2luZG93cygpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1lTG9hZERlbGVnYXRlLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9GcmFtZUxvYWREZWxlZ2F0ZS5jcHAKaW5kZXggYWJiYTRjODc0NmU2
NzJiMTE4MGQ2ZmU0MWY2NDg0YjNlNjY2MzcxNi4uM2NhNzg1NGNkM2FhZDFlZTdkYzIxMzgzZDRj
MGVjMmI3NDU0ZmQ1NSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0ZyYW1l
TG9hZERlbGVnYXRlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRnJhbWVMb2Fk
RGVsZWdhdGUuY3BwCkBAIC0xOTcsNyArMTk3LDcgQEAgdm9pZCBGcmFtZUxvYWREZWxlZ2F0ZTo6
cHJvY2Vzc1dvcmsoKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBpZiB3ZSBmaW5pc2ggYWxs
IHRoZSBjb21tYW5kcywgd2UncmUgcmVhZHkgdG8gZHVtcCBzdGF0ZQotICAgIGlmIChXb3JrUXVl
dWU6OnNoYXJlZCgpLT5wcm9jZXNzV29yaygpICYmICE6OmdUZXN0UnVubmVyLT53YWl0VG9EdW1w
KCkpCisgICAgaWYgKFdvcmtRdWV1ZTo6c2luZ2xldG9uKCkucHJvY2Vzc1dvcmsoKSAmJiAhOjpn
VGVzdFJ1bm5lci0+d2FpdFRvRHVtcCgpKQogICAgICAgICBkdW1wKCk7CiB9CiAKQEAgLTIzMywx
MyArMjMzLDE0IEBAIHZvaWQgRnJhbWVMb2FkRGVsZWdhdGU6OmxvY2F0aW9uQ2hhbmdlRG9uZShJ
V2ViRXJyb3IqLCBJV2ViRnJhbWUqIGZyYW1lKQogICAgIGlmIChmcmFtZSAhPSB0b3BMb2FkaW5n
RnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHRvcExvYWRpbmdGcmFtZSA9IDA7Ci0gICAg
V29ya1F1ZXVlOjpzaGFyZWQoKS0+c2V0RnJvemVuKHRydWUpOworICAgIHRvcExvYWRpbmdGcmFt
ZSA9IG51bGxwdHI7CisgICAgYXV0byYgd29ya1F1ZXVlID0gV29ya1F1ZXVlOjpzaW5nbGV0b24o
KTsKKyAgICB3b3JrUXVldWUuc2V0RnJvemVuKHRydWUpOwogCiAgICAgaWYgKDo6Z1Rlc3RSdW5u
ZXItPndhaXRUb0R1bXAoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKFdvcmtRdWV1ZTo6
c2hhcmVkKCktPmNvdW50KCkpIHsKKyAgICBpZiAod29ya1F1ZXVlLmNvdW50KCkpIHsKICAgICAg
ICAgaWYgKCFwcm9jZXNzV29ya1RpbWVySUQpCiAgICAgICAgICAgICBwcm9jZXNzV29ya1RpbWVy
SUQgPSA6OlNldFRpbWVyKDAsIDAsIDAsIHByb2Nlc3NXb3JrVGltZXIpOwogICAgICAgICBkZWxl
Z2F0ZXNXaXRoRGVsYXllZFdvcmsoKS5hcHBlbmQodGhpcyk7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKaW5kZXggZTQ0ZDUwOGE4NDgyMDZjZGRmZDM2ZjRjYmY2
YjBjNDVhM2MzNTNiOC4uMzViMGNiNTYwMTYxM2Y0OGU2ZDFhZWQwY2Q5N2ZlOTE1YzU2MDU5NSAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcApAQCAtMjY1LDcg
KzI2NSw3IEBAIHNpemVfdCBUZXN0UnVubmVyOjp3ZWJIaXN0b3J5SXRlbUNvdW50KCkKIHZvaWQg
VGVzdFJ1bm5lcjo6bm90aWZ5RG9uZSgpCiB7CiAgICAgLy8gU2FtZSBhcyBvbiBtYWMuICBUaGlz
IGNhbiBiZSBzaGFyZWQuCi0gICAgaWYgKG1fd2FpdFRvRHVtcCAmJiAhdG9wTG9hZGluZ0ZyYW1l
ICYmICFXb3JrUXVldWU6OnNoYXJlZCgpLT5jb3VudCgpKQorICAgIGlmIChtX3dhaXRUb0R1bXAg
JiYgIXRvcExvYWRpbmdGcmFtZSAmJiAhV29ya1F1ZXVlOjpzaW5nbGV0b24oKS0+Y291bnQoKSkK
ICAgICAgICAgZHVtcCgpOwogICAgIG1fd2FpdFRvRHVtcCA9IGZhbHNlOwogfQpAQCAtMzE3LDcg
KzMxNyw3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkKEpTU3RyaW5nUmVmIHVybCwgSlNT
dHJpbmdSZWYgdGFyZ2V0KQogICAgIHdzdHJpbmcgd0Fic29sdXRlVVJMID0gcmVzcG9uc2VVUkwg
KyBURVhUKCIvIikgKyB3VVJMOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBqc0Fic29s
dXRlVVJMKEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKHdBYnNvbHV0ZVVSTC5k
YXRhKCksIHdBYnNvbHV0ZVVSTC5sZW5ndGgoKSkpOwogCi0gICAgV29ya1F1ZXVlOjpzaGFyZWQo
KS0+cXVldWUobmV3IExvYWRJdGVtKGpzQWJzb2x1dGVVUkwuZ2V0KCksIHRhcmdldCkpOworICAg
IFdvcmtRdWV1ZTo6c2luZ2xldG9uKCktPnF1ZXVlKG5ldyBMb2FkSXRlbShqc0Fic29sdXRlVVJM
LmdldCgpLCB0YXJnZXQpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBY2NlcHRzRWRpdGlu
Zyhib29sIGFjY2VwdHNFZGl0aW5nKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jaGVja2Vycy9jcHBfdW5pdHRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXJzL2NwcF91bml0dGVzdC5weQppbmRleCA0NTMxOTk1YTliNDJkZmYxODIw
ZWI3OGFhYjBkMWU5YmY3ZWU4NWUzLi44ZmU1NjkzOWJjZDUxN2I5ZjI4NjFlMmI3ZDZiODYyYmZi
YWRiMWMyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJz
L2NwcF91bml0dGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNr
ZXJzL2NwcF91bml0dGVzdC5weQpAQCAtNDA5MywxNCArNDA5MywxNCBAQCBjbGFzcyBXZWJLaXRT
dHlsZVRlc3QoQ3BwU3R5bGVUZXN0QmFzZSk6CiAgICAgICAgICAgICAnfVxuJywKICAgICAgICAg
ICAgICcnKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAg
ICAnI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICghKGV4cHJlc3Npb24p
KSB7IFRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5F
X18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0gd2hpbGUgKDApXG4nLAorICAgICAgICAgICAg
JyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyBpZiAoIShleHByZXNzaW9uKSkg
eyBUZXN0c0NvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9fTElO
RV9fLCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKICAgICAgICAgICAg
ICcnKQogICAgICAgICBzZWxmLmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICAgICAn
I2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7IGlmICggIShleHByZXNzaW9uKSkg
eyBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnRlc3RGYWlsZWQoX19GSUxFX18sIF9fTElORV9f
LCAjZXhwcmVzc2lvbik7IHJldHVybjsgfSB9IHdoaWxlICgwKVxuJywKKyAgICAgICAgICAgICcj
ZGVmaW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCAhKGV4cHJlc3Npb24pKSB7
IFRlc3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5F
X18sICNleHByZXNzaW9uKTsgcmV0dXJuOyB9IH0gd2hpbGUgKDApXG4nLAogICAgICAgICAgICAg
J0V4dHJhIHNwYWNlIGFmdGVyICggaW4gaWYgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKICAg
ICAgICAgIyBGSVhNRTogY3VycmVudGx5IHdlIG9ubHkgY2hlY2sgZmlyc3QgY29uZGl0aW9uYWws
IHNvIHdlIGNhbm5vdCBkZXRlY3QgZXJyb3JzIGluIG5leHQgb25lcy4KICAgICAgICAgIyBzZWxm
LmFzc2VydF9tdWx0aV9saW5lX2xpbnQoCi0gICAgICAgICMgICAgICcjZGVmaW5lIFRFU1RfQVNT
RVJUKGV4cHJlc3Npb24pIGRvIHsgaWYgKCEoZXhwcmVzc2lvbikpIHsgVGVzdHNDb250cm9sbGVy
OjpzaGFyZWQoKS50ZXN0RmFpbGVkKF9fRklMRV9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyBy
ZXR1cm47IH0gfSB3aGlsZSAoMCApXG4nLAorICAgICAgICAjICAgICAnI2RlZmluZSBURVNUX0FT
U0VSVChleHByZXNzaW9uKSBkbyB7IGlmICghKGV4cHJlc3Npb24pKSB7IFRlc3RzQ29udHJvbGxl
cjo6c2luZ2xldG9uKCkudGVzdEZhaWxlZChfX0ZJTEVfXywgX19MSU5FX18sICNleHByZXNzaW9u
KTsgcmV0dXJuOyB9IH0gd2hpbGUgKDAgKVxuJywKICAgICAgICAgIyAgICAgJ01pc21hdGNoaW5n
IHNwYWNlcyBpbnNpZGUgKCkgaW4gaWYgIFt3aGl0ZXNwYWNlL3BhcmVuc10gWzVdJykKICAgICAg
ICAgc2VsZi5hc3NlcnRfbXVsdGlfbGluZV9saW50KAogICAgICAgICAgICAgJ1dURl9NQUtFX05P
TkNPUFlBQkxFKENsYXNzTmFtZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEO1xuJywKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyLmNwcAppbmRleCA3
MmVmZWYxYWM4NmFhNDRmOWYyMTczMjc2OGViMDM4NmIwYjEyYjdhLi41M2YzOWE4NzQzYzM0MzU4
OGZkYWUxMWYwOWU0NTBjM2RmMWMyODkxIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9J
bmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAKIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIAotSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyJiBJbmplY3RlZEJ1
bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpCitJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXImIEluamVj
dGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgSW5qZWN0ZWRC
dW5kbGVDb250cm9sbGVyJiBzaGFyZWQgPSAqbmV3IEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjsK
ICAgICByZXR1cm4gc2hhcmVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9Jbmpl
Y3RlZEJ1bmRsZUNvbnRyb2xsZXIuaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5k
bGVDb250cm9sbGVyLmgKaW5kZXggNjFhMDk2YzYwM2NiNjhkODA2M2Y3NThjMzhhYTdkOWIxMzQ2
NjU5NC4uZWFhN2YwZDE3OGQ0MzY4MzY2ZjVkMjZlMWU5MTZiYWI1ZTgzZWYxMyAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXIuaAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlQ29udHJvbGxlci5oCkBAIC0zNiw3ICsz
Niw3IEBAIGNsYXNzIEluamVjdGVkQnVuZGxlVGVzdDsKIAogY2xhc3MgSW5qZWN0ZWRCdW5kbGVD
b250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
JiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyJiBzaW5nbGV0
b24oKTsKIAogICAgIHZvaWQgaW5pdGlhbGl6ZShXS0J1bmRsZVJlZiwgV0tUeXBlUmVmKTsKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCmluZGV4IDY4NDAyY2Ey
YTE0NzRkMGM5M2Y5MmUwNjgxYjUwZjgwOWRjMTk1MzcuLmIyNTM3ZjczN2Q1MWU4OWVlNGIxYjU1
YWM1ZDVkMTVmNDBkZGQ4Y2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0
ZWRCdW5kbGVNYWluLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxl
TWFpbi5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgZXh0ZXJuICJDIgogI2VuZGlmCiB2b2lkIFdLQnVu
ZGxlSW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiBpbml0aWFsaXphdGlv
blVzZXJEYXRhKQogewotICAgIFRlc3RXZWJLaXRBUEk6OkluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6c2hhcmVkKCkuaW5pdGlhbGl6ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOwor
ICAgIFRlc3RXZWJLaXRBUEk6OkluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCku
aW5pdGlhbGl6ZShidW5kbGUsIGluaXRpYWxpemF0aW9uVXNlckRhdGEpOwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRCdW5kbGVUZXN0LmggYi9U
b29scy9UZXN0V2ViS2l0QVBJL0luamVjdGVkQnVuZGxlVGVzdC5oCmluZGV4IGQwZjk5NmFmZmU5
MWU3NWYxODcwZDEwNTA1M2FiOTU5Y2UwMjgzNDMuLmFkMmNiOTU4MTE1ZjlkMGM1OThhY2QyYThi
M2Y5Y2VjNTEzYzAwZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvSW5qZWN0ZWRC
dW5kbGVUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9JbmplY3RlZEJ1bmRsZVRlc3Qu
aApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBSZWdpc3Rl
cihjb25zdCBzdGQ6OnN0cmluZyYgdGVzdCkKICAgICAgICAgewotICAgICAgICAgICAgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5yZWdpc3RlckNyZWF0ZUluamVjdGVkQnVuZGxl
VGVzdEZ1bmN0aW9uKHRlc3QsIFJlZ2lzdGVyOjpjcmVhdGUpOworICAgICAgICAgICAgSW5qZWN0
ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZWdpc3RlckNyZWF0ZUluamVjdGVkQnVu
ZGxlVGVzdEZ1bmN0aW9uKHRlc3QsIFJlZ2lzdGVyOjpjcmVhdGUpOwogICAgICAgICB9CiAKICAg
ICBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyL0RpZEFzc29jaWF0ZUZvcm1Db250cm9sc19CdW5kbGUuY3BwCmluZGV4
IGM5NWI0NjkyNDkzNjU5MWRlYTI0NWFhZDg5ZTJlYjQyOWFkMjlmNjguLjVkY2Q5MWRhODRhYmM1
MDEyZGNlZTE5NmJhNDYyMDdmZTYzNmM2ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Mi9EaWRBc3NvY2lhdGVGb3JtQ29udHJvbHNfQnVuZGxlLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvRGlkQXNzb2NpYXRlRm9ybUNvbnRy
b2xzX0J1bmRsZS5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIHZvaWQgZGlkQXNzb2NpYXRl
Rm9ybUNvbnRyb2xzKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0FycmF5UmVmIGVsZW1lbnRIYW4K
ICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbnVtYmVyT2ZFbGVtZW50cyA9IGFkb3B0V0so
V0tVSW50NjRDcmVhdGUoV0tBcnJheUdldFNpemUoZWxlbWVudEhhbmRsZXMpKSk7CiAgICAgV0tE
aWN0aW9uYXJ5U2V0SXRlbShtZXNzYWdlQm9keS5nZXQoKSwgVXRpbDo6dG9XSygiTnVtYmVyT2ZD
b250cm9scyIpLmdldCgpLCBudW1iZXJPZkVsZW1lbnRzLmdldCgpKTsKIAotICAgIFdLQnVuZGxl
UG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaGFyZWQoKS5idW5kbGUoKSwg
VXRpbDo6dG9XSygiRGlkUmVjZWl2ZURpZEFzc29jaWF0ZUZvcm1Db250cm9scyIpLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZUNvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNlaXZl
RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzIikuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKIH0K
IAogRGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xzVGVzdDo6RGlkQXNzb2NpYXRlRm9ybUNvbnRyb2xz
VGVzdChjb25zdCBzdGQ6OnN0cmluZyYgaWRlbnRpZmllcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9IaXRUZXN0UmVzdWx0Tm9kZUhhbmRsZV9CdW5kbGUu
Y3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0hpdFRlc3RSZXN1bHROb2Rl
SGFuZGxlX0J1bmRsZS5jcHAKaW5kZXggZmI5NGJmODJlOWQxYmE0NGM5YzIyNWMzNDgyMzY3YTZk
ZTBhNzVlNS4uZDY4ZmYyMTkzZDc4YTM3YjVlMmRkNzI4YzM1OTg1YmJmYzQ3YTA3MSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL0hpdFRlc3RSZXN1bHROb2Rl
SGFuZGxlX0J1bmRsZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
L0hpdFRlc3RSZXN1bHROb2RlSGFuZGxlX0J1bmRsZS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgICAgICBpZiAoIW5vZGVIYW5kbGUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAotICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxl
cjo6c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFuZGxl
VGVzdERvbmVNZXNzYWdlTmFtZSIpLmdldCgpLCBVdGlsOjp0b1dLKCJIaXRUZXN0UmVzdWx0Tm9k
ZUhhbmRsZVRlc3REb25lTWVzc2FnZUJvZHkiKS5nZXQoKSk7CisgICAgICAgIFdLQnVuZGxlUG9z
dE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0b24oKS5idW5kbGUoKSwg
VXRpbDo6dG9XSygiSGl0VGVzdFJlc3VsdE5vZGVIYW5kbGVUZXN0RG9uZU1lc3NhZ2VOYW1lIiku
Z2V0KCksIFV0aWw6OnRvV0soIkhpdFRlc3RSZXN1bHROb2RlSGFuZGxlVGVzdERvbmVNZXNzYWdl
Qm9keSIpLmdldCgpKTsKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ3JlYXRlUGFnZShX
S0J1bmRsZVJlZiBidW5kbGUsIFdLQnVuZGxlUGFnZVJlZiBwYWdlKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1Bhc3RlYm9hcmROb3RpZmljYXRpb25zX0J1
bmRsZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvUGFzdGVib2FyZE5v
dGlmaWNhdGlvbnNfQnVuZGxlLmNwcAppbmRleCBjOTg1NTIwNDE5ZWNkYzM3MDEwMGJmOTdhMmRl
N2Q2Yzc0MWViYjYwLi44YzE0MDRlN2E3OTFkZWZlOWUwMjcxMWJkNzNhOTNlNDE4NDZmZjBiIDEw
MDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvUGFzdGVib2FyZE5v
dGlmaWNhdGlvbnNfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdDIvUGFzdGVib2FyZE5vdGlmaWNhdGlvbnNfQnVuZGxlLmNwcApAQCAtNDksNyArNDksNyBA
QCBzdGF0aWMgSW5qZWN0ZWRCdW5kbGVUZXN0OjpSZWdpc3RlcjxQYXN0ZWJvYXJkTm90aWZpY2F0
aW9uc1Rlc3Q+IHJlZ2lzdHJhcigiUGFzdAogc3RhdGljIHZvaWQgd2lsbFdyaXRlVG9QYXN0ZWJv
YXJkKFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlLCAg
Y29uc3Qgdm9pZCopCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGlsOjp0
b1dLKCJQYXN0ZWJvYXJkTm90aWZpY2F0aW9uVGVzdERvbmVNZXNzYWdlTmFtZSIpLmdldCgpLCBV
dGlsOjp0b1dLKCJ3aWxsV3JpdGV0b1Bhc3RlYm9hcmRGYWlsIikuZ2V0KCkpOworICAgICAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2luZ2xldG9uKCku
YnVuZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0RG9uZU1lc3Nh
Z2VOYW1lIikuZ2V0KCksIFV0aWw6OnRvV0soIndpbGxXcml0ZXRvUGFzdGVib2FyZEZhaWwiKS5n
ZXQoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGdldFBhc3RlYm9hcmREYXRhRm9yUmFuZ2UoV0tCdW5k
bGVQYWdlUmVmLCBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlLCBXS0FycmF5UmVmKiBwYXN0
ZWJvYXJkVHlwZXMsIFdLQXJyYXlSZWYqIHBhc3RlYm9hcmREYXRhLCBjb25zdCB2b2lkKikKQEAg
LTYyLDcgKzYyLDcgQEAgc3RhdGljIHZvaWQgZ2V0UGFzdGVib2FyZERhdGFGb3JSYW5nZShXS0J1
bmRsZVBhZ2VSZWYsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgcmEKIAogc3RhdGljIHZvaWQgZGlk
V3JpdGVUb1Bhc3RlYm9hcmQoV0tCdW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKikKIHsKLSAgICBX
S0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkuYnVu
ZGxlKCksIFV0aWw6OnRvV0soIlBhc3RlYm9hcmROb3RpZmljYXRpb25UZXN0RG9uZU1lc3NhZ2VO
YW1lIikuZ2V0KCksIFV0aWw6OnRvV0soImRpZFdyaXRlVG9QYXN0ZWJvYXJkIikuZ2V0KCkpOwor
ICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiUGFzdGVib2FyZE5vdGlmaWNhdGlvblRlc3REb25l
TWVzc2FnZU5hbWUiKS5nZXQoKSwgVXRpbDo6dG9XSygiZGlkV3JpdGVUb1Bhc3RlYm9hcmQiKS5n
ZXQoKSk7CiB9CiAKIFBhc3RlYm9hcmROb3RpZmljYXRpb25zVGVzdDo6UGFzdGVib2FyZE5vdGlm
aWNhdGlvbnNUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxMb2FkX0J1bmRsZS5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcAppbmRl
eCAyY2IwNjg2YmE5NjhkNGQ0N2E4ODA1OGQyYjMwOTI3NDFmYWFlNjczLi4wOTFlNWE5NDJhMWU4
OTFmZGE3YzE4MzZiZGJiMmVlOGFkYTYwNGI0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcAorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbExvYWRfQnVuZGxlLmNwcApAQCAtNTAsNyArNTAsNyBA
QCBwcml2YXRlOgogICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgp
LCBVdGlsOjp0b1dLKCJVUkxSZXF1ZXN0UmV0dXJuIikuZ2V0KCksIHJlcXVlc3QpOwogICAgICAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dLKCJVc2Vy
RGF0YVJldHVybiIpLmdldCgpLCB1c2VyRGF0YSk7CiAKLSAgICAgICAgV0tCdW5kbGVQb3N0TWVz
c2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRsZSgpLCBVdGlsOjp0
b1dLKCJXaWxsTG9hZFVSTFJlcXVlc3RSZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIldpbGxMb2FkVVJMUmVxdWVzdFJldHVy
biIpLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQg
d2lsbExvYWREYXRhUmVxdWVzdChXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tVUkxSZXF1ZXN0UmVm
IHJlcXVlc3QsIFdLRGF0YVJlZiBkYXRhLCBXS1N0cmluZ1JlZiBNSU1FVHlwZSwgV0tTdHJpbmdS
ZWYgZW5jb2RpbmdOYW1lLCBXS1VSTFJlZiB1bnJlYWNoYWJsZVVSTCwgV0tUeXBlUmVmIHVzZXJE
YXRhLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQpAQCAtNjQsNyArNjQsNyBAQCBwcml2YXRlOgog
ICAgICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKG1lc3NhZ2VCb2R5LmdldCgpLCBVdGlsOjp0b1dL
KCJVbnJlYWNoYWJsZVVSTFJldHVybiIpLmdldCgpLCB1bnJlYWNoYWJsZVVSTCk7CiAgICAgICAg
IFdLRGljdGlvbmFyeVNldEl0ZW0obWVzc2FnZUJvZHkuZ2V0KCksIFV0aWw6OnRvV0soIlVzZXJE
YXRhUmV0dXJuIikuZ2V0KCksIHVzZXJEYXRhKTsKIAotICAgICAgICBXS0J1bmRsZVBvc3RNZXNz
YWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6c2hhcmVkKCkuYnVuZGxlKCksIFV0aWw6OnRv
V0soIldpbGxMb2FkRGF0YVJlcXVlc3RSZXR1cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkp
OworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKEluamVjdGVkQnVuZGxlQ29udHJvbGxlcjo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIFV0aWw6OnRvV0soIldpbGxMb2FkRGF0YVJlcXVlc3RSZXR1
cm4iKS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRFdmVudF9CdW5k
bGUuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyL1dpbGxTZW5kU3VibWl0
RXZlbnRfQnVuZGxlLmNwcAppbmRleCBmYzdjYThhY2U4YTMzOTJlNWJjNjY0MmE4OWY2ODNkZmQ4
YTMxZjZlLi5mYTdkMmE5YTdmODA4NGRmYWVkYTE4Y2I4MDY1YmZmMDZiODcyYmIyIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDIvV2lsbFNlbmRTdWJtaXRFdmVu
dF9CdW5kbGUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mi9XaWxs
U2VuZFN1Ym1pdEV2ZW50X0J1bmRsZS5jcHAKQEAgLTQ1LDcgKzQ1LDcgQEAgc3RhdGljIEluamVj
dGVkQnVuZGxlVGVzdDo6UmVnaXN0ZXI8V2lsbFNlbmRTdWJtaXRFdmVudFRlc3Q+IHJlZ2lzdHJh
cigiV2lsbFNlbmQKIAogc3RhdGljIHZvaWQgd2lsbFNlbmRTdWJtaXRFdmVudChXS0J1bmRsZVBh
Z2VSZWYsIFdLQnVuZGxlTm9kZUhhbmRsZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgV0tCdW5kbGVG
cmFtZVJlZiwgV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgY29uc3Qgdm9pZCopCiB7Ci0gICAgV0tC
dW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZUNvbnRyb2xsZXI6OnNoYXJlZCgpLmJ1bmRs
ZSgpLCBVdGlsOjp0b1dLKCJEaWRSZWNlaXZlV2lsbFNlbmRTdWJtaXRFdmVudCIpLmdldCgpLCB2
YWx1ZXMpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGVDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5idW5kbGUoKSwgVXRpbDo6dG9XSygiRGlkUmVjZWl2ZVdpbGxTZW5kU3Vi
bWl0RXZlbnQiKS5nZXQoKSwgdmFsdWVzKTsKIH0KIAogV2lsbFNlbmRTdWJtaXRFdmVudFRlc3Q6
OldpbGxTZW5kU3VibWl0RXZlbnRUZXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiBpZGVudGlmaWVyKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuY3BwCmluZGV4IDViYmJlZWVjMmE1Y2Q0
ODNkZjczOTY3N2Q4YTc0YTY3ZTM3OGJhNDMuLjkxMzMwNWQ3YmVmMDg4YTE5OGQxNmRhYTFjOTZj
NjVhMjM0MzEyNDAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzQ29udHJvbGxlci5jcHAKQEAg
LTU0LDcgKzU0LDcgQEAgY2xhc3MgUHJpbnRlciA6IHB1YmxpYyA6OnRlc3Rpbmc6OkVtcHR5VGVz
dEV2ZW50TGlzdGVuZXIgewogICAgIHN0ZDo6c3RyaW5nIGZhaWx1cmVzOwogfTsKIAotVGVzdHND
b250cm9sbGVyJiBUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpCitUZXN0c0NvbnRyb2xsZXImIFRl
c3RzQ29udHJvbGxlcjo6c2luZ2xldG9uKCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
VGVzdHNDb250cm9sbGVyPiBzaGFyZWQ7CiAgICAgcmV0dXJuIHNoYXJlZDsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmggYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzQ29udHJvbGxlci5oCmluZGV4IGY1NWFlYWFmM2JiNmM3MjdkMDNlYzcwYWFkNWJi
NzgxNDFiNzdiNzkuLmVhODQ5Njg1M2I5ZDU0M2NlOWZkMjYxMjJlY2E5OTE0OGI1NjliOTYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHNDb250cm9sbGVyLmgKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0c0NvbnRyb2xsZXIuaApAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgVGVzdFdlYktpdEFQSSB7CiAKIGNsYXNzIFRlc3RzQ29udHJvbGxlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFRlc3RzQ29udHJvbGxlciYgc2hhcmVkKCk7CisgICAgc3RhdGljIFRlc3Rz
Q29udHJvbGxlciYgc2luZ2xldG9uKCk7CiAKICAgICBib29sIHJ1bihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpOwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2VmbC9tYWluLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCmluZGV4IGZjMjliMWUwZTM5YmY5M2Jh
MmVmMDU0ZGI3ODUxZDIzYTMyNmMxNjEuLjkwMDJiYzdiNWY4MTFlNDQyMTI3ZDgyZGJkMGU4MjY3
MDdhODIxNmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZWZsL21haW4uY3BwCkBAIC01Niw3ICs1Niw3IEBAIGlu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKIAogICAgIHVzZVgxMVdpbmRvdyA9IGNoZWNr
Rm9yVXNlWDExV2luZG93QXJndW1lbnQoYXJnYywgYXJndik7CiAKLSAgICBpbnQgcmV0dXJuQ29k
ZSA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkucnVuKGFyZ2MsIGFy
Z3YpID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOworICAgIGludCByZXR1cm5Db2RlID0g
VGVzdFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJn
dikgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7CiAKICAgICBld2tfc2h1dGRvd24oKTsK
IApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvbWFpbi5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcAppbmRleCAxYjdmZWY2NGZkMDQyMGI5ODZlZWVjOGZh
OGFmMjdjZjk1ZmViNWU0Li4yYzY4NTY1OTVhZTMyN2M5OGFlMDAyZTIzNTY1ZGU2YTAzYTc5NGFk
IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2d0ay9tYWluLmNwcApAQCAtMzIsNSArMzIsNSBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CiAgICAgZ3RrX2luaXQoJmFyZ2MsICZhcmd2KTsKIAot
ICAgIHJldHVybiBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1bihh
cmdjLCBhcmd2KSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsKKyAgICByZXR1cm4gVGVz
dFdlYktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJndikg
PyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkU7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL2lvcy9tYWluSU9TLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvbWFpbklP
Uy5tbQppbmRleCBlYjFjZGY0ZTNkODI1OGQ3ZTczMGEwYmE2Y2NmNGNkMDg4YzBiZTUzLi5mYTJi
ZTJlYWMyNWNhNDViYjE0MWYyNjA5OGM1ZjYyZjlkYTI2NDgwIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2lvcy9tYWluSU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9z
L21haW5JT1MubW0KQEAgLTMxLDcgKzMxLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBh
cmd2KQogICAgIE5TQXV0b3JlbGVhc2VQb29sICpwb29sID0gW1tOU0F1dG9yZWxlYXNlUG9vbCBh
bGxvY10gaW5pdF07CiAKICAgICBbW05TVXNlckRlZmF1bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRz
XSByZW1vdmVQZXJzaXN0ZW50RG9tYWluRm9yTmFtZTpAIlRlc3RXZWJLaXRBUEkiXTsKLSAgICBi
b29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJvbGxlcjo6c2hhcmVkKCkucnVu
KGFyZ2MsIGFyZ3YpOworICAgIGJvb2wgcGFzc2VkID0gVGVzdFdlYktpdEFQSTo6VGVzdHNDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJndik7CiAKICAgICBbcG9vbCBkcmFpbl07
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0gYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL21hYy9tYWluTWFjLm1tCmluZGV4IDA5ODA0Y2U4MDQ3YjZmOWVmZjQ1
M2I3NWFjN2RlY2U0NjY3OWQ0ODEuLjBmMGZmOGRlN2UwYWRhZTNhMGRiZWY3YmMwNWY1NjY0M2Uy
ZTI1ZTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvbWFjL21haW5NYWMubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvbWFpbk1hYy5tbQpAQCAtMzMsNyArMzMsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgW1tOU1VzZXJEZWZhdWx0cyBzdGFu
ZGFyZFVzZXJEZWZhdWx0c10gcmVtb3ZlUGVyc2lzdGVudERvbWFpbkZvck5hbWU6QCJUZXN0V2Vi
S2l0QVBJIl07CiAgICAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwogCi0gICAg
Ym9vbCBwYXNzZWQgPSBUZXN0V2ViS2l0QVBJOjpUZXN0c0NvbnRyb2xsZXI6OnNoYXJlZCgpLnJ1
bihhcmdjLCBhcmd2KTsKKyAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29u
dHJvbGxlcjo6c2luZ2xldG9uKCkucnVuKGFyZ2MsIGFyZ3YpOwogCiAgICAgW3Bvb2wgZHJhaW5d
OwogCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9tYWluLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCmluZGV4IGQ5NDk5YzUyNGMzM2RhNmY4NjVmMjUx
OGRkYjdmZDMwNTMzYTY2NDkuLjcwYjZhMDk4NzljYzhjYTU1ZmQ2MDYzMDlhOTM0OTRjNjM4YTRh
ODggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvd2luL21haW4uY3BwCkBAIC01MCw3ICs1MCw3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgbGluZSBv
bmNlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzMyODY3PiBpcyBmaXhlZC4KICAgICA6Ok9sZUluaXRp
YWxpemUoMCk7CiAKLSAgICBib29sIHBhc3NlZCA9IFRlc3RXZWJLaXRBUEk6OlRlc3RzQ29udHJv
bGxlcjo6c2hhcmVkKCkucnVuKGFyZ2MsIGFyZ3YpOworICAgIGJvb2wgcGFzc2VkID0gVGVzdFdl
YktpdEFQSTo6VGVzdHNDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ydW4oYXJnYywgYXJndik7CiAK
ICAgICByZXR1cm4gcGFzc2VkID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAppbmRleCAzNDhkNjkxNzJmNTIxMDUzMGZjMTVm
YjIwZDFhYmZmNjA0NDEwMmNiLi44YjIyM2ZlNGM5OTBiMzMxZTgyZGIzNGNkOGJkNThhMTI5NWY1
MmJiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyLmNwcApAQCAtNzQsNyArNzQsNyBA
QCBib29sIEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjplbmhhbmNlZEFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkKICNpZiAhUExBVEZPUk0oR1RLKSAmJiAhUExBVEZPUk0oRUZMKQogUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1l
bnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIHZvaWQqIHJvb3QgPSBXS0Fj
Y2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpOwogICAgIAogICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KHJvb3Qp
KTsgICAgCkBAIC04Miw3ICs4Miw3IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OnJvb3RFbGVtZW50KCkKIAogUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6Zm9jdXNlZEVs
ZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIHZvaWQqIHJvb3QgPSBX
S0FjY2Vzc2liaWxpdHlGb2N1c2VkT2JqZWN0KHBhZ2UpOwogICAgIAogICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+
KHJvb3QpKTsgICAgCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9FdmVudFNlbmRpbmdDb250cm9sbGVyLmNwcAppbmRleCA5MGQ0ZjE1
MzljMmZiZWRmMTkxOGQ4YzYwZTIyN2ZiZmM3NjhiOGI2Li4yZTAxMDY0NzU3MGFiYzc2Y2IyY2Nh
NjZmYTg1MWFjNzk0OWIxZDFkIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0V2ZW50U2VuZGluZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvRXZlbnRTZW5kaW5nQ29udHJvbGxlci5jcHAKQEAg
LTIwOCw3ICsyMDgsOCBAQCBzdGF0aWMgV0tNdXRhYmxlRGljdGlvbmFyeVJlZiBjcmVhdGVNb3Vz
ZU1lc3NhZ2VCb2R5KE1vdXNlU3RhdGUgc3RhdGUsIGludCBidXR0bwogCiB2b2lkIEV2ZW50U2Vu
ZGluZ0NvbnRyb2xsZXI6Om1vdXNlRG93bihpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVy
QXJyYXkpIAogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIGF1dG8mIGluamVjdGVkQnVuZ2xlID0gSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gaW5qZWN0
ZWRCdW5nbGUucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdL
QnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChmcmFtZSk7CiAgICAgV0tFdmVudE1v
ZGlmaWVycyBtb2RpZmllcnMgPSBwYXJzZU1vZGlmaWVyQXJyYXkoY29udGV4dCwgbW9kaWZpZXJB
cnJheSk7CkBAIC0yMTYsMTIgKzIxNywxMiBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6
Om1vdXNlRG93bihpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0YWlu
UHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkoQWRvcHRX
SywgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZURvd24sIGJ1dHRvbiwgbW9kaWZpZXJzKSk7
CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoaW5qZWN0ZWRCdW5nbGUuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6Om1vdXNlVXAoaW50IGJ1dHRvbiwgSlNWYWx1ZVJlZiBtb2RpZmllckFycmF5
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwogICAgIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1v
ZGlmaWVyQXJyYXkpOwpAQCAtMjI5LDcgKzIzMCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6bW91c2VVcChpbnQgYnV0dG9uLCBKU1ZhbHVlUmVmIG1vZGlmaWVyQXJyYXkpCiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0
YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkoQWRv
cHRXSywgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVycykp
OwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNz
YWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNz
YWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZv
aWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8oaW50IHgsIGludCB5KQpAQCAt
MjQ5LDcgKzI1MCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6bW91c2VNb3ZlVG8o
aW50IHgsIGludCB5KQogICAgIFdLUmV0YWluUHRyPFdLRG91YmxlUmVmPiB5UmVmKEFkb3B0V0ss
IFdLRG91YmxlQ3JlYXRlKHkpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6bGVhcEZvcndhcmQoaW50IG1pbGxpc2Vjb25kcykKQEAgLTI2NSw3ICsyNjYs
NyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmxlYXBGb3J3YXJkKGludCBtaWxsaXNl
Y29uZHMpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHRpbWVSZWYoQWRvcHRXSywgV0tV
SW50NjRDcmVhdGUobWlsbGlzZWNvbmRzKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCB0aW1lS2V5LmdldCgpLCB0aW1lUmVmLmdldCgpKTsK
IAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxlQXN5bmNocm9ub3VzQ2xpY2soKQpAQCAt
Mjc3LDExICsyNzgsMTEgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjpzY2hlZHVsZUFz
eW5jaHJvbm91c0NsaWNrKCkKIAogICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSBkb3duLgogICAg
IFdLUmV0YWluUHRyPFdLTXV0YWJsZURpY3Rpb25hcnlSZWY+IG1vdXNlRG93bk1lc3NhZ2VCb2R5
KEFkb3B0V0ssIGNyZWF0ZU1vdXNlTWVzc2FnZUJvZHkoTW91c2VEb3duLCBidXR0b24sIG1vZGlm
aWVycykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBtb3VzZURvd25NZXNzYWdl
Qm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIG1vdXNlRG93
bk1lc3NhZ2VCb2R5LmdldCgpKTsKIAogICAgIC8vIEFzeW5jaHJvbm91cyBtb3VzZSB1cC4KICAg
ICBXS1JldGFpblB0cjxXS011dGFibGVEaWN0aW9uYXJ5UmVmPiBtb3VzZVVwTWVzc2FnZUJvZHko
QWRvcHRXSywgY3JlYXRlTW91c2VNZXNzYWdlQm9keShNb3VzZVVwLCBidXR0b24sIG1vZGlmaWVy
cykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBtb3VzZVVwTWVzc2FnZUJvZHku
Z2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRv
bigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBtb3VzZVVwTWVzc2Fn
ZUJvZHkuZ2V0KCkpOwogfQogCiBzdGF0aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFy
eVJlZj4gY3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KEpTU3RyaW5nUmVmIGtleSwgV0tFdmVudE1v
ZGlmaWVycyBtb2RpZmllcnMsIGludCBsb2NhdGlvbikKQEAgLTMwOCw3ICszMDksNyBAQCBzdGF0
aWMgV0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4gY3JlYXRlS2V5RG93bk1lc3Nh
Z2VCb2R5KEpTU3RyaW5nUmVmCiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6a2V5RG93
bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwgaW50IGxvY2F0aW9u
KQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGNv
bnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQoZnJhbWUpOwogICAgIFdL
RXZlbnRNb2RpZmllcnMgbW9kaWZpZXJzID0gcGFyc2VNb2RpZmllckFycmF5KGNvbnRleHQsIG1v
ZGlmaWVyQXJyYXkpOwpAQCAtMzE2LDcgKzMxNyw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJv
bGxlcjo6a2V5RG93bihKU1N0cmluZ1JlZiBrZXksIEpTVmFsdWVSZWYgbW9kaWZpZXJBcnJheSwK
ICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gRXZlbnRTZW5kZXJNZXNzYWdlTmFtZShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiRXZlbnRTZW5kZXIiKSk7CiAgICAg
V0tSZXRhaW5QdHI8V0tNdXRhYmxlRGljdGlvbmFyeVJlZj4ga2V5RG93bk1lc3NhZ2VCb2R5ID0g
Y3JlYXRlS2V5RG93bk1lc3NhZ2VCb2R5KGtleSwgbW9kaWZpZXJzLCBsb2NhdGlvbik7CiAKLSAg
ICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBrZXlEb3duTWVzc2FnZUJv
ZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0
KCksIGtleURvd25NZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5n
Q29udHJvbGxlcjo6c2NoZWR1bGVBc3luY2hyb25vdXNLZXlEb3duKEpTU3RyaW5nUmVmIGtleSkK
QEAgLTMyNCw3ICszMjUsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjaGVkdWxl
QXN5bmNocm9ub3VzS2V5RG93bihKU1N0cmluZ1JlZiBrZXkpCiAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIkV2ZW50U2VuZGVyIikpOwogICAgIFdLUmV0YWluUHRyPFdLTXV0YWJs
ZURpY3Rpb25hcnlSZWY+IGtleURvd25NZXNzYWdlQm9keSA9IGNyZWF0ZUtleURvd25NZXNzYWdl
Qm9keShrZXksIDAgLyogbW9kaWZpZXJzICovLCAwIC8qIGxvY2F0aW9uICovKTsKIAotICAgIFdL
QnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBrZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCkpOworICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBrZXlEb3duTWVzc2FnZUJvZHkuZ2V0KCkp
OwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Om1vdXNlU2Nyb2xsQnkoaW50IHgs
IGludCB5KQpAQCAtMzQ0LDcgKzM0NSw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
bW91c2VTY3JvbGxCeShpbnQgeCwgaW50IHkpCiAgICAgV0tSZXRhaW5QdHI8V0tEb3VibGVSZWY+
IHlSZWYoQWRvcHRXSywgV0tEb3VibGVDcmVhdGUoeSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgeUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7
CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50
dW1QaGFzZXMoaW50IHgsIGludCB5LCBKU1N0cmluZ1JlZiBwaGFzZVN0ciwgSlNTdHJpbmdSZWYg
bW9tZW50dW1TdHIsIGJvb2wgYXN5bmNTY3JvbGxpbmcpCkBAIC0zOTcsOSArMzk4LDkgQEAgdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjptb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50
dW1QaGFzZXMoaW50IHgsIGludAogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJN
ZXNzYWdlQm9keS5nZXQoKSwgbW9tZW50dW1LZXkuZ2V0KCksIG1vbWVudHVtUmVmLmdldCgpKTsK
IAogICAgIGlmIChhc3luY1Njcm9sbGluZykKLSAgICAgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgICAgICBXS0J1bmRsZVBv
c3RNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5k
ZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSk7CiAgICAg
ZWxzZQotICAgICAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVu
dFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICAgICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CiB9CiAKIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y29udGludW91c01vdXNlU2Nyb2xs
QnkoaW50IHgsIGludCB5LCBib29sIHBhZ2VkKQpAQCAtNDIzLDEyICs0MjQsMTIgQEAgdm9pZCBF
dmVudFNlbmRpbmdDb250cm9sbGVyOjpjb250aW51b3VzTW91c2VTY3JvbGxCeShpbnQgeCwgaW50
IHksIGJvb2wgcGFnZWQpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IHBhZ2VkUmVmKEFk
b3B0V0ssIFdLVUludDY0Q3JlYXRlKHBhZ2VkKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBwYWdlZEtleS5nZXQoKSwgcGFnZWRSZWYuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAK
IEpTVmFsdWVSZWYgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y29udGV4dENsaWNrKCkKIHsKLSAg
ICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCkt
PnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2lmIEVO
QUJMRShDT05URVhUX01FTlVTKQpAQCAtNDU2LDQ0ICs0NTcsNDggQEAgSlNWYWx1ZVJlZiBFdmVu
dFNlbmRpbmdDb250cm9sbGVyOjpjb250ZXh0Q2xpY2soKQogCiB2b2lkIEV2ZW50U2VuZGluZ0Nv
bnRyb2xsZXI6OnRleHRab29tSW4oKQogeworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEVuc3VyZSBwYWdlIHpvb20gaXMgcmVz
ZXQuCi0gICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZh
Y3RvcihpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgMSk7CiAKLSAgICBkb3VibGUgem9v
bUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFRleHRab29tRmFjdG9yKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0
b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB6b29tRmFjdG9yICog
Wm9vbU11bHRpcGxpZXJSYXRpbyk7CisgICAgZG91YmxlIHpvb21GYWN0b3IgPSBXS0J1bmRsZVBh
Z2VHZXRUZXh0Wm9vbUZhY3RvcihpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7CisgICAg
V0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdl
KCksIHpvb21GYWN0b3IgKiBab29tTXVsdGlwbGllclJhdGlvKTsKIH0KIAogdm9pZCBFdmVudFNl
bmRpbmdDb250cm9sbGVyOjp0ZXh0Wm9vbU91dCgpCiB7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgLy8gRW5zdXJlIHBhZ2Ugem9v
bSBpcyByZXNldC4KLSAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIDEpOworICAgIFdLQnVuZGxlUGFnZVNldFBh
Z2Vab29tRmFjdG9yKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCAxKTsKIAotICAgIGRv
dWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0VGV4dFpvb21GYWN0b3IoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0
Wm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHpvb21G
YWN0b3IgLyBab29tTXVsdGlwbGllclJhdGlvKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9IFdL
QnVuZGxlUGFnZUdldFRleHRab29tRmFjdG9yKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgp
KTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZhY3RvcihpbmplY3RlZEJ1bmRsZS5wYWdl
KCktPnBhZ2UoKSwgem9vbUZhY3RvciAvIFpvb21NdWx0aXBsaWVyUmF0aW8pOwogfQogCiB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6Onpvb21QYWdlSW4oKQogeworICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEVuc3VyZSB0
ZXh0IHpvb20gaXMgcmVzZXQuCi0gICAgV0tCdW5kbGVQYWdlU2V0VGV4dFpvb21GYWN0b3IoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCAxKTsKKyAgICBXS0J1bmRsZVBh
Z2VTZXRUZXh0Wm9vbUZhY3RvcihpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgMSk7CiAK
LSAgICBkb3VibGUgem9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgV0tCdW5kbGVQYWdl
U2V0UGFnZVpvb21GYWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgp
LCB6b29tRmFjdG9yICogWm9vbU11bHRpcGxpZXJSYXRpbyk7CisgICAgZG91YmxlIHpvb21GYWN0
b3IgPSBXS0J1bmRsZVBhZ2VHZXRQYWdlWm9vbUZhY3RvcihpbmplY3RlZEJ1bmRsZS5wYWdlKCkt
PnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdlU2V0UGFnZVpvb21GYWN0b3IoaW5qZWN0ZWRCdW5k
bGUucGFnZSgpLT5wYWdlKCksIHpvb21GYWN0b3IgKiBab29tTXVsdGlwbGllclJhdGlvKTsKIH0K
IAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp6b29tUGFnZU91dCgpCiB7CisgICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CiAgICAgLy8g
RW5zdXJlIHRleHQgem9vbSBpcyByZXNldC4KLSAgICBXS0J1bmRsZVBhZ2VTZXRUZXh0Wm9vbUZh
Y3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIDEpOworICAgIFdL
QnVuZGxlUGFnZVNldFRleHRab29tRmFjdG9yKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgp
LCAxKTsKIAotICAgIGRvdWJsZSB6b29tRmFjdG9yID0gV0tCdW5kbGVQYWdlR2V0UGFnZVpvb21G
YWN0b3IoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICBXS0J1
bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgp
LT5wYWdlKCksIHpvb21GYWN0b3IgLyBab29tTXVsdGlwbGllclJhdGlvKTsKKyAgICBkb3VibGUg
em9vbUZhY3RvciA9IFdLQnVuZGxlUGFnZUdldFBhZ2Vab29tRmFjdG9yKGluamVjdGVkQnVuZGxl
LnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZVBhZ2VTZXRQYWdlWm9vbUZhY3Rvcihpbmpl
Y3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwgem9vbUZhY3RvciAvIFpvb21NdWx0aXBsaWVyUmF0
aW8pOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnNjYWxlUGFnZUJ5KGRvdWJs
ZSBzY2FsZSwgZG91YmxlIHgsIGRvdWJsZSB5KQogewogICAgIFdLUG9pbnQgb3JpZ2luID0geyB4
LCB5IH07Ci0gICAgV0tCdW5kbGVQYWdlU2V0U2NhbGVBdE9yaWdpbihJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHNjYWxlLCBvcmlnaW4pOworICAgIFdLQnVuZGxlUGFn
ZVNldFNjYWxlQXRPcmlnaW4oSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpLCBzY2FsZSwgb3JpZ2luKTsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC01
MTQsNyArNTE5LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjphZGRUb3VjaFBvaW50
KGludCB4LCBpbnQgeSkKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4geVJlZihBZG9wdFdL
LCBXS1VJbnQ2NENyZWF0ZSh5KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCB5S2V5LmdldCgpLCB5UmVmLmdldCgpKTsKIAotICAgIFdLQnVu
ZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHku
Z2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCks
IEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGlu
Z0NvbnRyb2xsZXI6OnVwZGF0ZVRvdWNoUG9pbnQoaW50IGluZGV4LCBpbnQgeCwgaW50IHkpCkBA
IC01MzgsNyArNTQzLDcgQEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp1cGRhdGVUb3Vj
aFBvaW50KGludCBpbmRleCwgaW50IHgsIGludCB5KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0
UmVmPiB5UmVmKEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKHkpKTsKICAgICBXS0RpY3Rpb25hcnlT
ZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHlLZXkuZ2V0KCksIHlSZWYuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAK
IHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0
cmluZ1JlZiAmbW9kaWZpZXIsIGJvb2wgZW5hYmxlKQpAQCAtNTY4LDcgKzU3Myw3IEBAIHZvaWQg
RXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6c2V0VG91Y2hNb2RpZmllcihjb25zdCBKU1N0cmluZ1Jl
ZiAmbW9kaWZpZXIsIGJvb2wKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gZW5hYmxlUmVm
KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKGVuYWJsZSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0
ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgZW5hYmxlS2V5LmdldCgpLCBlbmFibGVS
ZWYuZ2V0KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwg
RXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hy
b25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7
CiB9CiAKIApAQCAtNTg5LDcgKzU5NCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6
c2V0VG91Y2hQb2ludFJhZGl1cyhpbnQgcmFkaXVzWCwgaW50IHJhZGl1c1kpCiAgICAgV0tSZXRh
aW5QdHI8V0tVSW50NjRSZWY+IHlSZWYoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUocmFkaXVzWSkp
OwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwg
eUtleS5nZXQoKSwgeVJlZi5nZXQoKSk7CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01l
c3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1
bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1
bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VC
b2R5LmdldCgpLCAwKTsKIH0KIAogdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaFN0
YXJ0KCkKQEAgLTYwMSw3ICs2MDYsNyBAQCB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OnRv
dWNoU3RhcnQoKQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJNZXNzYWdlTmFtZShB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hTdGFydCIpKTsKICAg
ICBXS0RpY3Rpb25hcnlTZXRJdGVtKEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1l
c3NhZ2VLZXkuZ2V0KCksIHN1Yk1lc3NhZ2VOYW1lLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2
ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCks
IDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50
U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRy
b2xsZXI6OnRvdWNoTW92ZSgpCkBAIC02MTMsNyArNjE4LDcgQEAgdm9pZCBFdmVudFNlbmRpbmdD
b250cm9sbGVyOjp0b3VjaE1vdmUoKQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzdWJN
ZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVG91Y2hN
b3ZlIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwogCi0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hFbmQoKQpAQCAtNjI1LDcgKzYzMCw3IEBAIHZvaWQgRXZl
bnRTZW5kaW5nQ29udHJvbGxlcjo6dG91Y2hFbmQoKQogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBzdWJNZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZygiVG91Y2hFbmQiKSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShFdmVudFNlbmRlck1lc3Nh
Z2VCb2R5LmdldCgpLCBzdWJNZXNzYWdlS2V5LmdldCgpLCBzdWJNZXNzYWdlTmFtZS5nZXQoKSk7
CiAKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3NhZ2VOYW1lLmdldCgpLCBFdmVudFNlbmRl
ck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3Nh
Z2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBFdmVudFNlbmRlck1lc3Nh
Z2VOYW1lLmdldCgpLCBFdmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCAwKTsKIH0KIAogdm9p
ZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaENhbmNlbCgpCkBAIC02MzcsNyArNjQyLDcg
QEAgdm9pZCBFdmVudFNlbmRpbmdDb250cm9sbGVyOjp0b3VjaENhbmNlbCgpCiAgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKCJUb3VjaENhbmNlbCIpKTsKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVt
KEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIHN1Yk1lc3NhZ2VLZXkuZ2V0KCksIHN1Yk1l
c3NhZ2VOYW1lLmdldCgpKTsKIAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUu
Z2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9z
dFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0
KCksIDApOwogfQogCiB2b2lkIEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNsZWFyVG91Y2hQb2lu
dHMoKQpAQCAtNjQ5LDcgKzY1NCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2xl
YXJUb3VjaFBvaW50cygpCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN1Yk1lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDbGVhclRvdWNoUG9p
bnRzIikpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5n
ZXQoKSwgc3ViTWVzc2FnZUtleS5nZXQoKSwgc3ViTWVzc2FnZU5hbWUuZ2V0KCkpOwogCi0gICAg
V0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdl
Qm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5n
ZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAKIHZvaWQgRXZlbnRT
ZW5kaW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQoaW50IGluZGV4KQpAQCAtNjY1LDcg
KzY3MCw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6cmVsZWFzZVRvdWNoUG9pbnQo
aW50IGluZGV4KQogICAgIFdLUmV0YWluUHRyPFdLVUludDY0UmVmPiBpbmRleFJlZihBZG9wdFdL
LCBXS1VJbnQ2NENyZWF0ZShpbmRleCkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgaW5kZXhLZXkuZ2V0KCksIGluZGV4UmVmLmdldCgpKTsK
IAotICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2FnZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVy
TWVzc2FnZUJvZHkuZ2V0KCksIDApOworICAgIFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIEV2ZW50U2VuZGVyTWVzc2Fn
ZU5hbWUuZ2V0KCksIEV2ZW50U2VuZGVyTWVzc2FnZUJvZHkuZ2V0KCksIDApOwogfQogCiB2b2lk
IEV2ZW50U2VuZGluZ0NvbnRyb2xsZXI6OmNhbmNlbFRvdWNoUG9pbnQoaW50IGluZGV4KQpAQCAt
NjgxLDcgKzY4Niw3IEBAIHZvaWQgRXZlbnRTZW5kaW5nQ29udHJvbGxlcjo6Y2FuY2VsVG91Y2hQ
b2ludChpbnQgaW5kZXgpCiAgICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IGluZGV4UmVmKEFk
b3B0V0ssIFdLVUludDY0Q3JlYXRlKGluZGV4KSk7CiAgICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShF
dmVudFNlbmRlck1lc3NhZ2VCb2R5LmdldCgpLCBpbmRleEtleS5nZXQoKSwgaW5kZXhSZWYuZ2V0
KCkpOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJNZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRT
ZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CisgICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNN
ZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgRXZlbnRTZW5kZXJN
ZXNzYWdlTmFtZS5nZXQoKSwgRXZlbnRTZW5kZXJNZXNzYWdlQm9keS5nZXQoKSwgMCk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9HQ0NvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9HQ0NvbnRyb2xsZXIuY3BwCmluZGV4IDE4M2ZmNWVkMDNhOTA2ZDQ3NzU0ZTZjMjgzZDYxZDJi
NjgwNGFmMTEuLmZkMGNjM2E3OGFhNDljOGE2ZmY0ODVmNmE5OTAzNmYwMmYyZjJjOTIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvR0NDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0dDQ29udHJv
bGxlci5jcHAKQEAgLTUyLDE3ICs1MiwxNyBAQCBKU0NsYXNzUmVmIEdDQ29udHJvbGxlcjo6d3Jh
cHBlckNsYXNzKCkKIAogdm9pZCBHQ0NvbnRyb2xsZXI6OmNvbGxlY3QoKQogewotICAgIFdLQnVu
ZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkuYnVuZGxlKCkpOworICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0
cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiB2b2lkIEdDQ29u
dHJvbGxlcjo6Y29sbGVjdE9uQWx0ZXJuYXRlVGhyZWFkKGJvb2wgd2FpdFVudGlsRG9uZSkKIHsK
LSAgICBXS0J1bmRsZUdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlwdE9iamVjdHNPbkFsdGVybmF0ZVRo
cmVhZEZvckRlYnVnZ2luZyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHdhaXRV
bnRpbERvbmUpOworICAgIFdLQnVuZGxlR2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0c09u
QWx0ZXJuYXRlVGhyZWFkRm9yRGVidWdnaW5nKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgd2FpdFVudGlsRG9uZSk7CiB9CiAKIHNpemVfdCBHQ0NvbnRyb2xsZXI6OmdldEpT
T2JqZWN0Q291bnQoKQogewotICAgIHJldHVybiBXS0J1bmRsZUdldEphdmFTY3JpcHRPYmplY3Rz
Q291bnQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpKTsKKyAgICByZXR1cm4gV0tC
dW5kbGVHZXRKYXZhU2NyaXB0T2JqZWN0c0NvdW50KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KS5idW5kbGUoKSk7CiB9CiAKIC8vIE9iamVjdCBDcmVhdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRl
eCBkMjZlZDk0YmYwMTVjZTMxM2Y4NWI2M2ExNmIxODg0ZTc0ZTE3YTY1Li40NGVhMzkxNTBjYmQ4
MmEyNTcwM2MzNmNmYjkwMjgxM2QyZmM3N2UyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtNDEsNyAr
NDEsNyBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAotSW5qZWN0ZWRCdW5kbGUmIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKQorSW5qZWN0ZWRCdW5kbGUmIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KQogewogICAgIHN0YXRpYyBJbmplY3RlZEJ1bmRsZSYgc2hhcmVkID0gKm5ldyBJbmplY3RlZEJ1
bmRsZTsKICAgICByZXR1cm4gc2hhcmVkOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCmluZGV4IDhmMGE4NDA0ODA5NTg4
YTlmM2I0ZDA4MmZiOTczOWIyZWU1Yzc5M2QuLjYwMzU0MzRjOWI0MzJjYTEyOTEyMzg5ZWUxMWZm
ZjVmMjUyZTQxYzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTQ0LDcgKzQ0LDcgQEAgY2xhc3MgSW5qZWN0
ZWRCdW5kbGVQYWdlOwogCiBjbGFzcyBJbmplY3RlZEJ1bmRsZSB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIEluamVjdGVkQnVuZGxlJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgSW5qZWN0ZWRCdW5kbGUm
IHNpbmdsZXRvbigpOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgSW5qZWN0ZWRCdW5kbGUuCiAg
ICAgdm9pZCBpbml0aWFsaXplKFdLQnVuZGxlUmVmLCBXS1R5cGVSZWYgaW5pdGlhbGl6YXRpb25V
c2VyRGF0YSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlTWFpbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlTWFpbi5jcHAKaW5kZXggOWM0YjAzZWNlNmJjNTBhM2Vm
NjE2NTYxNzQ4MzM1ODk0NjczNDIyZi4uNGYxMjcyMjE0NzhmZDA1NDdjZDc1ZDgyZDZkMGE4MTI4
YWYwNGE2OCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZU1haW4uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVNYWluLmNwcApAQCAtMzEsNSArMzEsNSBAQAogZXh0
ZXJuICJDIgogdm9pZCBXS0J1bmRsZUluaXRpYWxpemUoV0tCdW5kbGVSZWYgYnVuZGxlLCBXS1R5
cGVSZWYgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSkKIHsKLSAgICBXVFI6OkluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pbml0aWFsaXplKGJ1bmRsZSwgaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSk7Cisg
ICAgV1RSOjpJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuaW5pdGlhbGl6ZShidW5kbGUsIGlu
aXRpYWxpemF0aW9uVXNlckRhdGEpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IDA4
ZjgxMTU5ZTQ3YjdhMGFjZjM5MWMyNmU1OTgyMDVkZTUwZDQ1NTAuLmNiOGY5NGM4ZTUzM2UyYzQ5
MzM1OTQ0NTdjOTU4NTJlOTgwMGM1OWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTI0
MCw3ICsyNDAsNyBAQCBzdGF0aWMgaW5saW5lIFdURjo6U3RyaW5nIHBhdGhTdWl0YWJsZUZvclRl
c3RSZXN1bHQoV0tVUkxSZWYgZmlsZVVybCkKICAgICBpZiAoIWlzTG9jYWxGaWxlU2NoZW1lKHNj
aGVtZVN0cmluZy5nZXQoKSkpCiAgICAgICAgIHJldHVybiB0b1dURlN0cmluZyhhZG9wdFdLKFdL
VVJMQ29weVN0cmluZyhmaWxlVXJsKSkpOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdL
QnVuZGxlRnJhbWVDb3B5VVJMKG1haW5GcmFtZSkpOwogICAgIGlmICghbWFpbkZyYW1lVVJMKQog
ICAgICAgICBtYWluRnJhbWVVUkwgPSBhZG9wdFdLKFdLQnVuZGxlRnJhbWVDb3B5UHJvdmlzaW9u
YWxVUkwobWFpbkZyYW1lKSk7CkBAIC00NjMsNyArNDYzLDcgQEAgc3RhdGljIHZvaWQgZHVtcExv
YWRFdmVudChXS0J1bmRsZUZyYW1lUmVmIGZyYW1lLCBjb25zdCBjaGFyKiBldmVudE5hbWUpCiAg
ICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgLSAiKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZChldmVudE5hbWUpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAg
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJp
bmcoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGR1bXBSZXF1ZXN0
RGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoV0tVUkxSZXF1ZXN0UmVmIHJlcXVlc3Qs
IFN0cmluZ0J1aWxkZXImIHN0cmluZ0J1aWxkZXIpCkBAIC02NTIsMzIgKzY1MiwzNCBAQCBib29s
IEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2FjaGVSZXNwb25zZShXS0J1bmRsZVBhZ2VSZWYg
cGFnZSwgV0tCdW5kbGVGcmFtZQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkU3RhcnRQ
cm92aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBp
bmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWlu
amVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT50ZXN0VVJMKCkpIHsKKyAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+dGVzdFVSTCgpKSB7CiAgICAgICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB0ZXN0VVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29w
eVByb3Zpc2lvbmFsVVJMKGZyYW1lKSk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNldFRlc3RVUkwodGVzdFVSTC5nZXQoKSk7CisgICAgICAgIGluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2V0VGVzdFVSTCh0ZXN0VVJMLmdldCgpKTsKICAgICB9
CiAKICAgICBwbGF0Zm9ybURpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoZnJhbWUpOwog
Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZl
bnQoZnJhbWUsICJkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIik7CiAKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50b3BMb2FkaW5nRnJhbWUoKSkKLSAgICAgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFRvcExvYWRpbmdGcmFtZShmcmFtZSk7CisgICAgaWYg
KCFpbmplY3RlZEJ1bmRsZS50b3BMb2FkaW5nRnJhbWUoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5k
bGUuc2V0VG9wTG9hZGluZ0ZyYW1lKGZyYW1lKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRTdG9wUHJvdmlzaW9uYWxGcmFtZUxvYWRzKCkp
CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkU3RvcFByb3Zpc2lv
bmFsRnJhbWVMb2FkcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAic3RvcHBpbmcg
bG9hZCBpbiBkaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lIGNhbGxiYWNrIik7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVj
dGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZHVtcExv
YWRFdmVudChmcmFtZSwgImRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZEZvckZyYW1lIik7CkBAIC02ODUsMTAgKzY4NywxMSBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFn
ZTo6ZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkRm9yRnJhbWUoV0tC
dQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbFByb3Zpc2lvbmFsTG9hZFdpdGhF
cnJvckZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLRXJyb3JSZWYpCiB7Ci0gICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGF1dG8m
IGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIGlmICgh
aW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1l
TG9hZENhbGxiYWNrcygpKQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKICAgICAgICAgZHVtcExvYWRFdmVudChmcmFt
ZSwgImRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3IiKTsKIAogICAgIGZyYW1lRGlkQ2hh
bmdlTG9jYXRpb24oZnJhbWUpOwpAQCAtNjk2LDEwICs2OTksMTEgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmRpZEZhaWxQcm92aXNpb25hbExvYWRXaXRoRXJyb3JGb3JGcmFtZShXS0J1bmRs
ZUZyYW1lUmUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENvbW1pdExvYWRGb3JGcmFt
ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1
bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAg
aWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxs
YmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZHVtcExvYWRFdmVudChmcmFtZSwgImRp
ZENvbW1pdExvYWRGb3JGcmFtZSIpOwpAQCAtNzA3LDEzICs3MTEsMTQgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OmRpZENvbW1pdExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
KQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoUHJvZ3Jlc3MoKQogewotICAg
IGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAo
IWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUHJv
Z3Jlc3NGaW5pc2hlZENhbGxiYWNrKCkpCisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZER1bXBQcm9ncmVzc0ZpbmlzaGVkQ2FsbGJhY2soKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoInBvc3RQcm9n
cmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uXG4iKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KCJwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvblxuIik7CiB9CiAKIGVudW0gRnJh
bWVOYW1lUG9saWN5IHsgU2hvdWxkTm90SW5jbHVkZUZyYW1lTmFtZSwgU2hvdWxkSW5jbHVkZUZy
YW1lTmFtZSB9OwpAQCAtODM0LDcgKzgzOSw4IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
dW1wRE9NQXNXZWJBcmNoaXZlKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFN0cmluZ0J1aWxkCiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKIHsKLSAgICBBU1NFUlQoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSk7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5k
bGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgQVNTRVJUKGluamVjdGVkQnVu
ZGxlLmlzVGVzdFJ1bm5pbmcoKSk7CiAKICAgICAvLyBGb3JjZSBhIHBhaW50IGJlZm9yZSBkdW1w
aW5nLiBUaGlzIG1hdGNoZXMgRHVtcFJlbmRlclRyZWUgb24gV2luZG93cy4gKER1bXBSZW5kZXJU
cmVlIG9uIE1hYwogICAgIC8vIGRvZXMgdGhpcyBhdCBhIHNsaWdodGx5IGRpZmZlcmVudCB0aW1l
LikgU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzU1NDY5PiBmb3IgZGV0YWlscy4KQEAgLTg0NSwx
MyArODUxLDEzIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICBTdHJpbmcg
dXJsID0gdG9XVEZTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcodXJsUmVmLmdldCgpKSkp
OwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtaW1lVHlwZSA9IGFkb3B0V0soV0tCdW5k
bGVGcmFtZUNvcHlNSU1FVHlwZUZvclJlc291cmNlV2l0aFVSTChmcmFtZSwgdXJsUmVmLmdldCgp
KSk7CiAgICAgaWYgKHVybC5maW5kKCJkdW1wQXNUZXh0LyIpICE9IG5vdEZvdW5kIHx8IFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWltZVR5cGUuZ2V0KCksICJ0ZXh0L3BsYWluIikpCi0g
ICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPmR1bXBBc1RleHQo
ZmFsc2UpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmR1bXBBc1RleHQo
ZmFsc2UpOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCi0gICAgc3dpdGNo
IChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT53aGF0VG9EdW1wKCkpIHsK
KyAgICBzd2l0Y2ggKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+d2hhdFRvRHVtcCgpKSB7
CiAgICAgY2FzZSBUZXN0UnVubmVyOjpSZW5kZXJUcmVlOiB7Ci0gICAgICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5pc1ByaW50aW5nKCkpCisgICAgICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUHJpbnRpbmcoKSkKICAgICAgICAgICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKGFkb3B0V0soV0tCdW5kbGVQYWdlQ29w
eVJlbmRlclRyZWVFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRpbmcobV9wYWdlKSkuZ2V0
KCkpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9X
VEZTdHJpbmcoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5UmVuZGVyVHJlZUV4dGVybmFsUmVwcmVz
ZW50YXRpb24obV9wYWdlKSkuZ2V0KCkpKTsKQEAgLTg3MCwzNCArODc2LDM1IEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGVQYWdlOjpkdW1wKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYg
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBBbGxGcmFt
ZVNjcm9sbFBvc2l0aW9ucygpKQorICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBBbGxGcmFtZVNjcm9sbFBvc2l0aW9ucygpKQogICAgICAgICBkdW1wQWxsRnJh
bWVTY3JvbGxQb3NpdGlvbnMoc3RyaW5nQnVpbGRlcik7Ci0gICAgZWxzZSBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcE1haW5GcmFtZVNjcm9sbFBv
c2l0aW9uKCkpCisgICAgZWxzZSBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wTWFpbkZyYW1lU2Nyb2xsUG9zaXRpb24oKSkKICAgICAgICAgZHVtcEZyYW1lU2Nyb2xs
UG9zaXRpb24oV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKG1fcGFnZSksIHN0cmluZ0J1aWxkZXIp
OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3Vs
ZER1bXBCYWNrRm9yd2FyZExpc3RzRm9yQWxsV2luZG93cygpKQotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuZHVtcEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhzdHJpbmdCdWls
ZGVyKTsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQmFj
a0ZvcndhcmRMaXN0c0ZvckFsbFdpbmRvd3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUuZHVt
cEJhY2tGb3J3YXJkTGlzdHNGb3JBbGxQYWdlcyhzdHJpbmdCdWlsZGVyKTsKIAotICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2hvdWxkRHVtcFBpeGVscygpICYmIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBQaXhlbHMoKSkgeworICAgIGlm
IChpbmplY3RlZEJ1bmRsZS5zaG91bGREdW1wUGl4ZWxzKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wUGl4ZWxzKCkpIHsKICAgICAgICAgV0tTbmFwc2hvdE9wdGlv
bnMgb3B0aW9ucyA9IGtXS1NuYXBzaG90T3B0aW9uc1NoYXJlYWJsZSB8IGtXS1NuYXBzaG90T3B0
aW9uc0luVmlld0Nvb3JkaW5hdGVzOwotICAgICAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSkKKyAgICAgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFNlbGVjdGlvblJlY3QoKSkK
ICAgICAgICAgICAgIG9wdGlvbnMgfD0ga1dLU25hcHNob3RPcHRpb25zUGFpbnRTZWxlY3Rpb25S
ZWN0YW5nbGU7CiAKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldFBpeGVsUmVz
dWx0KGFkb3B0V0soV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0aW9ucyhtX3BhZ2Us
IFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJvdW5kcyhXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUobV9wYWdlKSksIG9wdGlvbnMpKS5nZXQoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxl
LnNldFBpeGVsUmVzdWx0KGFkb3B0V0soV0tCdW5kbGVQYWdlQ3JlYXRlU25hcHNob3RXaXRoT3B0
aW9ucyhtX3BhZ2UsIFdLQnVuZGxlRnJhbWVHZXRWaXNpYmxlQ29udGVudEJvdW5kcyhXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUobV9wYWdlKSksIG9wdGlvbnMpKS5nZXQoKSk7CiAgICAgICAgIGlm
IChXS0J1bmRsZVBhZ2VJc1RyYWNraW5nUmVwYWludHMobV9wYWdlKSkKLSAgICAgICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRSZXBhaW50UmVjdHMoYWRvcHRXSyhXS0J1bmRsZVBh
Z2VDb3B5VHJhY2tlZFJlcGFpbnRSZWN0cyhtX3BhZ2UpKS5nZXQoKSk7CisgICAgICAgICAgICBp
bmplY3RlZEJ1bmRsZS5zZXRSZXBhaW50UmVjdHMoYWRvcHRXSyhXS0J1bmRsZVBhZ2VDb3B5VHJh
Y2tlZFJlcGFpbnRSZWN0cyhtX3BhZ2UpKS5nZXQoKSk7CiAgICAgfQogCi0gICAgSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZG9uZSgpOworICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5k
b25lKCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hMb2FkRm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RS
dW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAg
aWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxi
YWNrcygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmluaXNoTG9hZEZvckZy
YW1lIik7CiAKICAgICBmcmFtZURpZENoYW5nZUxvY2F0aW9uKGZyYW1lLCAvKnNob3VsZER1bXAq
LyB0cnVlKTsKQEAgLTkwNSwxMCArOTEyLDExIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpk
aWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtZSwgV0tFcnJvclJlZikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNr
cygpKQogICAgICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkRmFpbExvYWRXaXRoRXJyb3Ii
KTsKIAogICAgIGZyYW1lRGlkQ2hhbmdlTG9jYXRpb24oZnJhbWUpOwpAQCAtOTE2LDI5ICs5MjQs
MzEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkV2l0aEVycm9yRm9yRnJh
bWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0sKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZFJlY2VpdmVUaXRsZUZvckZyYW1lKFdLU3RyaW5nUmVmIHRpdGxlLCBXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1
bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwotICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgZHVtcEZyYW1lRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZnJhbWUsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGRpZFJlY2VpdmVUaXRsZTogIik7CiAgICAg
ICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7CiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwogICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2VzKCkpIHsKKyAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wVGl0bGVDaGFuZ2Vz
KCkpIHsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJUSVRMRSBDSEFOR0VE
OiAnIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHRpdGxlKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiJ1xuIik7CiAgICAgfQogCi0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRDbGVhcldpbmRvd0Zv
ckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLQnVuZGxlU2NyaXB0V29ybGRSZWYgd29y
bGQpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OworICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRK
YXZhU2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZCk7CkBAIC05NDksMjIgKzk1OSwy
MyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2xlYXJXaW5kb3dGb3JGcmFtZShXS0J1
bmRsZUZyYW1lUmVmIGZyYW1lLCBXS0J1bmRsZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSAwOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPm1ha2VXaW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0
aW9uKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZ2NDb250cm9sbGVyKCktPm1ha2VX
aW5kb3dPYmplY3QoY29udGV4dCwgd2luZG93LCAmZXhjZXB0aW9uKTsKLSAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkuZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0
KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRleHRJbnB1dENvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5k
b3csICZleGNlcHRpb24pOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5hY2Nlc3NpYmls
aXR5Q29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2Vw
dGlvbik7CisgICAgSlNWYWx1ZVJlZiBleGNlcHRpb24gPSBudWxscHRyOworICAgIGluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+bWFrZVdpbmRvd09iamVjdChjb250ZXh0LCB3aW5kb3csICZl
eGNlcHRpb24pOworICAgIGluamVjdGVkQnVuZGxlLmdjQ29udHJvbGxlcigpLT5tYWtlV2luZG93
T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUu
ZXZlbnRTZW5kaW5nQ29udHJvbGxlcigpLT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRv
dywgJmV4Y2VwdGlvbik7CisgICAgaW5qZWN0ZWRCdW5kbGUudGV4dElucHV0Q29udHJvbGxlcigp
LT5tYWtlV2luZG93T2JqZWN0KGNvbnRleHQsIHdpbmRvdywgJmV4Y2VwdGlvbik7CisgICAgaW5q
ZWN0ZWRCdW5kbGUuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIoKS0+bWFrZVdpbmRvd09iamVjdChj
b250ZXh0LCB3aW5kb3csICZleGNlcHRpb24pOwogCiAgICAgV2ViQ29yZVRlc3RTdXBwb3J0Ojpp
bmplY3RJbnRlcm5hbHNPYmplY3QoY29udGV4dCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDYW5jZWxDbGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYgZnJh
bWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygp
KQorICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OworICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQogICAgICAgICByZXR1
cm47CiAKICAgICBkdW1wTG9hZEV2ZW50KGZyYW1lLCAiZGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3RG
b3JGcmFtZSIpOwpAQCAtOTcyLDEwICs5ODMsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OmRpZENhbmNlbENsaWVudFJlZGlyZWN0Rm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkK
IAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RGb3JG
cmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZWYgZnJhbWUsIFdLVVJMUmVmIHVy
bCwgZG91YmxlIGRlbGF5LCBkb3VibGUgZGF0ZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rl
c3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQor
ICAgIGlmICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVMb2Fk
Q2FsbGJhY2tzKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5n
QnVpbGRlcjsKQEAgLTk4Myw3ICs5OTUsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2ls
bFBlcmZvcm1DbGllbnRSZWRpcmVjdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiwgV0tCdQogICAg
IHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFBlcmZvcm1DbGllbnRSZWRpcmVj
dFRvVVJMOiAiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChwYXRoU3VpdGFibGVGb3JUZXN0
UmVzdWx0KHVybCkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIFxuIik7Ci0g
ICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9T
dHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgV0tTYW1lRG9jdW1lbnRO
YXZpZ2F0aW9uVHlwZSB0eXBlKQpAQCAtOTkyLDEwICsxMDA0LDExIEBAIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRTYW1lRG9jdW1lbnROYXZpZ2F0aW9uRm9yRnJhbWUoV0tCdW5kbGVGcmFt
ZVJlZiBmcmFtCiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1bWVudExv
YWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxl
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3Mo
KSkKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnJhbWVM
b2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJkaWRGaW5pc2hE
b2N1bWVudExvYWRGb3JGcmFtZSIpOwogCiAgICAgdW5zaWduZWQgcGVuZGluZ0ZyYW1lVW5sb2Fk
RXZlbnRzID0gV0tCdW5kbGVGcmFtZUdldFBlbmRpbmdVbmxvYWRDb3VudChmcmFtZSk7CkBAIC0x
MDA1LDQwICsxMDE4LDQ0IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRGaW5pc2hEb2N1
bWVudExvYWRGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIGhhcyAiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmROdW1iZXIocGVuZGluZ0ZyYW1lVW5sb2FkRXZlbnRzKTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgb251bmxvYWQgaGFuZGxlcihzKVxuIik7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICB9CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRIYW5kbGVP
bmxvYWRFdmVudHNGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1lKQogewotICAgIGlmICgh
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmpl
Y3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVj
dGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRD
YWxsYmFja3MoKSkKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGRE
dW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCiAgICAgICAgIGR1bXBMb2FkRXZlbnQoZnJhbWUsICJk
aWRIYW5kbGVPbmxvYWRFdmVudHNGb3JGcmFtZSIpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYg
ZnJhbWUpCit2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVu
dEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImRpZERpc3BsYXlJbnNl
Y3VyZUNvbnRlbnRcbiIpOworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpOworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0
cHV0VGV4dCgiZGlkRGlzcGxheUluc2VjdXJlQ29udGVudFxuIik7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRCdW5kbGVQYWdlOjpkaWRSdW5JbnNlY3VyZUNvbnRlbnRGb3JGcmFtZShXS0J1bmRsZUZyYW1l
UmVmIGZyYW1lKQordm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJ1bkluc2VjdXJlQ29udGVu
dEZvckZyYW1lKFdLQnVuZGxlRnJhbWVSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKLSAg
ICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImRpZFJ1bkluc2VjdXJl
Q29udGVudFxuIik7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZyYW1lTG9hZENhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRU
ZXh0KCJkaWRSdW5JbnNlY3VyZUNvbnRlbnRcbiIpOwogfQogCi12b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6ZGlkRGV0ZWN0WFNTRm9yRnJhbWUoV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSkKK3ZvaWQg
SW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWREZXRlY3RYU1NGb3JGcmFtZShXS0J1bmRsZUZyYW1lUmVm
KQogewotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wRnJhbWVMb2FkQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5vdXRwdXRUZXh0KCJkaWREZXRlY3RYU1NcbiIpOworICAgIGF1dG8mIGluamVjdGVkQnVu
ZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIGlmIChpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBGcmFtZUxvYWRDYWxsYmFja3MoKSkKKyAgICAgICAg
aW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiZGlkRGV0ZWN0WFNTXG4iKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlKFdLQnVuZGxlUGFn
ZVJlZiBwYWdlLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS1VSTFJl
cXVlc3RSZWYgcmVxdWVzdCwgYm9vbCkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKICAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gdXJsID0gYWRvcHRXSyhXS1VSTFJlcXVlc3RDb3B5VVJMKHJlcXVlc3QpKTsKQEAg
LTEwNTksOCArMTA3Niw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0hUVFBPckhUVFBTU2NoZW1l
KFdLU3RyaW5nUmVmIHNjaGVtZSkKIAogV0tVUkxSZXF1ZXN0UmVmIEluamVjdGVkQnVuZGxlUGFn
ZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxl
RnJhbWVSZWYgZnJhbWUsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFdLVVJMUmVxdWVzdFJlZiByZXF1
ZXN0LCBXS1VSTFJlc3BvbnNlUmVmIHJlc3BvbnNlKQogewotICAgIGlmIChJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpCi0gICAgICAgICYmIEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3MoKSkg
eworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OworICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkKKyAgICAgICAgJiYgaW5q
ZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tz
KCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBkdW1w
UmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7CiAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiIC0gd2lsbFNlbmRSZXF1ZXN0ICIpOwpAQCAtMTA2OCwxNiAr
MTA4NiwxNiBAQCBXS1VSTFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJl
cXVlc3RGb3JGcmFtZShXS0J1bmRsZVBhZ2VSZWYgcGFnZQogICAgICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiByZWRpcmVjdFJlc3BvbnNlICIpOwogICAgICAgICBkdW1wUmVzcG9u
c2VEZXNjcmlwdGlvblN1aXRhYmxlRm9yVGVzdFJlc3VsdChyZXNwb25zZSwgc3RyaW5nQnVpbGRl
cik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CiAgICAgfQogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkgJiYgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+d2lsbFNlbmRS
ZXF1ZXN0UmV0dXJuc051bGwoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSAmJiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPndp
bGxTZW5kUmVxdWVzdFJldHVybnNOdWxsKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHJlZGlyZWN0VVJMID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weVVSTChyZXNwb25zZSkpOwotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
aXNUZXN0UnVubmluZygpICYmIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PndpbGxTZW5kUmVxdWVzdFJldHVybnNOdWxsT25SZWRpcmVjdCgpICYmIHJlZGlyZWN0VVJMKSB7
Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJSZXR1cm5pbmcg
bnVsbCBmb3IgdGhpcyByZWRpcmVjdFxuIik7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChp
bmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkgJiYgaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT53aWxsU2VuZFJlcXVlc3RSZXR1cm5zTnVsbE9uUmVkaXJlY3QoKSAmJiByZWRpcmVjdFVS
TCkgeworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJSZXR1cm5pbmcgbnVsbCBm
b3IgdGhpcyByZWRpcmVjdFxuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlV
UkwocmVxdWVzdCkpOwpAQCAtMTA4OSw4ICsxMTA3LDggQEAgV0tVUkxSZXF1ZXN0UmVmIEluamVj
dGVkQnVuZGxlUGFnZTo6d2lsbFNlbmRSZXF1ZXN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmIHBh
Z2UKICAgICAgICAgJiYgIVdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoaG9zdC5nZXQoKSwg
IjI1NS4yNTUuMjU1LjI1NSIpIC8vIFVzZWQgaW4gc29tZSB0ZXN0cyB0aGF0IGV4cGVjdCB0byBn
ZXQgYmFjayBhbiBlcnJvci4KICAgICAgICAgJiYgIWlzTG9jYWxIb3N0KGhvc3QuZ2V0KCkpKSB7
CiAgICAgICAgIGJvb2wgbWFpbkZyYW1lSXNFeHRlcm5hbCA9IGZhbHNlOwotICAgICAgICBpZiAo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkgewotICAgICAgICAgICAg
V0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudG9w
TG9hZGluZ0ZyYW1lKCk7CisgICAgICAgIGlmIChpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5n
KCkpIHsKKyAgICAgICAgICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gaW5qZWN0ZWRC
dW5kbGUudG9wTG9hZGluZ0ZyYW1lKCk7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJl
Zj4gbWFpbkZyYW1lVVJMID0gYWRvcHRXSyhXS0J1bmRsZUZyYW1lQ29weVVSTChtYWluRnJhbWUp
KTsKICAgICAgICAgICAgIGlmICghbWFpbkZyYW1lVVJMIHx8IFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcoYWRvcHRXSyhXS1VSTENvcHlTdHJpbmcobWFpbkZyYW1lVVJMLmdldCgpKSkuZ2V0
KCksICJhYm91dDpibGFuayIpKQogICAgICAgICAgICAgICAgIG1haW5GcmFtZVVSTCA9IGFkb3B0
V0soV0tCdW5kbGVGcmFtZUNvcHlQcm92aXNpb25hbFVSTChtYWluRnJhbWUpKTsKQEAgLTExMDQs
OCArMTEyMiw4IEBAIFdLVVJMUmVxdWVzdFJlZiBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxTZW5k
UmVxdWVzdEZvckZyYW1lKFdLQnVuZGxlUGFnZVJlZiBwYWdlCiAgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZExpdGVyYWwoIkJsb2NrZWQgYWNjZXNzIHRvIGV4dGVybmFsIFVSTCAiKTsK
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKHVybFN0cmluZykp
OwogICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgICAgICBJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5n
KCkpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBpbmplY3RlZEJ1bmRsZS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTExNSwyMCArMTEzMywyMSBAQCBXS1VS
TFJlcXVlc3RSZWYgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2VuZFJlcXVlc3RGb3JGcmFtZShX
S0J1bmRsZVBhZ2VSZWYgcGFnZQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2
ZVJlc3BvbnNlRm9yUmVzb3VyY2UoV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLQnVuZGxlRnJhbWVS
ZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIsIFdLVVJMUmVzcG9uc2VSZWYgcmVzcG9uc2UpCiB7Ci0g
ICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGF1
dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIGlm
ICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFJl
c291cmNlTG9hZENhbGxiYWNrcygpKSB7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5u
ZXIoKS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgZHVtcFJlc291cmNlVVJMKGlkZW50aWZp
ZXIsIHN0cmluZ0J1aWxkZXIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IiAtIGRpZFJlY2VpdmVSZXNwb25zZSAiKTsKICAgICAgICAgZHVtcFJlc3BvbnNlRGVzY3JpcHRp
b25TdWl0YWJsZUZvclRlc3RSZXN1bHQocmVzcG9uc2UsIHN0cmluZ0J1aWxkZXIpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0K
IAogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91
bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQorICAgIGlmICghaW5qZWN0ZWRCdW5k
bGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VSZXNwb25zZU1JTUVUeXBlcygpKQog
ICAgICAgICByZXR1cm47CiAKICAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJsID0gYWRvcHRX
SyhXS1VSTFJlc3BvbnNlQ29weVVSTChyZXNwb25zZSkpOwpAQCAtMTE0OCw3ICsxMTY3LDcgQEAg
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdL
QnVuZGxlUGFnZVJlZiBwYWdlLCBXS0IKIAogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRl
ci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRSZWNlaXZl
Q29udGVudExlbmd0aEZvclJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJl
ZiwgdWludDY0X3QsIHVpbnQ2NF90KQpAQCAtMTE1NywyNCArMTE3NiwyNiBAQCB2b2lkIEluamVj
dGVkQnVuZGxlUGFnZTo6ZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZShXS0J1bmRs
ZVBhZ2VSZWYsIFdLQgogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmluaXNoTG9hZEZv
clJlc291cmNlKFdLQnVuZGxlUGFnZVJlZiwgV0tCdW5kbGVGcmFtZVJlZiwgdWludDY0X3QgaWRl
bnRpZmllcikKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5u
aW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xl
dG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIo
KS0+c2hvdWxkRHVtcFJlc291cmNlTG9hZENhbGxiYWNrcygpKQorICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBk
dW1wUmVzb3VyY2VVUkwoaWRlbnRpZmllciwgc3RyaW5nQnVpbGRlcik7CiAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmRMaXRlcmFsKCIgLSBkaWRGaW5pc2hMb2FkaW5nXG4iKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwor
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZEZhaWxMb2FkRm9yUmVzb3VyY2UoV0tC
dW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmLCB1aW50NjRfdCBpZGVudGlmaWVyLCBXS0Vy
cm9yUmVmIGVycm9yKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVz
dFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wUmVzb3VyY2VMb2FkQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBSZXNvdXJjZUxvYWRDYWxsYmFja3Mo
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwpA
QCAtMTE4MywyMSArMTIwNCwyMiBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRmFpbExv
YWRGb3JSZXNvdXJjZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJhbWVSZQogCiAgICAgZHVt
cEVycm9yRGVzY3JpcHRpb25TdWl0YWJsZUZvclRlc3RSZXN1bHQoZXJyb3IsIHN0cmluZ0J1aWxk
ZXIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogfQogCiBi
b29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkQ2FjaGVSZXNwb25zZShXS0J1bmRsZVBhZ2VS
ZWYsIFdLQnVuZGxlRnJhbWVSZWYsIHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7Ci0gICAgaWYgKCFJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIGlmICghaW5qZWN0
ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlm
ICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcFdpbGxD
YWNoZVJlc3BvbnNlKCkpCisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNo
b3VsZER1bXBXaWxsQ2FjaGVSZXNwb25zZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZE51
bWJlcihpZGVudGlmaWVyKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiAtIHdp
bGxDYWNoZVJlc3BvbnNlOiBjYWxsZWRcbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgaW5qZWN0ZWRCdW5k
bGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogCiAgICAgLy8gVGhlIGRl
ZmF1bHQgYmVoYXZpb3IgaXMgdGhlIGNhY2hlIHRoZSByZXNwb25zZS4KICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTEyMjgsMTAgKzEyNTAsMTEgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnVuYWJs
ZVRvSW1wbGVtZW50UG9saWN5KFdLQnVuZGxlUGFnZVJlZiBwYWdlLCBXS0J1bmRsZUYKIAogV0tC
dW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVjaWRlUG9saWN5Rm9y
TmF2aWdhdGlvbkFjdGlvbihXS0J1bmRsZVBhZ2VSZWYgcGFnZSwgV0tCdW5kbGVGcmFtZVJlZiBm
cmFtZSwgV0tCdW5kbGVOYXZpZ2F0aW9uQWN0aW9uUmVmIG5hdmlnYXRpb25BY3Rpb24sIFdLVVJM
UmVxdWVzdFJlZiByZXF1ZXN0LCBXS1R5cGVSZWYqIHVzZXJEYXRhKQogewotICAgIGlmICghSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3Rl
ZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVk
QnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIFdLQnVuZGxlUGFnZVBvbGlj
eUFjdGlvblVzZTsKIAotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5u
ZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKKyAgICBpZiAoIWluamVjdGVkQnVuZGxl
LnRlc3RSdW5uZXIoKS0+aXNQb2xpY3lEZWxlZ2F0ZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblVzZTsKIAogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB1cmwgPSBhZG9wdFdLKFdLVVJMUmVxdWVzdENvcHlVUkwocmVxdWVzdCkpOwpAQCAtMTI1Niwx
MCArMTI3OSwxMCBAQCBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb24gSW5qZWN0ZWRCdW5kbGVQYWdl
OjpkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdLQgogICAgIH0KIAogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnRlc3RSdW5uZXIoKS0+bm90aWZ5RG9uZSgpOworICAgIGluamVjdGVkQnVuZGxlLm91
dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS50
ZXN0UnVubmVyKCktPm5vdGlmeURvbmUoKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkudGVzdFJ1bm5lcigpLT5pc1BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSgpKQorICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPmlzUG9saWN5RGVsZWdhdGVQZXJtaXNzaXZl
KCkpCiAgICAgICAgIHJldHVybiBXS0J1bmRsZVBhZ2VQb2xpY3lBY3Rpb25Vc2U7CiAgICAgcmV0
dXJuIFdLQnVuZGxlUGFnZVBvbGljeUFjdGlvblBhc3NUaHJvdWdoOwogfQpAQCAtMTI3Nyw3ICsx
MzAwLDcgQEAgV0tCdW5kbGVQYWdlUG9saWN5QWN0aW9uIEluamVjdGVkQnVuZGxlUGFnZTo6ZGVj
aWRlUG9saWN5Rm9yUmVzcG9uc2UoV0tCdW5kbGVQYWcKICAgICAgICAgc3RyaW5nQnVpbGRlci5h
cHBlbmRMaXRlcmFsKCJQb2xpY3kgZGVsZWdhdGU6IHJlc291cmNlIGlzIGFuIGF0dGFjaG1lbnQs
IHN1Z2dlc3RlZCBmaWxlIG5hbWUgXCciKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQo
dG9XVEZTdHJpbmcoZmlsZW5hbWUpKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJcJ1xuIik7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0
KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQogCiAg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1pbWVUeXBlID0gYWRvcHRXSyhXS1VSTFJlc3Bv
bnNlQ29weU1JTUVUeXBlKHJlc3BvbnNlKSk7CkBAIC0xMzQ3LDcgKzEzNzAsOCBAQCBzdGF0aWMg
V1RGOjpTdHJpbmcgbGFzdEZpbGVVUkxQYXRoQ29tcG9uZW50KGNvbnN0IFdURjo6U3RyaW5nJiBw
YXRoKQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6d2lsbEFkZE1lc3NhZ2VUb0NvbnNvbGUo
V0tTdHJpbmdSZWYgbWVzc2FnZSwgdWludDMyX3QgbGluZU51bWJlcikKIHsKLSAgICBpZiAoIUlu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0
ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFdURjo6U3Ry
aW5nIG1lc3NhZ2VTdHJpbmcgPSB0b1dURlN0cmluZyhtZXNzYWdlKTsKQEAgLTEzNjksNDYgKzEz
OTMsNDkgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxBZGRNZXNzYWdlVG9Db25zb2xl
KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIHVpbnQzMl90IGwKICAgICB9CiAgICAgc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWVzc2FnZVN0cmluZyk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7
Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50
b1N0cmluZygpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsU2V0U3RhdHVz
YmFyVGV4dChXS1N0cmluZ1JlZiBzdGF0dXNiYXJUZXh0KQogewotICAgIGlmICghSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRs
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxl
LmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wU3RhdHVzQ2FsbGJhY2tzKCkp
CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBTdGF0dXND
YWxsYmFja3MoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdC
dWlsZGVyOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgU1RB
VFVTIENBTExCQUNLOiBzZXRTdGF0dXNUZXh0OiIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
KHRvV1RGU3RyaW5nKHN0YXR1c2JhclRleHQpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWls
ZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVp
bGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5K
YXZhU2NyaXB0QWxlcnQoV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsK
LSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAg
aWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZExpdGVyYWwoIkFMRVJUOiAiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmlu
ZyhtZXNzYWdlKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
KyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjp3aWxsUnVuSmF2YVNjcmlwdENvbmZpcm0o
V0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tCdW5kbGVGcmFtZVJlZikKIHsKLSAgICBpZiAoIUluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1
bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkNPTkZJ
Uk06ICIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG1lc3NhZ2UpKTsK
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2NyaXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1l
c3NhZ2UsIFdLU3RyaW5nUmVmIGRlZmF1bHRWYWx1ZSwgV0tCdW5kbGVGcmFtZVJlZikKQEAgLTE0
MTksMTIgKzE0NDYsMTMgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OndpbGxSdW5KYXZhU2Ny
aXB0UHJvbXB0KFdLU3RyaW5nUmVmIG1lc3NhZ2UsIFdLU3RyaW5nUmUKICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZExpdGVyYWwoIiwgZGVmYXVsdCB0ZXh0OiAiKTsKICAgICBzdHJpbmdCdWlsZGVy
LmFwcGVuZCh0b1dURlN0cmluZyhkZWZhdWx0VmFsdWUpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJp
bmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5v
dXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRC
dW5kbGVQYWdlOjpkaWRSZWFjaEFwcGxpY2F0aW9uQ2FjaGVPcmlnaW5RdW90YShXS1NlY3VyaXR5
T3JpZ2luUmVmIG9yaWdpbiwgaW50NjRfdCB0b3RhbEJ5dGVzTmVlZGVkKQogewotICAgIGlmIChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wQXBwbGljYXRp
b25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkpIHsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVz
dFJ1bm5lcigpLT5zaG91bGREdW1wQXBwbGljYXRpb25DYWNoZURlbGVnYXRlQ2FsbGJhY2tzKCkp
IHsKICAgICAgICAgLy8gRm9yIGV4YW1wbGUsIG51bWJlcnMgZnJvbSAzMDAwMCAtIDM5OTk5IHdp
bGwgb3V0cHV0IGFzIDMwMDAwLgogICAgICAgICAvLyBSb3VuZGluZyB1cCBvciBkb3duIGRvZXMg
bm90IHJlYWxseSBtYXR0ZXIgZm9yIHRoZXNlIHRlc3RzLiBJdCdzCiAgICAgICAgIC8vIHN1ZmZp
Y2llbnQgdG8ganVzdCBnZXQgYSByYW5nZSBvZiAxMDAwMCB0byBkZXRlcm1pbmUgaWYgd2Ugd2Vy
ZQpAQCAtMTQzNywzNiArMTQ2NSwzNyBAQCB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkUmVh
Y2hBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoV0tTZWN1cml0eU9yaWdpblJlZgogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiB0b3RhbFNwYWNlTmVlZGVkOn4iKTsKICAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmROdW1iZXIodHJ1bmNhdGVkU3BhY2VOZWVkZWQpOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKKyAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwog
ICAgIH0KIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5z
aG91bGREaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkpCisgICAgaWYg
KGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRGlzYWxsb3dJbmNyZWFzZUZvckFw
cGxpY2F0aW9uQ2FjaGVRdW90YSgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZXNldCBk
ZWZhdWx0IGFwcGxpY2F0aW9uIGNhY2hlIHF1b3RhLgotICAgIFdLQnVuZGxlUmVzZXRBcHBsaWNh
dGlvbkNhY2hlT3JpZ2luUXVvdGEoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBh
ZG9wdFdLKFdLU2VjdXJpdHlPcmlnaW5Db3B5VG9TdHJpbmcob3JpZ2luKSkuZ2V0KCkpOworICAg
IFdLQnVuZGxlUmVzZXRBcHBsaWNhdGlvbkNhY2hlT3JpZ2luUXVvdGEoaW5qZWN0ZWRCdW5kbGUu
YnVuZGxlKCksIGFkb3B0V0soV0tTZWN1cml0eU9yaWdpbkNvcHlUb1N0cmluZyhvcmlnaW4pKS5n
ZXQoKSk7CiB9CiAKIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVkRGF0YWJh
c2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgV0tTdHJpbmdSZWYgZGF0YWJhc2VO
YW1lLCBXS1N0cmluZ1JlZiBkYXRhYmFzZURpc3BsYXlOYW1lLCB1aW50NjRfdCBjdXJyZW50UXVv
dGFCeXRlcywgdWludDY0X3QgY3VycmVudE9yaWdpblVzYWdlQnl0ZXMsIHVpbnQ2NF90IGN1cnJl
bnREYXRhYmFzZVVzYWdlQnl0ZXMsIHVpbnQ2NF90IGV4cGVjdGVkVXNhZ2VCeXRlcykKIHsKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcERh
dGFiYXNlQ2FsbGJhY2tzKCkpIHsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVk
QnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigp
LT5zaG91bGREdW1wRGF0YWJhc2VDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVy
IHN0cmluZ0J1aWxkZXI7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkg
REVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6IGV4Y2VlZGVkRGF0YWJhc2VRdW90YUZvclNlY3Vy
aXR5T3JpZ2luOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChzZWN1cml0eU9yaWdp
blRvU3RyKG9yaWdpbikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIiBk
YXRhYmFzZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcoZGF0
YWJhc2VOYW1lKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3Ry
aW5nKCkpOworICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIu
dG9TdHJpbmcoKSk7CiAgICAgfQogCiAgICAgdWludDY0X3QgZGVmYXVsdFF1b3RhID0gNSAqIDEw
MjQgKiAxMDI0OwotICAgIGRvdWJsZSB0ZXN0RGVmYXVsdFF1b3RhID0gSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VEZWZhdWx0UXVvdGEoKTsKKyAgICBkb3Vi
bGUgdGVzdERlZmF1bHRRdW90YSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJh
c2VEZWZhdWx0UXVvdGEoKTsKICAgICBpZiAodGVzdERlZmF1bHRRdW90YSA+PSAwKQogICAgICAg
ICBkZWZhdWx0UXVvdGEgPSB0ZXN0RGVmYXVsdFF1b3RhOwogCiAgICAgdW5zaWduZWQgbG9uZyBs
b25nIG5ld1F1b3RhID0gZGVmYXVsdFF1b3RhOwogCi0gICAgZG91YmxlIG1heFF1b3RhID0gSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+ZGF0YWJhc2VNYXhRdW90YSgpOwor
ICAgIGRvdWJsZSBtYXhRdW90YSA9IGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+ZGF0YWJh
c2VNYXhRdW90YSgpOwogICAgIGlmIChtYXhRdW90YSA+PSAwKSB7CiAgICAgICAgIGlmIChkZWZh
dWx0UXVvdGEgPCBleHBlY3RlZFVzYWdlQnl0ZXMgJiYgZXhwZWN0ZWRVc2FnZUJ5dGVzIDw9IG1h
eFF1b3RhKSB7CiAgICAgICAgICAgICBuZXdRdW90YSA9IGV4cGVjdGVkVXNhZ2VCeXRlczsKQEAg
LTE0NzUsNyArMTUwNCw3IEBAIHVpbnQ2NF90IEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRXhjZWVk
RGF0YWJhc2VRdW90YShXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwKICAgICAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiVUkgREVMRUdBVEUgREFUQUJBU0UgQ0FMTEJBQ0s6
IGluY3JlYXNlZCBxdW90YSB0byAiKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5k
TnVtYmVyKG5ld1F1b3RhKTsKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicp
OwotICAgICAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRl
eHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gbmV3UXVvdGE7CkBAIC0xNTQwLDM3ICsxNTY5LDQwIEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGVQ
YWdlOjpkaWRDaGFuZ2VTZWxlY3Rpb24oV0tCdW5kbGVQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVm
IG5vCiAKIGJvb2wgSW5qZWN0ZWRCdW5kbGVQYWdlOjpzaG91bGRCZWdpbkVkaXRpbmcoV0tCdW5k
bGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5u
aW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxi
YWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRCZWdp
bkVkaXRpbmdJbkRPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChyYW5n
ZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKICAgICAgICAgc3RyaW5nQnVp
bGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRw
dXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVkQnVuZGxl
Lm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGlu
ZygpOworICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93
RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkRW5kRWRpdGlu
ZyhXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIHJhbmdlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlz
VGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3Mo
KSkgeworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0
aW5nQ2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwog
ICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNo
b3VsZEVuZEVkaXRpbmdJbkRPTVJhbmdlOiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChyYW5nZVRvU3RyKG1fcGFnZSwgbV93b3JsZC5nZXQoKSwgcmFuZ2UpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAgICAgIGluamVjdGVk
QnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKICAgICB9Ci0gICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93
RWRpdGluZygpOworICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3Vs
ZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5z
ZXJ0Tm9kZShXS0J1bmRsZU5vZGVIYW5kbGVSZWYgbm9kZSwgV0tCdW5kbGVSYW5nZUhhbmRsZVJl
ZiByYW5nZVRvUmVwbGFjZSwgV0tJbnNlcnRBY3Rpb25UeXBlIGFjdGlvbikKIHsKLSAgICBpZiAo
IUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmpl
Y3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGluc2VydGFjdGlvbnN0cmluZ1tdID0gewpAQCAtMTU3OSw3ICsx
NjExLDcgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5k
bGVOb2RlSGFuZGxlUmVmIG5vZGUsIFdLQnVuZGxlUmEKICAgICAgICAgIldlYlZpZXdJbnNlcnRB
Y3Rpb25Ecm9wcGVkIiwKICAgICB9OwogCi0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQo
KS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAo
aW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiBzaG91bGRJbnNlcnROb2Rl
OiIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChkdW1wUGF0aChtX3BhZ2UsIG1fd29y
bGQuZ2V0KCksIG5vZGUpKTsKQEAgLTE1ODgsMTQgKzE2MjAsMTUgQEAgYm9vbCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OnNob3VsZEluc2VydE5vZGUoV0tCdW5kbGVOb2RlSGFuZGxlUmVmIG5vZGUsIFdL
QnVuZGxlUmEKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rp
b246Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1th
Y3Rpb25dKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CisgICAgICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0
cmluZygpKTsKICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBpbmplY3RlZEJ1bmRs
ZS50ZXN0UnVubmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVk
QnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlVG9SZXBsYWNlLCBXS0luc2VydEFjdGlvblR5cGUgYWN0aW9uKQog
ewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlzVGVzdFJ1bm5pbmcoKSkKKyAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciAqaW5zZXJ0YWN0aW9uc3RyaW5nW10gPSB7CkBA
IC0xNjA0LDcgKzE2MzcsNyBAQCBib29sIEluamVjdGVkQnVuZGxlUGFnZTo6c2hvdWxkSW5zZXJ0
VGV4dChXS1N0cmluZ1JlZiB0ZXh0LCBXS0J1bmRsZVJhbmdlSGFuZGxlUgogICAgICAgICAiV2Vi
Vmlld0luc2VydEFjdGlvbkRyb3BwZWQiLAogICAgIH07CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkg
eworICAgIGlmIChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5n
Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3Vs
ZEluc2VydFRleHQ6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5n
KHRleHQpKTsKQEAgLTE2MTMsMjkgKzE2NDYsMzEgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6
OnNob3VsZEluc2VydFRleHQoV0tTdHJpbmdSZWYgdGV4dCwgV0tCdW5kbGVSYW5nZUhhbmRsZVIK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgZ2l2ZW5BY3Rpb246Iik7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGluc2VydGFjdGlvbnN0cmluZ1thY3Rpb25dKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgICAgIEluamVjdGVkQnVu
ZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CisgICAg
ICAgIGluamVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsK
ICAgICB9Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZEFsbG93RWRpdGluZygpOworICAgIHJldHVybiBpbmplY3RlZEJ1bmRsZS50ZXN0UnVu
bmVyKCktPnNob3VsZEFsbG93RWRpdGluZygpOwogfQogCiBib29sIEluamVjdGVkQnVuZGxlUGFn
ZTo6c2hvdWxkRGVsZXRlUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiByYW5nZSkKIHsKLSAg
ICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0
byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYg
KCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCktPnNob3VsZER1
bXBFZGl0aW5nQ2FsbGJhY2tzKCkpIHsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5l
cigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKSB7CiAgICAgICAgIFN0cmluZ0J1aWxk
ZXIgc3RyaW5nQnVpbGRlcjsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCJF
RElUSU5HIERFTEVHQVRFOiBzaG91bGREZWxldGVET01SYW5nZToiKTsKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIHJhbmdlKSk7
CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAg
ICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CiAgICAgfQotICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigp
LT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKKyAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1
bm5lcigpLT5zaG91bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBh
Z2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBmcm9t
UmFuZ2UsIFdLQnVuZGxlUmFuZ2VIYW5kbGVSZWYgdG9SYW5nZSwgV0tBZmZpbml0eVR5cGUgYWZm
aW5pdHksIGJvb2wgc3RpbGxTZWxlY3RpbmcpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkuaXNUZXN0UnVubmluZygpKQorICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0
UnVubmluZygpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFy
ICphZmZpbml0eXN0cmluZ1tdID0gewpAQCAtMTY0Nyw3ICsxNjgyLDcgQEAgYm9vbCBJbmplY3Rl
ZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNlbGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRs
ZVJlZiBmcm9tUmEKICAgICAgICAgIlRSVUUiCiAgICAgfTsKIAotICAgIGlmIChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygp
KSB7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRp
bmdDYWxsYmFja3MoKSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogc2hv
dWxkQ2hhbmdlU2VsZWN0ZWRET01SYW5nZToiKTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQocmFuZ2VUb1N0cihtX3BhZ2UsIG1fd29ybGQuZ2V0KCksIGZyb21SYW5nZSkpOwpAQCAtMTY1
OCw5OCArMTY5MywxMDUgQEAgYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZENoYW5nZVNl
bGVjdGVkUmFuZ2UoV0tCdW5kbGVSYW5nZUhhbmRsZVJlZiBmcm9tUmEKICAgICAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgc3RpbGxTZWxlY3Rpbmc6Iik7CiAgICAgICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kKGJvb2xzdHJpbmdbc3RpbGxTZWxlY3RpbmddKTsgCiAgICAgICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgICAgICBpbmplY3Rl
ZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgfQotICAg
IHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGRBbGxv
d0VkaXRpbmcoKTsKKyAgICByZXR1cm4gaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91
bGRBbGxvd0VkaXRpbmcoKTsKIH0KIAogYm9vbCBJbmplY3RlZEJ1bmRsZVBhZ2U6OnNob3VsZEFw
cGx5U3R5bGUoV0tCdW5kbGVDU1NTdHlsZURlY2xhcmF0aW9uUmVmIHN0eWxlLCBXS0J1bmRsZVJh
bmdlSGFuZGxlUmVmIHJhbmdlKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkgeworICAgIGlm
IChpbmplY3RlZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tz
KCkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHNob3VsZEFwcGx5U3R5
bGU6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHN0eWxlRGVjVG9TdHIoc3R5bGUp
KTsKICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIgdG9FbGVtZW50c0luRE9N
UmFuZ2U6Iik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHJhbmdlVG9TdHIobV9wYWdl
LCBtX3dvcmxkLmdldCgpLCByYW5nZSkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgn
XG4nKTsKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5n
QnVpbGRlci50b1N0cmluZygpKTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChz
dHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIH0KLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CisgICAgcmV0
dXJuIGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkQWxsb3dFZGl0aW5nKCk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjpkaWRCZWdpbkVkaXRpbmcoV0tTdHJpbmdSZWYg
bm90aWZpY2F0aW9uTmFtZSkKIHsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5p
c1Rlc3RSdW5uaW5nKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCisgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPnNob3VsZER1bXBFZGl0aW5nQ2FsbGJhY2tzKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFN0cmluZ0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZExpdGVyYWwoIkVESVRJTkcgREVMRUdBVEU6IHdlYlZpZXdEaWRCZWdp
bkVkaXRpbmc6Iik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZp
Y2F0aW9uTmFtZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkRW5kRWRpdGluZyhXS1N0cmluZ1Jl
ZiBub3RpZmljYXRpb25OYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmlzVGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmco
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWluamVj
dGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0
cmluZ0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZEVu
ZEVkaXRpbmc6Iik7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQodG9XVEZTdHJpbmcobm90aWZp
Y2F0aW9uTmFtZSkpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCdcbicpOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKSk7
CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkp
OwogfQogCiB2b2lkIEluamVjdGVkQnVuZGxlUGFnZTo6ZGlkQ2hhbmdlKFdLU3RyaW5nUmVmIG5v
dGlmaWNhdGlvbk5hbWUpCiB7Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuaXNU
ZXN0UnVubmluZygpKQorICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOworICAgIGlmICghaW5qZWN0ZWRCdW5kbGUuaXNUZXN0UnVubmluZygpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQorICAgIGlmICghaW5qZWN0ZWRC
dW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRWRpdGluZ0NhbGxiYWNrcygpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAgICAgc3RyaW5n
QnVpbGRlci5hcHBlbmRMaXRlcmFsKCJFRElUSU5HIERFTEVHQVRFOiB3ZWJWaWV3RGlkQ2hhbmdl
OiIpOwogICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvV1RGU3RyaW5nKG5vdGlmaWNhdGlvbk5h
bWUpKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgnXG4nKTsKLSAgICBJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkub3V0cHV0VGV4dChzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpOworICAgIGlu
amVjdGVkQnVuZGxlLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygpKTsKIH0KIAog
dm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmRpZENoYW5nZVNlbGVjdGlvbihXS1N0cmluZ1JlZiBu
b3RpZmljYXRpb25OYW1lKQogewotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmlz
VGVzdFJ1bm5pbmcoKSkKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKTsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLmlzVGVzdFJ1bm5pbmcoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICghSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKKyAgICBpZiAoIWluamVjdGVk
QnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEVkaXRpbmdDYWxsYmFja3MoKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogICAgIHN0cmlu
Z0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiRURJVElORyBERUxFR0FURTogd2ViVmlld0RpZENoYW5n
ZVNlbGVjdGlvbjoiKTsKICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCh0b1dURlN0cmluZyhub3Rp
ZmljYXRpb25OYW1lKSk7CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoJ1xuJyk7Ci0gICAgSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoc3RyaW5nQnVpbGRlci50b1N0cmluZygp
KTsKKyAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KSk7CiB9CiAKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiBib29sIEluamVjdGVkQnVuZGxl
UGFnZTo6c3VwcG9ydHNGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0Z1bGxT
Y3JlZW5LZXlib2FyZFJlcXVlc3RUeXBlIHJlcXVlc3RUeXBlKQogewotICAgIGlmIChJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNhbGxi
YWNrcygpKQotICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgic3Vw
cG9ydHNGdWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUg
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRl
c3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgaW5q
ZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgic3VwcG9ydHNGdWxsU2NyZWVuKCkgPT0gdHJ1ZVxuIik7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVQYWdlOjplbnRlckZ1
bGxTY3JlZW5Gb3JFbGVtZW50KFdLQnVuZGxlUGFnZVJlZiBwYWdlUmVmLCBXS0J1bmRsZU5vZGVI
YW5kbGVSZWYgZWxlbWVudFJlZikKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAg
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImVudGVyRnVsbFNjcmVlbkZvckVs
ZW1lbnQoKVxuIik7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7CisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxk
RHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0
VGV4dCgiZW50ZXJGdWxsU2NyZWVuRm9yRWxlbWVudCgpXG4iKTsKIAotICAgIGlmICghSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9tRnVsbFNjcmVlbkJlaGF2
aW9yKCkpIHsKKyAgICBpZiAoIWluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+aGFzQ3VzdG9t
RnVsbFNjcmVlbkJlaGF2aW9yKCkpIHsKICAgICAgICAgV0tCdW5kbGVQYWdlV2lsbEVudGVyRnVs
bFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAgV0tCdW5kbGVQYWdlRGlkRW50ZXJGdWxsU2NyZWVu
KHBhZ2VSZWYpOwogICAgIH0KQEAgLTE3NTcsMTAgKzE3OTksMTEgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZVBhZ2U6OmVudGVyRnVsbFNjcmVlbkZvckVsZW1lbnQoV0tCdW5kbGVQYWdlUmVmIHBhZ2VS
ZWYsIFdLQnUKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxsU2NyZWVuRm9yRWxl
bWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW5kbGVOb2RlSGFuZGxlUmVmIGVsZW1l
bnRSZWYpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVubmVyKCkt
PnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJleGl0RnVsbFNjcmVlbkZvckVsZW1lbnQoKVxuIik7Cisg
ICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7Cisg
ICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5D
YWxsYmFja3MoKSkKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiZXhpdEZ1bGxT
Y3JlZW5Gb3JFbGVtZW50KClcbiIpOwogCi0gICAgaWYgKCFJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZpb3IoKSkgeworICAgIGlm
ICghaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5oYXNDdXN0b21GdWxsU2NyZWVuQmVoYXZp
b3IoKSkgewogICAgICAgICBXS0J1bmRsZVBhZ2VXaWxsRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7
CiAgICAgICAgIFdLQnVuZGxlUGFnZURpZEV4aXRGdWxsU2NyZWVuKHBhZ2VSZWYpOwogICAgIH0K
QEAgLTE3NjgsMjIgKzE4MTEsMjUgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmV4aXRGdWxs
U2NyZWVuRm9yRWxlbWVudChXS0J1bmRsZVBhZ2VSZWYgcGFnZVJlZiwgV0tCdW4KIAogdm9pZCBJ
bmplY3RlZEJ1bmRsZVBhZ2U6OmJlZ2FuRW50ZXJGdWxsU2NyZWVuKFdLQnVuZGxlUGFnZVJlZiwg
V0tSZWN0LCBXS1JlY3QpCiB7Ci0gICAgaWYgKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0
UnVubmVyKCktPnNob3VsZER1bXBGdWxsU2NyZWVuQ2FsbGJhY2tzKCkpCi0gICAgICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5vdXRwdXRUZXh0KCJiZWdhbkVudGVyRnVsbFNjcmVlbigpXG4i
KTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24o
KTsKKyAgICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNj
cmVlbkNhbGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJiZWdh
bkVudGVyRnVsbFNjcmVlbigpXG4iKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmJl
Z2FuRXhpdEZ1bGxTY3JlZW4oV0tCdW5kbGVQYWdlUmVmLCBXS1JlY3QsIFdLUmVjdCkKIHsKLSAg
ICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1
bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLm91
dHB1dFRleHQoImJlZ2FuRXhpdEZ1bGxTY3JlZW4oKVxuIik7CisgICAgYXV0byYgaW5qZWN0ZWRC
dW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgaWYgKGluamVjdGVkQnVu
ZGxlLnRlc3RSdW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKKyAgICAg
ICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiYmVnYW5FeGl0RnVsbFNjcmVlbigpXG4iKTsK
IH0KIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmNsb3NlRnVsbFNjcmVlbihXS0J1bmRsZVBh
Z2VSZWYgcGFnZVJlZikKIHsKLSAgICBpZiAoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RS
dW5uZXIoKS0+c2hvdWxkRHVtcEZ1bGxTY3JlZW5DYWxsYmFja3MoKSkKLSAgICAgICAgSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLm91dHB1dFRleHQoImNsb3NlRnVsbFNjcmVlbigpXG4iKTsKKyAg
ICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAg
ICBpZiAoaW5qZWN0ZWRCdW5kbGUudGVzdFJ1bm5lcigpLT5zaG91bGREdW1wRnVsbFNjcmVlbkNh
bGxiYWNrcygpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5vdXRwdXRUZXh0KCJjbG9zZUZ1bGxT
Y3JlZW4oKVxuIik7CiAKLSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50ZXN0UnVu
bmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CisgICAgaWYgKCFpbmplY3Rl
ZEJ1bmRsZS50ZXN0UnVubmVyKCktPmhhc0N1c3RvbUZ1bGxTY3JlZW5CZWhhdmlvcigpKSB7CiAg
ICAgICAgIFdLQnVuZGxlUGFnZVdpbGxFeGl0RnVsbFNjcmVlbihwYWdlUmVmKTsKICAgICAgICAg
V0tCdW5kbGVQYWdlRGlkRXhpdEZ1bGxTY3JlZW4ocGFnZVJlZik7CiAgICAgfQpAQCAtMTg5Miwy
MyArMTkzOCwyNCBAQCBTdHJpbmcgSW5qZWN0ZWRCdW5kbGVQYWdlOjpwbGF0Zm9ybVJlc3BvbnNl
TWltZVR5cGUoV0tVUkxSZXNwb25zZVJlZikKIAogdm9pZCBJbmplY3RlZEJ1bmRsZVBhZ2U6OmZy
YW1lRGlkQ2hhbmdlTG9jYXRpb24oV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSwgYm9vbCBzaG91bGRE
dW1wKQogewotICAgIGlmIChmcmFtZSAhPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudG9wTG9h
ZGluZ0ZyYW1lKCkpCisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7CisgICAgaWYgKGZyYW1lICE9IGluamVjdGVkQnVuZGxlLnRvcExvYWRpbmdG
cmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
c2V0VG9wTG9hZGluZ0ZyYW1lKDApOworICAgIGluamVjdGVkQnVuZGxlLnNldFRvcExvYWRpbmdG
cmFtZShudWxscHRyKTsKIAotICAgIGlmIChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1
bm5lcigpLT53YWl0VG9EdW1wKCkpCisgICAgaWYgKGluamVjdGVkQnVuZGxlLnRlc3RSdW5uZXIo
KS0+d2FpdFRvRHVtcCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnNob3VsZFByb2Nlc3NXb3JrUXVldWUoKSkgewotICAgICAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucHJvY2Vzc1dvcmtRdWV1ZSgpOworICAgIGlmIChpbmplY3RlZEJ1
bmRsZS5zaG91bGRQcm9jZXNzV29ya1F1ZXVlKCkpIHsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUu
cHJvY2Vzc1dvcmtRdWV1ZSgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKHNo
b3VsZER1bXApCi0gICAgICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPmR1bXAo
KTsKKyAgICAgICAgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5kdW1wKCk7CiAgICAgZWxzZQotICAg
ICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuZG9uZSgpOworICAgICAgICBpbmplY3RlZEJ1
bmRsZS5kb25lKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggYjRiNTVi
YjkwNjg2YThhYWQxNDVjOWNkZDgzMTgyNjBjNmEyN2RhNy4uMzQ0YjM3OGZmNTRiMGY2ZThkY2Vj
ZTkzODRmYTM5MThlM2U3ZjI5MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgSlNDbGFz
c1JlZiBUZXN0UnVubmVyOjp3cmFwcGVyQ2xhc3MoKQogCiB2b2lkIFRlc3RSdW5uZXI6OmRpc3Bs
YXkoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIFdLQnVuZGxlUGFnZUZvcmNl
UmVwYWludChwYWdlKTsKICAgICBXS0J1bmRsZVBhZ2VTZXRUcmFja3NSZXBhaW50cyhwYWdlLCB0
cnVlKTsKICAgICBXS0J1bmRsZVBhZ2VSZXNldFRyYWNrZWRSZXBhaW50cyhwYWdlKTsKQEAgLTEy
OSw3ICsxMjksNyBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldEN1c3RvbVBvbGljeURlbGVnYXRlKGJv
b2wgZW5hYmxlZCwgYm9vbCBwZXJtaXNzaXZlKQogICAgIG1fcG9saWN5RGVsZWdhdGVFbmFibGVk
ID0gZW5hYmxlZDsKICAgICBtX3BvbGljeURlbGVnYXRlUGVybWlzc2l2ZSA9IHBlcm1pc3NpdmU7
CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0Q3VzdG9tUG9saWN5RGVsZWdhdGUo
ZW5hYmxlZCwgcGVybWlzc2l2ZSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNl
dEN1c3RvbVBvbGljeURlbGVnYXRlKGVuYWJsZWQsIHBlcm1pc3NpdmUpOwogfQogCiB2b2lkIFRl
c3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCkBAIC0xNDEsMjQgKzE0MSwyNiBAQCB2
b2lkIFRlc3RSdW5uZXI6OndhaXRGb3JQb2xpY3lEZWxlZ2F0ZSgpCiB2b2lkIFRlc3RSdW5uZXI6
OndhaXRVbnRpbERvbmUoKQogewogICAgIG1fd2FpdFRvRHVtcCA9IHRydWU7Ci0gICAgaWYgKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS51c2VXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpKQorICAg
IGlmIChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkudXNlV2FpdFRvRHVtcFdhdGNoZG9nVGlt
ZXIoKSkKICAgICAgICAgaW5pdGlhbGl6ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVySWZOZWVkZWQo
KTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjp3YWl0VG9EdW1wV2F0Y2hkb2dUaW1lckZpcmVkKCkK
IHsKICAgICBpbnZhbGlkYXRlV2FpdFRvRHVtcFdhdGNoZG9nVGltZXIoKTsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dCgiRkFJTDogVGltZWQgb3V0IHdhaXRpbmcgZm9y
IG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG5cbiIpOwotICAgIEluamVjdGVkQnVuZGxlOjpzaGFy
ZWQoKS5kb25lKCk7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCk7CisgICAgaW5qZWN0ZWRCdW5kbGUub3V0cHV0VGV4dCgiRkFJTDogVGltZWQg
b3V0IHdhaXRpbmcgZm9yIG5vdGlmeURvbmUgdG8gYmUgY2FsbGVkXG5cbiIpOworICAgIGluamVj
dGVkQnVuZGxlLmRvbmUoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpub3RpZnlEb25lKCkKIHsK
LSAgICBpZiAoIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5pc1Rlc3RSdW5uaW5nKCkpCisgICAg
YXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAg
aWYgKCFpbmplY3RlZEJ1bmRsZS5pc1Rlc3RSdW5uaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIUluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS50b3BMb2Fk
aW5nRnJhbWUoKSkKLSAgICAgICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+ZHVt
cCgpOworICAgIGlmIChtX3dhaXRUb0R1bXAgJiYgIWluamVjdGVkQnVuZGxlLnRvcExvYWRpbmdG
cmFtZSgpKQorICAgICAgICBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPmR1bXAoKTsKIAogICAgIC8v
IFdlIGRvbid0IGNhbGwgaW52YWxpZGF0ZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkgaGVyZSwg
ZXZlbiBpZiB3ZSBjb250aW51ZSB0byB3YWl0IGZvciBhIGxvYWQgdG8gZmluaXNoLgogICAgIC8v
IFRoZSB0ZXN0IGlzIHN0aWxsIHN1YmplY3QgdG8gdGltZW91dCBjaGVja2luZyAtIGl0IGlzIGJl
dHRlciB0byBkZXRlY3QgYW4gYXN5bmMgdGltZW91dCBpbnNpZGUgV2ViS2l0VGVzdFJ1bm5lcgpA
QCAtMTcyLDcgKzE3NCw4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclNjcmlwdChKU1N0cmlu
Z1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtCiAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHNvdXJjZVdLID0gdG9XSyhzb3VyY2UpOwogICAgIFdLUmV0YWluUHRy
PFdLQnVuZGxlU2NyaXB0V29ybGRSZWY+IHNjcmlwdFdvcmxkKEFkb3B0V0ssIFdLQnVuZGxlU2Ny
aXB0V29ybGRDcmVhdGVXb3JsZCgpKTsKIAotICAgIFdLQnVuZGxlQWRkVXNlclNjcmlwdChJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
YWdlR3JvdXAoKSwgc2NyaXB0V29ybGQuZ2V0KCksIHNvdXJjZVdLLmdldCgpLCAwLCAwLCAwLAor
ICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwor
ICAgIFdLQnVuZGxlQWRkVXNlclNjcmlwdChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIHNjcmlwdFdvcmxkLmdldCgpLCBzb3VyY2VXSy5nZXQoKSwg
MCwgMCwgMCwKICAgICAgICAgKHJ1bkF0U3RhcnQgPyBrV0tJbmplY3RBdERvY3VtZW50U3RhcnQg
OiBrV0tJbmplY3RBdERvY3VtZW50RW5kKSwKICAgICAgICAgKGFsbEZyYW1lcyA/IGtXS0luamVj
dEluQWxsRnJhbWVzIDoga1dLSW5qZWN0SW5Ub3BGcmFtZU9ubHkpKTsKIH0KQEAgLTE4MiwyNSAr
MTg1LDI3IEBAIHZvaWQgVGVzdFJ1bm5lcjo6YWRkVXNlclN0eWxlU2hlZXQoSlNTdHJpbmdSZWYg
c291cmNlLCBib29sIGFsbEZyYW1lcykKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gc291
cmNlV0sgPSB0b1dLKHNvdXJjZSk7CiAgICAgV0tSZXRhaW5QdHI8V0tCdW5kbGVTY3JpcHRXb3Js
ZFJlZj4gc2NyaXB0V29ybGQoQWRvcHRXSywgV0tCdW5kbGVTY3JpcHRXb3JsZENyZWF0ZVdvcmxk
KCkpOwogCi0gICAgV0tCdW5kbGVBZGRVc2VyU3R5bGVTaGVldChJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgc2Ny
aXB0V29ybGQuZ2V0KCksIHNvdXJjZVdLLmdldCgpLCAwLCAwLCAwLAorICAgIGF1dG8mIGluamVj
dGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlQWRk
VXNlclN0eWxlU2hlZXQoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBh
Z2VHcm91cCgpLCBzY3JpcHRXb3JsZC5nZXQoKSwgc291cmNlV0suZ2V0KCksIDAsIDAsIDAsCiAg
ICAgICAgIChhbGxGcmFtZXMgPyBrV0tJbmplY3RJbkFsbEZyYW1lcyA6IGtXS0luamVjdEluVG9w
RnJhbWVPbmx5KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6a2VlcFdlYkhpc3RvcnkoKQogewot
ICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0U2V0QWRkc1Zpc2l0ZWRMaW5rcyh0cnVl
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFNldEFkZHNWaXNpdGVkTGlu
a3ModHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZXhlY0NvbW1hbmQoSlNTdHJpbmdSZWYg
bmFtZSwgSlNTdHJpbmdSZWYgYXJndW1lbnQpCiB7Ci0gICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVk
aXRpbmdDb21tYW5kKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9X
SyhuYW1lKS5nZXQoKSwgdG9XSyhhcmd1bWVudCkuZ2V0KCkpOworICAgIFdLQnVuZGxlUGFnZUV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYXJndW1lbnQpLmdldCgpKTsKIH0KIAogYm9v
bCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdldCwgSlNWYWx1ZVJlZiBv
cHRpb25zQXJyYXlBc1ZhbHVlKQogewogICAgIFdLRmluZE9wdGlvbnMgb3B0aW9ucyA9IDA7CiAK
LSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIGF1dG8mIGlu
amVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxl
RnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVkQnVu
ZGxlLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxl
RnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBsZW5ndGhQcm9wZXJ0eU5hbWUoQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7CiAgICAgSlNPYmplY3RSZWYgb3B0aW9uc0FycmF5ID0gSlNW
YWx1ZVRvT2JqZWN0KGNvbnRleHQsIG9wdGlvbnNBcnJheUFzVmFsdWUsIDApOwpAQCAtMjMxLDM3
ICsyMzYsMzcgQEAgYm9vbCBUZXN0UnVubmVyOjpmaW5kU3RyaW5nKEpTU3RyaW5nUmVmIHRhcmdl
dCwgSlNWYWx1ZVJlZiBvcHRpb25zQXJyYXlBc1ZhbHVlKQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgcmV0dXJuIFdLQnVuZGxlUGFnZUZpbmRTdHJpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRhcmdldCkuZ2V0KCksIG9wdGlvbnMpOworICAgIHJldHVy
biBXS0J1bmRsZVBhZ2VGaW5kU3RyaW5nKGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpLCB0
b1dLKHRhcmdldCkuZ2V0KCksIG9wdGlvbnMpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsZWFy
QWxsRGF0YWJhc2VzKCkKIHsKLSAgICBXS0J1bmRsZUNsZWFyQWxsRGF0YWJhc2VzKEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7CisgICAgV0tCdW5kbGVDbGVhckFsbERhdGFiYXNl
cyhJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldERhdGFiYXNlUXVvdGEodWludDY0X3QgcXVvdGEpCiB7Ci0gICAgcmV0dXJuIFdL
QnVuZGxlU2V0RGF0YWJhc2VRdW90YShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCks
IHF1b3RhKTsKKyAgICByZXR1cm4gV0tCdW5kbGVTZXREYXRhYmFzZVF1b3RhKEluamVjdGVkQnVu
ZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgcXVvdGEpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKQogewotICAgIFdLQnVuZGxlQ2xlYXJBcHBsaWNh
dGlvbkNhY2hlKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSk7CisgICAgV0tCdW5k
bGVDbGVhckFwcGxpY2F0aW9uQ2FjaGUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRs
ZSgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpjbGVhckFwcGxpY2F0aW9uQ2FjaGVGb3JPcmln
aW4oSlNTdHJpbmdSZWYgb3JpZ2luKQogewotICAgIFdLQnVuZGxlQ2xlYXJBcHBsaWNhdGlvbkNh
Y2hlRm9yT3JpZ2luKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgdG9XSyhvcmln
aW4pLmdldCgpKTsKKyAgICBXS0J1bmRsZUNsZWFyQXBwbGljYXRpb25DYWNoZUZvck9yaWdpbihJ
bmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sob3JpZ2luKS5nZXQoKSk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1aW50NjRfdCBz
aXplKQogewotICAgIFdLQnVuZGxlU2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIHNpemUpOworICAgIFdLQnVuZGxlU2V0QXBwQ2FjaGVNYXhp
bXVtU2l6ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHNpemUpOwogfQog
CiBsb25nIGxvbmcgVGVzdFJ1bm5lcjo6YXBwbGljYXRpb25DYWNoZURpc2tVc2FnZUZvck9yaWdp
bihKU1N0cmluZ1JlZiBvcmlnaW4pCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlR2V0QXBwQ2FjaGVV
c2FnZUZvck9yaWdpbihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0sob3Jp
Z2luKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlR2V0QXBwQ2FjaGVVc2FnZUZvck9yaWdp
bihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0sob3JpZ2luKS5nZXQo
KSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxpY2F0aW9u
Q2FjaGVRdW90YSgpCkBAIC0yODYsOSArMjkxLDEwIEBAIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZVJl
ZiBzdHJpbmdBcnJheVRvSlMoSlNDb250ZXh0UmVmIGNvbnRleHQsIFdLQXJyYXlSZWYgc3RyaW5n
CiAKIEpTVmFsdWVSZWYgVGVzdFJ1bm5lcjo6b3JpZ2luc1dpdGhBcHBsaWNhdGlvbkNhY2hlKCkK
IHsKLSAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5zKEFkb3B0V0ssIFdLQnVuZGxl
Q29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCkpKTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiBvcmlnaW5zKEFkb3B0V0ss
IFdLQnVuZGxlQ29weU9yaWdpbnNXaXRoQXBwbGljYXRpb25DYWNoZShpbmplY3RlZEJ1bmRsZS5i
dW5kbGUoKSkpOwogCi0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
KyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRl
eHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAg
IHJldHVybiBzdHJpbmdBcnJheVRvSlMoY29udGV4dCwgb3JpZ2lucy5nZXQoKSk7CkBAIC0yOTYs
NyArMzAyLDcgQEAgSlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpvcmlnaW5zV2l0aEFwcGxpY2F0aW9u
Q2FjaGUoKQogCiBib29sIFRlc3RSdW5uZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYg
bmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgp
KTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyhib29sKQpAQCAtMzA4LDU4
ICszMTQsNjcgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRDYW5PcGVuV2luZG93cyhib29sKQogdm9p
ZCBUZXN0UnVubmVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGtleShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiV2ViS2l0WFNTQXVkaXRvckVuYWJsZWQiKSk7Ci0gICAgV0tCdW5kbGVPdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwga2V5LmdldCgp
LCBlbmFibGVkKTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKTsKKyAgICBXS0J1bmRsZU92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JUZXN0UnVu
bmVyKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwg
a2V5LmdldCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRBbGxvd1VuaXZl
cnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhib29sIGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRB
bGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCku
YnVuZGxlKCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7
CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7
CisgICAgV0tCdW5kbGVTZXRBbGxvd1VuaXZlcnNhbEFjY2Vzc0Zyb21GaWxlVVJMcyhpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGVuYWJsZWQpOwog
fQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhib29s
IGVuYWJsZWQpCiB7Ci0gICAgV0tCdW5kbGVTZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
SW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVk
KCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlU2V0QWxsb3dGaWxlQWNjZXNz
RnJvbUZpbGVVUkxzKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdl
R3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UGx1Z2luc0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0UGx1Z2luc0VuYWJsZWQoSW5qZWN0
ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFn
ZUdyb3VwKCksIGVuYWJsZWQpOworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlU2V0UGx1Z2luc0VuYWJsZWQoaW5qZWN0
ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJv
b2wgZW5hYmxlZCkKIHsKLSAgICAgV0tCdW5kbGVTZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJv
YXJkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICAgV0tCdW5kbGVTZXRKYXZhU2NyaXB0
Q2FuQWNjZXNzQ2xpcGJvYXJkKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRs
ZS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgIFdLQnVuZGxlU2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CisgICAgYXV0byYgaW5q
ZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgIFdLQnVuZGxl
U2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0
ZWRCdW5kbGUucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFBvcHVwQmxvY2tpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICAgV0tCdW5kbGVTZXRQ
b3B1cEJsb2NraW5nRW5hYmxlZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CisgICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgIFdLQnVu
ZGxlU2V0UG9wdXBCbG9ja2luZ0VuYWJsZWQoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVj
dGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0gICAgIFdLQnVu
ZGxlU2V0QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQp
OworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
OworICAgICBXS0J1bmRsZVNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKGluamVjdGVkQnVu
ZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlR3JvdXAoKSwgZW5hYmxlZCk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJpbmdS
ZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0cmlu
Z1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMpCiB7
Ci0gICAgV0tCdW5kbGVBZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRs
ZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0
aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxv
d0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgV0tCdW5kbGVBZGRPcmlnaW5BY2Nlc3NXaGl0
ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRvV0soc291
cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhk
ZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CiB9CiAK
IHZvaWQgVGVzdFJ1bm5lcjo6cmVtb3ZlT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkoSlNTdHJp
bmdSZWYgc291cmNlT3JpZ2luLCBKU1N0cmluZ1JlZiBkZXN0aW5hdGlvblByb3RvY29sLCBKU1N0
cmluZ1JlZiBkZXN0aW5hdGlvbkhvc3QsIGJvb2wgYWxsb3dEZXN0aW5hdGlvblN1YmRvbWFpbnMp
CiB7Ci0gICAgV0tCdW5kbGVSZW1vdmVPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9X
SyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgp
LCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlucyk7CisgICAgV0tCdW5kbGVSZW1vdmVPcmlnaW5B
Y2Nlc3NXaGl0ZWxpc3RFbnRyeShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCks
IHRvV0soc291cmNlT3JpZ2luKS5nZXQoKSwgdG9XSyhkZXN0aW5hdGlvblByb3RvY29sKS5nZXQo
KSwgdG9XSyhkZXN0aW5hdGlvbkhvc3QpLmdldCgpLCBhbGxvd0Rlc3RpbmF0aW9uU3ViZG9tYWlu
cyk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6aXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4
KQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFp
bkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7Ci0gICAgcmV0
dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVu
ZGxlKCksIG1haW5GcmFtZSwgcGFnZUluZGV4KTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5G
cmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBh
Z2UoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlSXNQYWdlQm94VmlzaWJsZShpbmplY3RlZEJ1bmRs
ZS5idW5kbGUoKSwgbWFpbkZyYW1lLCBwYWdlSW5kZXgpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldFZhbHVlRm9yVXNlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBlbGVtZW50
LCBKU1N0cmluZ1JlZiB2YWx1ZSkKQEAgLTM3MywyMSArMzg4LDIyIEBAIHZvaWQgVGVzdFJ1bm5l
cjo6c2V0VmFsdWVGb3JVc2VyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIGVsZW1l
bnQsIEpTU3RyCiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXVkaW9SZXN1bHQoSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTVmFsdWVSZWYgZGF0YSkKIHsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9
IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKICAgICAvLyBGSVhNRSAoMTIzMDU4KTogVXNl
IGEgSlNDIEFQSSB0byBnZXQgYnVmZmVyIGNvbnRlbnRzIG9uY2Ugc3VjaCBpcyBleHBvc2VkLgot
ICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gYXVkaW9EYXRhKEFkb3B0V0ssIFdLQnVuZGxlQ3Jl
YXRlV0tEYXRhRnJvbVVJbnQ4QXJyYXkoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgp
LCBjb250ZXh0LCBkYXRhKSk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnNldEF1ZGlv
UmVzdWx0KGF1ZGlvRGF0YS5nZXQoKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEYXRhUmVmPiBhdWRp
b0RhdGEoQWRvcHRXSywgV0tCdW5kbGVDcmVhdGVXS0RhdGFGcm9tVUludDhBcnJheShpbmplY3Rl
ZEJ1bmRsZS5idW5kbGUoKSwgY29udGV4dCwgZGF0YSkpOworICAgIGluamVjdGVkQnVuZGxlLnNl
dEF1ZGlvUmVzdWx0KGF1ZGlvRGF0YS5nZXQoKSk7CiAgICAgbV93aGF0VG9EdW1wID0gQXVkaW87
CiAgICAgbV9kdW1wUGl4ZWxzID0gZmFsc2U7CiB9CiAKIHVuc2lnbmVkIFRlc3RSdW5uZXI6Ondp
bmRvd0NvdW50KCkKIHsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VD
b3VudCgpOworICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZUNvdW50
KCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJCYWNrRm9yd2FyZExpc3QoKQogewotICAg
IFdLQnVuZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRM
aXN0KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSkpOworICAgIFdLQnVu
ZGxlQmFja0ZvcndhcmRMaXN0Q2xlYXIoV0tCdW5kbGVQYWdlR2V0QmFja0ZvcndhcmRMaXN0KElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSkpOwogfQogCiAvLyBPYmpl
Y3QgQ3JlYXRpb24KQEAgLTM5OSwxOCArNDE1LDE4IEBAIHZvaWQgVGVzdFJ1bm5lcjo6bWFrZVdp
bmRvd09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93T2JqZWN0
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2hvd1dlYkluc3BlY3RvcigpCiB7Ci0gICAgV0tCdW5kbGVJ
bnNwZWN0b3JTaG93KFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3RvclNob3coV0tCdW5k
bGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OmNsb3NlV2ViSW5zcGVjdG9yKCkKIHsKLSAg
ICBXS0J1bmRsZUluc3BlY3RvckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBXS0J1bmRsZUluc3BlY3Rv
ckNsb3NlKFdLQnVuZGxlUGFnZUdldEluc3BlY3RvcihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkucGFnZSgpLT5wYWdlKCkpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpldmFsdWF0ZUluV2Vi
SW5zcGVjdG9yKEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gc2NyaXB0V0sgPSB0b1dLKHNjcmlwdCk7Ci0gICAgV0tCdW5kbGVJbnNwZWN0b3JFdmFs
dWF0ZVNjcmlwdEZvclRlc3QoV0tCdW5kbGVQYWdlR2V0SW5zcGVjdG9yKEluamVjdGVkQnVuZGxl
OjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSksIHNjcmlwdFdLLmdldCgpKTsKKyAgICBXS0J1bmRs
ZUluc3BlY3RvckV2YWx1YXRlU2NyaXB0Rm9yVGVzdChXS0J1bmRsZVBhZ2VHZXRJbnNwZWN0b3Io
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSwgc2NyaXB0V0suZ2V0
KCkpOwogfQogCiB0eXBlZGVmIFdURjo6SGFzaE1hcDx1bnNpZ25lZCwgV0tSZXRhaW5QdHI8V0tC
dW5kbGVTY3JpcHRXb3JsZFJlZj4gPiBXb3JsZE1hcDsKQEAgLTQ0Nyw3ICs0NjMsNyBAQCB2b2lk
IFRlc3RSdW5uZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKEpTQ29udGV4dFJlZiBj
b250ZXh0LCB1bnNpZ25lZCB3bwogCiAgICAgV0tCdW5kbGVGcmFtZVJlZiBmcmFtZSA9IFdLQnVu
ZGxlRnJhbWVGb3JKYXZhU2NyaXB0Q29udGV4dChjb250ZXh0KTsKICAgICBpZiAoIWZyYW1lKQot
ICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6
c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgICAgICBmcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwog
CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZh
U2NyaXB0Q29udGV4dEZvcldvcmxkKGZyYW1lLCB3b3JsZC5nZXQoKSk7CiAgICAgSlNFdmFsdWF0
ZVNjcmlwdChqc0NvbnRleHQsIHNjcmlwdCwgMCwgMCwgMCwgMCk7IApAQCAtNDYyLDI4ICs0Nzgs
MjggQEAgdm9pZCBUZXN0UnVubmVyOjpzZXRQT1NJWExvY2FsZShKU1N0cmluZ1JlZiBsb2NhbGUp
CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VGV4dERpcmVjdGlvbihKU1N0cmluZ1JlZiBkaXJlY3Rp
b24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBX
S0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIHJldHVybiBXS0J1
bmRsZUZyYW1lU2V0VGV4dERpcmVjdGlvbihtYWluRnJhbWUsIHRvV0soZGlyZWN0aW9uKS5nZXQo
KSk7CiB9CiAgICAgCiB2b2lkIFRlc3RSdW5uZXI6OnNldFNob3VsZFN0YXlPblBhZ2VBZnRlckhh
bmRsaW5nQmVmb3JlVW5sb2FkKGJvb2wgc2hvdWxkU3RheU9uUGFnZSkKIHsKLSAgICBJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucG9zdE5ld0JlZm9yZVVubG9hZFJldHVyblZhbHVlKCFzaG91bGRT
dGF5T25QYWdlKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdE5ld0JlZm9y
ZVVubG9hZFJldHVyblZhbHVlKCFzaG91bGRTdGF5T25QYWdlKTsKIH0KIAogdm9pZCBUZXN0UnVu
bmVyOjpzZXREZWZlcnNMb2FkaW5nKGJvb2wgc2hvdWxkRGVmZXJMb2FkaW5nKQogewotICAgIFdL
QnVuZGxlUGFnZVNldERlZmVyc0xvYWRpbmcoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpLCBzaG91bGREZWZlckxvYWRpbmcpOworICAgIFdLQnVuZGxlUGFnZVNldERlZmVy
c0xvYWRpbmcoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCBzaG91
bGREZWZlckxvYWRpbmcpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFBhZ2VWaXNpYmlsaXR5
KEpTU3RyaW5nUmVmIHN0YXRlKQogewotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRI
aWRkZW4oSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0ZSwgImhpZGRlbiIpIHx8IEpT
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3RhdGUsICJwcmVyZW5kZXIiKSk7CisgICAgSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnNldEhpZGRlbihKU1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKHN0YXRlLCAiaGlkZGVuIikgfHwgSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhz
dGF0ZSwgInByZXJlbmRlciIpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZXNldFBhZ2VWaXNp
YmlsaXR5KCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0SGlkZGVuKGZhbHNl
KTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGZhbHNlKTsKIH0K
IAogdHlwZWRlZiBXVEY6Okhhc2hNYXA8dW5zaWduZWQsIEpTVmFsdWVSZWY+IENhbGxiYWNrTWFw
OwpAQCAtNTA1LDcgKzUyMSw3IEBAIHN0YXRpYyB2b2lkIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNr
KHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogICAgIGlmICghY2FsbGJhY2sp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwogICAgIEpTVmFsdWVQcm90ZWN0KGNvbnRleHQsIGNhbGxiYWNrKTsKICAg
ICBjYWxsYmFja01hcCgpLmFkZChpbmRleCwgY2FsbGJhY2spOwpAQCAtNTE1LDcgKzUzMSw3IEBA
IHN0YXRpYyB2b2lkIGNhbGxUZXN0UnVubmVyQ2FsbGJhY2sodW5zaWduZWQgaW5kZXgpCiB7CiAg
ICAgaWYgKCFjYWxsYmFja01hcCgpLmNvbnRhaW5zKGluZGV4KSkKICAgICAgICAgcmV0dXJuOwot
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4
dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogICAgIEpT
T2JqZWN0UmVmIGNhbGxiYWNrID0gSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGNhbGxiYWNrTWFw
KCkudGFrZShpbmRleCksIDApOwogICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24oY29udGV4dCwg
Y2FsbGJhY2ssIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgMCwgMCwgMCk7CkBA
IC01MjUsMzAgKzU0MSwzMCBAQCBzdGF0aWMgdm9pZCBjYWxsVGVzdFJ1bm5lckNhbGxiYWNrKHVu
c2lnbmVkIGluZGV4KQogdm9pZCBUZXN0UnVubmVyOjphZGRDaHJvbWVJbnB1dEZpZWxkKEpTVmFs
dWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2FjaGVUZXN0UnVubmVyQ2FsbGJhY2soQWRkQ2hyb21l
SW5wdXRGaWVsZENhbGxiYWNrSUQsIGNhbGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucG9zdEFkZENocm9tZUlucHV0RmllbGQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2lu
Z2xldG9uKCkucG9zdEFkZENocm9tZUlucHV0RmllbGQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpyZW1vdmVDaHJvbWVJbnB1dEZpZWxkKEpTVmFsdWVSZWYgY2FsbGJhY2spCiB7CiAgICAgY2Fj
aGVUZXN0UnVubmVyQ2FsbGJhY2soUmVtb3ZlQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrSUQsIGNh
bGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFJlbW92ZUNocm9tZUlu
cHV0RmllbGQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFJlbW92ZUNo
cm9tZUlucHV0RmllbGQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpmb2N1c1dlYlZpZXcoSlNW
YWx1ZVJlZiBjYWxsYmFjaykKIHsKICAgICBjYWNoZVRlc3RSdW5uZXJDYWxsYmFjayhGb2N1c1dl
YlZpZXdDYWxsYmFja0lELCBjYWxsYmFjayk7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LnBvc3RGb2N1c1dlYlZpZXcoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9z
dEZvY3VzV2ViVmlldygpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldEJhY2tpbmdTY2FsZUZh
Y3Rvcihkb3VibGUgYmFja2luZ1NjYWxlRmFjdG9yLCBKU1ZhbHVlUmVmIGNhbGxiYWNrKQogewog
ICAgIGNhY2hlVGVzdFJ1bm5lckNhbGxiYWNrKFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNr
SUQsIGNhbGxiYWNrKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNldEJhY2tp
bmdTY2FsZUZhY3RvcihiYWNraW5nU2NhbGVGYWN0b3IpOworICAgIEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wb3N0U2V0QmFja2luZ1NjYWxlRmFjdG9yKGJhY2tpbmdTY2FsZUZhY3Rvcik7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0V2luZG93SXNLZXkoYm9vbCBpc0tleSkKIHsKLSAg
ICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucG9zdFNldFdpbmRvd0lzS2V5KGlzS2V5KTsKKyAg
ICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucG9zdFNldFdpbmRvd0lzS2V5KGlzS2V5KTsK
IH0KIAogdm9pZCBUZXN0UnVubmVyOjpjYWxsQWRkQ2hyb21lSW5wdXRGaWVsZENhbGxiYWNrKCkK
QEAgLTU3OCwxMyArNTk0LDE0IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB0b0Jvb2woSlNTdHJpbmdS
ZWYgdmFsdWUpCiAKIHZvaWQgVGVzdFJ1bm5lcjo6b3ZlcnJpZGVQcmVmZXJlbmNlKEpTU3RyaW5n
UmVmIHByZWZlcmVuY2UsIEpTU3RyaW5nUmVmIHZhbHVlKQogeworICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOwogICAgIC8vIEZJWE1FOiBoYW5k
bGUgbm9uLWJvb2xlYW4gcHJlZmVyZW5jZXMuCi0gICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVm
ZXJlbmNlRm9yVGVzdFJ1bm5lcihJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlR3JvdXAoKSwgdG9XSyhwcmVmZXJlbmNlKS5nZXQo
KSwgdG9Cb29sKHZhbHVlKSk7CisgICAgV0tCdW5kbGVPdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9y
VGVzdFJ1bm5lcihpbmplY3RlZEJ1bmRsZS5idW5kbGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdy
b3VwKCksIHRvV0socHJlZmVyZW5jZSkuZ2V0KCksIHRvQm9vbCh2YWx1ZSkpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnNldEFsd2F5c0FjY2VwdENvb2tpZXMoYm9vbCBhY2NlcHQpCiB7Ci0gICAg
V0tCdW5kbGVTZXRBbHdheXNBY2NlcHRDb29raWVzKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5i
dW5kbGUoKSwgYWNjZXB0KTsKKyAgICBXS0J1bmRsZVNldEFsd2F5c0FjY2VwdENvb2tpZXMoSW5q
ZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBhY2NlcHQpOwogfQogCiBkb3VibGUg
VGVzdFJ1bm5lcjo6cHJlY2lzZVRpbWUoKQpAQCAtNTk4LDcgKzYxNSw4IEBAIHZvaWQgVGVzdFJ1
bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkKIAogICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiBlbXB0eVVybCA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIiIpKTsKICAgICBXS1N0cmluZ1JlZiBsb2NhdGlvbiA9IGVuYWJsZWQgPyBt
X3VzZXJTdHlsZVNoZWV0TG9jYXRpb24uZ2V0KCkgOiBlbXB0eVVybC5nZXQoKTsKLSAgICBXS0J1
bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGxvY2F0aW9uKTsK
KyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsK
KyAgICBXS0J1bmRsZVNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oaW5qZWN0ZWRCdW5kbGUuYnVu
ZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBsb2NhdGlvbik7CiB9CiAKIHZvaWQg
VGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlv
bikKQEAgLTYxMSw2OCArNjI5LDc2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0VXNlclN0eWxlU2hl
ZXRMb2NhdGlvbihKU1N0cmluZ1JlZiBsb2NhdGlvbikKIAogdm9pZCBUZXN0UnVubmVyOjpzZXRT
cGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUo
KSwgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKKyAgICBh
dXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBX
S0J1bmRsZVNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChpbmplY3RlZEJ1bmRsZS5idW5kbGUo
KSwgaW5qZWN0ZWRCdW5kbGUucGFnZUdyb3VwKCksIGVuYWJsZWQpOwogfQogCiB2b2lkIFRlc3RS
dW5uZXI6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhib29sIGVuYWJsZWQpCiB7Ci0g
ICAgV0tCdW5kbGVTZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoSW5qZWN0ZWRCdW5kbGU6
OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCksIGVuYWJsZWQpOworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlU2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRz
KGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSwg
ZW5hYmxlZCk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0U2VyaWFsaXplSFRUUExvYWRzKCkK
IHsKLSAgICBXS0J1bmRsZVNldFNlcmlhbExvYWRpbmdFbmFibGVkKEluamVjdGVkQnVuZGxlOjpz
aGFyZWQoKS5idW5kbGUoKSwgdHJ1ZSk7CisgICAgV0tCdW5kbGVTZXRTZXJpYWxMb2FkaW5nRW5h
YmxlZChJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIHRydWUpOwogfQogCiB2
b2lkIFRlc3RSdW5uZXI6OmRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cygpCiB7Ci0gICAgV0tC
dW5kbGVEaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpKTsKKyAgICBXS0J1bmRsZURpc3BhdGNoUGVuZGluZ0xvYWRSZXF1ZXN0cyhJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6
OnNldENhY2hlTW9kZWwoaW50IG1vZGVsKQogewotICAgIFdLQnVuZGxlU2V0Q2FjaGVNb2RlbChJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1vZGVsKTsKKyAgICBXS0J1bmRsZVNl
dENhY2hlTW9kZWwoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtb2RlbCk7
CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoYm9vbCBlbmFibGVkKQogewotICAgIFdLQnVuZGxlU2V0QXN5bmNocm9ub3VzU3BlbGxDaGVj
a2luZ0VuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZUdyb3VwKCksIGVuYWJsZWQpOworICAgIGF1dG8mIGluamVjdGVk
QnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAgIFdLQnVuZGxlU2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGlu
amVjdGVkQnVuZGxlLnBhZ2VHcm91cCgpLCBlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpncmFudFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewog
ICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAg
ICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCks
IG9yaWdpbldLLmdldCgpLCB0cnVlKTsKKyAgICBhdXRvJiBpbmplY3RlZEJ1bmRsZSA9IEluamVj
dGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1bmRsZVNldFdlYk5vdGlmaWNhdGlvblBl
cm1pc3Npb24oaW5qZWN0ZWRCdW5kbGUuYnVuZGxlKCksIGluamVjdGVkQnVuZGxlLnBhZ2UoKS0+
cGFnZSgpLCBvcmlnaW5XSy5nZXQoKSwgdHJ1ZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6ZGVu
eVdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSlNTdHJpbmdSZWYgb3JpZ2luKQogewogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBvcmlnaW5XSyA9IHRvV0sob3JpZ2luKTsKLSAgICBXS0J1
bmRsZVNldFdlYk5vdGlmaWNhdGlvblBlcm1pc3Npb24oSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgp
LmJ1bmRsZSgpLCBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIG9yaWdp
bldLLmdldCgpLCBmYWxzZSk7CisgICAgYXV0byYgaW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCk7CisgICAgV0tCdW5kbGVTZXRXZWJOb3RpZmljYXRpb25QZXJtaXNz
aW9uKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBpbmplY3RlZEJ1bmRsZS5wYWdlKCktPnBhZ2Uo
KSwgb3JpZ2luV0suZ2V0KCksIGZhbHNlKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpyZW1vdmVB
bGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucygpCiB7Ci0gICAgV0tCdW5kbGVSZW1vdmVBbGxX
ZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxl
KCksIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgYXV0byYg
aW5qZWN0ZWRCdW5kbGUgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCk7CisgICAgV0tCdW5k
bGVSZW1vdmVBbGxXZWJOb3RpZmljYXRpb25QZXJtaXNzaW9ucyhpbmplY3RlZEJ1bmRsZS5idW5k
bGUoKSwgaW5qZWN0ZWRCdW5kbGUucGFnZSgpLT5wYWdlKCkpOwogfQogCiB2b2lkIFRlc3RSdW5u
ZXI6OnNpbXVsYXRlV2ViTm90aWZpY2F0aW9uQ2xpY2soSlNWYWx1ZVJlZiBub3RpZmljYXRpb24p
CiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWlu
RnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBhdXRv
JiBpbmplY3RlZEJ1bmRsZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKTsKKyAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShpbmplY3Rl
ZEJ1bmRsZS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1
bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKLSAgICB1aW50NjRfdCBu
b3RpZmljYXRpb25JRCA9IFdLQnVuZGxlR2V0V2ViTm90aWZpY2F0aW9uSUQoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmljYXRpb24pOwotICAgIEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5wb3N0U2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3Rp
ZmljYXRpb25JRCk7CisgICAgdWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS0J1bmRsZUdldFdl
Yk5vdGlmaWNhdGlvbklEKGluamVjdGVkQnVuZGxlLmJ1bmRsZSgpLCBjb250ZXh0LCBub3RpZmlj
YXRpb24pOworICAgIGluamVjdGVkQnVuZGxlLnBvc3RTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNs
aWNrKG5vdGlmaWNhdGlvbklEKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpzZXRHZW9sb2NhdGlv
blBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSBkb25lIGJ5IGZyYW1lLgotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRHZW9sb2Nh
dGlvblBlcm1pc3Npb24oZW5hYmxlZCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigp
LnNldEdlb2xvY2F0aW9uUGVybWlzc2lvbihlbmFibGVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVy
OjpzZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvbihkb3VibGUgbGF0aXR1ZGUsIGRvdWJsZSBsb25n
aXR1ZGUsIGRvdWJsZSBhY2N1cmFjeSwgSlNWYWx1ZVJlZiBqc0FsdGl0dWRlLCBKU1ZhbHVlUmVm
IGpzQWx0aXR1ZGVBY2N1cmFjeSwgSlNWYWx1ZVJlZiBqc0hlYWRpbmcsIEpTVmFsdWVSZWYganNT
cGVlZCkKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdl
dE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAg
IGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpOworICAg
IFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGlu
amVjdGVkQnVuZGxlLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgYm9v
bCBwcm92aWRlc0FsdGl0dWRlID0gZmFsc2U7CkBAIC03MDMsNDQgKzcyOSw0NSBAQCB2b2lkIFRl
c3RSdW5uZXI6OnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGRvdWJsZSBsYXRpdHVkZSwgZG91
YmxlIGxvbmdpdHVkZSwgZAogICAgICAgICBzcGVlZCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBqc1NwZWVkLCAwKTsKICAgICB9CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0
TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ksIHBy
b3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFsdGl0
dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwgc3Bl
ZWQpOworICAgIGluamVjdGVkQnVuZGxlLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uKGxhdGl0
dWRlLCBsb25naXR1ZGUsIGFjY3VyYWN5LCBwcm92aWRlc0FsdGl0dWRlLCBhbHRpdHVkZSwgcHJv
dmlkZXNBbHRpdHVkZUFjY3VyYWN5LCBhbHRpdHVkZUFjY3VyYWN5LCBwcm92aWRlc0hlYWRpbmcs
IGhlYWRpbmcsIHByb3ZpZGVzU3BlZWQsIHNwZWVkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoSlNTdHJpbmdSZWYgbWVz
c2FnZSkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZVdLID0gdG9XSyht
ZXNzYWdlKTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0aW9u
UG9zaXRpb25VbmF2YWlsYWJsZUVycm9yKG1lc3NhZ2VXSy5nZXQoKSk7CisgICAgSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnNldE1vY2tHZW9sb2NhdGlvblBvc2l0aW9uVW5hdmFpbGFibGVF
cnJvcihtZXNzYWdlV0suZ2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnNldFVzZXJNZWRp
YVBlcm1pc3Npb24oYm9vbCBlbmFibGVkKQogewogICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBi
ZSBkb25lIGJ5IGZyYW1lLgotICAgIEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5zZXRVc2VyTWVk
aWFQZXJtaXNzaW9uKGVuYWJsZWQpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5z
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uKGVuYWJsZWQpOwogfQogCiBib29sIFRlc3RSdW5uZXI6OmNh
bGxTaG91bGRDbG9zZU9uV2ViVmlldygpCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJh
bWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBh
Z2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxl
UGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdl
KCkpOwogICAgIHJldHVybiBXS0J1bmRsZUZyYW1lQ2FsbFNob3VsZENsb3NlT25XZWJWaWV3KG1h
aW5GcmFtZSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVCYWNrTmF2aWdhdGlvbih1bnNp
Z25lZCBob3dGYXJCYWNrd2FyZCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVl
dWVCYWNrTmF2aWdhdGlvbihob3dGYXJCYWNrd2FyZCk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNp
bmdsZXRvbigpLnF1ZXVlQmFja05hdmlnYXRpb24oaG93RmFyQmFja3dhcmQpOwogfQogCiB2b2lk
IFRlc3RSdW5uZXI6OnF1ZXVlRm9yd2FyZE5hdmlnYXRpb24odW5zaWduZWQgaG93RmFyRm9yd2Fy
ZCkKIHsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVGb3J3YXJkTmF2aWdhdGlv
bihob3dGYXJGb3J3YXJkKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVG
b3J3YXJkTmF2aWdhdGlvbihob3dGYXJGb3J3YXJkKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpx
dWV1ZUxvYWQoSlNTdHJpbmdSZWYgdXJsLCBKU1N0cmluZ1JlZiB0YXJnZXQpCiB7Ci0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IGJhc2VVUkxXSyhBZG9wdFdLLCBXS0J1bmRsZUZyYW1lQ29weVVS
TChXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpKSkpOworICAgIGF1dG8mIGluamVjdGVkQnVuZGxlID0gSW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpOworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiBiYXNlVVJMV0soQWRvcHRX
SywgV0tCdW5kbGVGcmFtZUNvcHlVUkwoV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKGluamVjdGVk
QnVuZGxlLnBhZ2UoKS0+cGFnZSgpKSkpOwogICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmxX
SyhBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhCYXNlVVJMKGJhc2VVUkxXSy5nZXQoKSwgdG9XVEZT
dHJpbmcodG9XSyh1cmwpKS51dGY4KCkuZGF0YSgpKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHVybFN0cmluZ1dLKEFkb3B0V0ssIFdLVVJMQ29weVN0cmluZyh1cmxXSy5nZXQoKSkp
OwogCi0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnF1ZXVlTG9hZCh1cmxTdHJpbmdXSy5n
ZXQoKSwgdG9XSyh0YXJnZXQpLmdldCgpKTsKKyAgICBpbmplY3RlZEJ1bmRsZS5xdWV1ZUxvYWQo
dXJsU3RyaW5nV0suZ2V0KCksIHRvV0sodGFyZ2V0KS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1
bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250ZW50LCBKU1N0cmluZ1Jl
ZiBiYXNlVVJMLCBKU1N0cmluZ1JlZiB1bnJlYWNoYWJsZVVSTCkKQEAgLTc0OSw0NSArNzc2LDQ1
IEBAIHZvaWQgVGVzdFJ1bm5lcjo6cXVldWVMb2FkSFRNTFN0cmluZyhKU1N0cmluZ1JlZiBjb250
ZW50LCBKU1N0cmluZ1JlZiBiYXNlVVJMLCBKCiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGJhc2VVUkxXSyA9IGJhc2VVUkwgPyB0b1dLKGJhc2VVUkwpIDogV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+KCk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVucmVhY2hhYmxlVVJMV0sg
PSB1bnJlYWNoYWJsZVVSTCA/IHRvV0sodW5yZWFjaGFibGVVUkwpIDogV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+KCk7CiAKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVMb2FkSFRN
TFN0cmluZyhjb250ZW50V0suZ2V0KCksIGJhc2VVUkxXSy5nZXQoKSwgdW5yZWFjaGFibGVVUkxX
Sy5nZXQoKSk7CisgICAgSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnF1ZXVlTG9hZEhUTUxT
dHJpbmcoY29udGVudFdLLmdldCgpLCBiYXNlVVJMV0suZ2V0KCksIHVucmVhY2hhYmxlVVJMV0su
Z2V0KCkpOwogfQogCiB2b2lkIFRlc3RSdW5uZXI6OnF1ZXVlUmVsb2FkKCkKIHsKLSAgICBJbmpl
Y3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVSZWxvYWQoKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6
c2luZ2xldG9uKCkucXVldWVSZWxvYWQoKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZUxv
YWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFdLUmV0YWluUHRyPFdLU3Ry
aW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2NyaXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1
bmRsZTo6c2luZ2xldG9uKCkucXVldWVMb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjpxdWV1ZU5vbkxvYWRpbmdTY3JpcHQoSlNTdHJpbmdSZWYgc2Ny
aXB0KQogewogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBzY3JpcHRXSyA9IHRvV0soc2Ny
aXB0KTsKLSAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucXVldWVOb25Mb2FkaW5nU2NyaXB0
KHNjcmlwdFdLLmdldCgpKTsKKyAgICBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucXVldWVO
b25Mb2FkaW5nU2NyaXB0KHNjcmlwdFdLLmdldCgpKTsKIH0KIAogdm9pZCBUZXN0UnVubmVyOjpz
ZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzKGJvb2wgaGFuZGxlc0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlcykKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEhhbmRsZXNBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSIpKTsKICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShoYW5kbGVzQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VzKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7Cisg
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxl
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIHZvaWQgVGVz
dFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25Vc2VybmFtZShKU1N0cmluZ1JlZiB1c2VybmFtZSkK
IHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhlbnRpY2F0aW9uVXNlcm5hbWUiKSk7
CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3Ry
aW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHVzZXJuYW1lKSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBt
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRs
ZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5n
ZXQoKSk7CiB9CiAKIHZvaWQgVGVzdFJ1bm5lcjo6c2V0QXV0aGVudGljYXRpb25QYXNzd29yZChK
U1N0cmluZ1JlZiBwYXNzd29yZCkKIHsKICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldEF1dGhl
bnRpY2F0aW9uUGFzc3dvcmQiKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aEpTU3RyaW5nKHBhc3N3b3JkKSk7Ci0g
ICAgV0tCdW5kbGVQb3N0TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkuYnVuZGxlKCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0
TWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1l
LmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiB9CiAKIGJvb2wgVGVzdFJ1bm5lcjo6c2VjdXJl
RXZlbnRJbnB1dElzRW5hYmxlZCgpIGNvbnN0CkBAIC03OTUsNyArODIyLDcgQEAgYm9vbCBUZXN0
UnVubmVyOjpzZWN1cmVFdmVudElucHV0SXNFbmFibGVkKCkgY29uc3QKICAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNlY3VyZUV2ZW50SW5wdXRJc0VuYWJsZWQiKSk7CiAgICAgV0tUeXBlUmVmIHJl
dHVybkRhdGEgPSAwOwogCi0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVj
dGVkQnVuZGxlOjpzaGFyZWQoKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDAsICZyZXR1
cm5EYXRhKTsKKyAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCwgJnJldHVybkRh
dGEpOwogICAgIHJldHVybiBXS0Jvb2xlYW5HZXRWYWx1ZShzdGF0aWNfY2FzdDxXS0Jvb2xlYW5S
ZWY+KHJldHVybkRhdGEpKTsKIH0KIApAQCAtODAzLDE5ICs4MzAsMTkgQEAgdm9pZCBUZXN0UnVu
bmVyOjpzZXRCbG9ja0FsbFBsdWdpbnMoYm9vbCBzaG91bGRCbG9jaykKIHsKICAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIlNldEJsb2NrQWxsUGx1Z2lucyIpKTsKICAgICBXS1JldGFpblB0cjxXS0Jv
b2xlYW5SZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLQm9vbGVhbkNyZWF0ZShzaG91bGRCbG9j
aykpOwotICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLmJ1
bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVu
ZGxlUG9zdE1lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNz
YWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwogfQogCiBKU1ZhbHVlUmVmIFRlc3RS
dW5uZXI6Om51bWJlck9mREZHQ29tcGlsZXMoSlNWYWx1ZVJlZiB0aGVGdW5jdGlvbikKIHsKLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJ
bmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxl
OjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQg
PSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKICAgICByZXR1
cm4gSlNDOjpudW1iZXJPZkRGR0NvbXBpbGVzKGNvbnRleHQsIHRoZUZ1bmN0aW9uKTsKIH0KIAog
SlNWYWx1ZVJlZiBUZXN0UnVubmVyOjpuZXZlcklubGluZUZ1bmN0aW9uKEpTVmFsdWVSZWYgdGhl
RnVuY3Rpb24pCiB7Ci0gICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
KyAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFt
ZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29u
dGV4dFJlZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5G
cmFtZSk7CiAgICAgcmV0dXJuIEpTQzo6c2V0TmV2ZXJJbmxpbmUoY29udGV4dCwgdGhlRnVuY3Rp
b24pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGV4dElucHV0Q29udHJvbGxlci5jcHAKaW5kZXggYWU3MzdmZGMxZmE0NjIxZGE5
NmIxYzU2MzJhNTg5YjM2MDA1N2Y1ZC4uZjRlNjhmNjk1NTlmMzllMzZhZmM1ZGQzMjI4MDhkYTQz
ZTA4ODhlOSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1RleHRJbnB1dENvbnRyb2xsZXIuY3BwCkBAIC01OSwyMiArNTksMjIgQEAg
dm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjptYWtlV2luZG93T2JqZWN0KEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiB3aW4KIAogdm9pZCBUZXh0SW5wdXRDb250cm9sbGVyOjpzZXRN
YXJrZWRUZXh0KEpTU3RyaW5nUmVmIHRleHQsIGludCBmcm9tLCBpbnQgbGVuZ3RoKQogewotICAg
IFdLQnVuZGxlUGFnZVNldENvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdl
KCktPnBhZ2UoKSwgdG9XSyh0ZXh0KS5nZXQoKSwgZnJvbSwgbGVuZ3RoKTsKKyAgICBXS0J1bmRs
ZVBhZ2VTZXRDb21wb3NpdGlvbihJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCksIHRvV0sodGV4dCkuZ2V0KCksIGZyb20sIGxlbmd0aCk7CiB9CiAKIGJvb2wgVGV4dElu
cHV0Q29udHJvbGxlcjo6aGFzTWFya2VkVGV4dCgpCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFn
ZUhhc0NvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7
CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUhhc0NvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiB9CiAKIHZvaWQgVGV4dElucHV0Q29udHJvbGxl
cjo6dW5tYXJrVGV4dCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlQ29uZmlybUNvbXBvc2l0aW9uKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVQYWdl
Q29uZmlybUNvbXBvc2l0aW9uKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKSk7CiB9CiAKIHZvaWQgVGV4dElucHV0Q29udHJvbGxlcjo6aW5zZXJ0VGV4dChKU1N0cmlu
Z1JlZiB0ZXh0KQogewotICAgIFdLQnVuZGxlUGFnZUNvbmZpcm1Db21wb3NpdGlvbldpdGhUZXh0
KEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyh0ZXh0KS5nZXQo
KSk7CisgICAgV0tCdW5kbGVQYWdlQ29uZmlybUNvbXBvc2l0aW9uV2l0aFRleHQoSW5qZWN0ZWRC
dW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKHRleHQpLmdldCgpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlckF0ay5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Q29udHJv
bGxlckF0ay5jcHAKaW5kZXggOTM1Mjc3MjIwZGRlNjRhYmYwMDYzMjkzOTk4NjUyYTA4ODdkNjEx
ZC4uNGI1NDFmNWIzZGY1ZDMxNmNkNTgyNTcxNzIxNTg1Zjg1YjA4N2QyZCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXJBdGsuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvYXRrL0FjY2Vzc2liaWxpdHlDb250cm9sbGVyQXRrLmNwcApAQCAtODQsNyArODQsNyBAQCBz
dGF0aWMgQXRrT2JqZWN0KiBjaGlsZEVsZW1lbnRCeUlkKEF0a09iamVjdCogcGFyZW50LCBjb25z
dCBjaGFyKiBpZCkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5nUmVmIGlkKQog
ewotICAgIEF0a09iamVjdCogcm9vdCA9IEFUS19PQkpFQ1QoV0tBY2Nlc3NpYmlsaXR5Um9vdE9i
amVjdChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpKTsKKyAgICBBdGtP
YmplY3QqIHJvb3QgPSBBVEtfT0JKRUNUKFdLQWNjZXNzaWJpbGl0eVJvb3RPYmplY3QoSW5qZWN0
ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKSk7CiAgICAgaWYgKCFyb290KQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA3LDcgKzEwNyw3IEBAIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cGxhdGZvcm1OYW1lKCkKIAog
UGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cjo6cm9vdEVsZW1lbnQoKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIHZvaWQq
IHJvb3QgPSBXS0FjY2Vzc2liaWxpdHlSb290T2JqZWN0KHBhZ2UpOwogCiAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNyZWF0ZShzdGF0aWNfY2FzdDxBdGtPYmplY3QqPihyb290
KSk7CkBAIC0xMTUsNyArMTE1LDcgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6cm9vdEVsZW1lbnQoKQogCiBQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlDb250cm9sbGVyOjpmb2N1c2VkRWxl
bWVudCgpCiB7Ci0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hh
cmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3Rl
ZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgdm9pZCogcm9vdCA9IFdL
QWNjZXNzaWJpbGl0eUZvY3VzZWRPYmplY3QocGFnZSk7CiAKICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6Y3JlYXRlKHN0YXRpY19jYXN0PEF0a09iamVjdCo+KHJvb3QpKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vz
c2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRrLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvYXRrL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyQXRr
LmNwcAppbmRleCA2ZTBhMWM4MGNlNzE1MTQ5MGU4OWRmOGQ5ZTQyNzg1ODNlNTU0MzRjLi44MjFi
MTUwNzMwMzU3NWM0MTA5ZmVlY2YxZmFiZGU1MmIxMWZlYWViIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5Tm90aWZpY2F0
aW9uSGFuZGxlckF0ay5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9hdGsvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXJBdGsuY3BwCkBAIC01NSw3
ICs1NSw3IEBAIGdib29sZWFuIGF4T2JqZWN0RXZlbnRMaXN0ZW5lcihHU2lnbmFsSW52b2NhdGlv
bkhpbnQqIHNpZ25hbEhpbnQsIHVuc2lnbmVkIG51bVBhCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCi0gICAgV0tCdW5kbGVQYWdlUmVm
IHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tC
dW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5w
YWdlKCk7CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUocGFnZSk7CiAgICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJh
bWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogI2Vsc2UKQEAgLTE1MCw3ICsxNTAs
NyBAQCB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpzZXROb3RpZmljYXRp
b25GdW5jdGlvbkNhbGxiYWNrKEpTVmFsdWVSZQogICAgIG1fbm90aWZpY2F0aW9uRnVuY3Rpb25D
YWxsYmFjayA9IG5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJhY2s7CiAKICNpZiBQTEFURk9STShH
VEspIHx8IFBMQVRGT1JNKEVGTCkKLSAgICBXS0J1bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVk
QnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1bmRsZVBhZ2VSZWYgcGFn
ZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKTsKICAgICBXS0J1
bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShwYWdlKTsK
ICAgICBKU0NvbnRleHRSZWYganNDb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRD
b250ZXh0KG1haW5GcmFtZSk7CiAjZWxzZQpAQCAtMTgxLDcgKzE4MSw3IEBAIHZvaWQgQWNjZXNz
aWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXI6OnNldE5vdGlmaWNhdGlvbkZ1bmN0aW9uQ2FsbGJh
Y2soSlNWYWx1ZVJlCiB2b2lkIEFjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpyZW1v
dmVBY2Nlc3NpYmlsaXR5Tm90aWZpY2F0aW9uSGFuZGxlcigpCiB7CiAjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShFRkwpCi0gICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2UgPSBJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCk7CisgICAgV0tCdW5kbGVQYWdlUmVmIHBhZ2Ug
PSBJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCk7CiAgICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUocGFnZSk7CiAg
ICAgSlNDb250ZXh0UmVmIGpzQ29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29u
dGV4dChtYWluRnJhbWUpOwogI2Vsc2UKQEAgLTIzMSw3ICsyMzEsNyBAQCB2b2lkIEFjY2Vzc2li
aWxpdHlOb3RpZmljYXRpb25IYW5kbGVyOjpjb25uZWN0QWNjZXNzaWJpbGl0eUNhbGxiYWNrcygp
CiAgICAgICAgIHVuc2lnbmVkIGlkID0gYXRrX2FkZF9nbG9iYWxfZXZlbnRfbGlzdGVuZXIoYXhP
YmplY3RFdmVudExpc3RlbmVyLCAqc2lnbmFsTmFtZSk7CiAgICAgICAgIGlmICghaWQpIHsKICAg
ICAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gU3RyaW5nOjpmb3JtYXQoImF0a19hZGRfZ2xvYmFs
X2V2ZW50X2xpc3RlbmVyIGZhaWxlZCBmb3Igc2lnbmFsICVzXG4iLCAqc2lnbmFsTmFtZSk7Ci0g
ICAgICAgICAgICBJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkub3V0cHV0VGV4dChtZXNzYWdlKTsK
KyAgICAgICAgICAgIEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5vdXRwdXRUZXh0KG1lc3Nh
Z2UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudEF0ay5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAppbmRleCAwYWQyMjM1NGJkNzlhOTE1MzI3Y2I4
YTA4YWJlMWE5ZmFjMWQ1ZmU4Li5jM2JlMWViMWE2NDk1Yzg1ODZhOTJhNWI5MGE1MTEzOTgzNzM2
ZDg3IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0
ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcApAQCAt
NjIxLDcgKzYyMSw3IEBAIHN0YXRpYyBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+PiBjb252ZXJ0R1B0ckFycmF5VG9WZWN0b3IoY29uc3QgR1B0CiAKIHN0YXRpYyBKU1ZhbHVl
UmVmIGNvbnZlcnRUb0pTT2JqZWN0QXJyYXkoY29uc3QgVmVjdG9yPFJlZlB0cjxBY2Nlc3NpYmls
aXR5VUlFbGVtZW50Pj4mIGNoaWxkcmVuKQogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZy
YW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5w
YWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRs
ZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFn
ZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2Ny
aXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgc2l6ZV90IGVsZW1lbnRDb3VudCA9IGNoaWxk
cmVuLnNpemUoKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0gYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2NvY29hL0luamVjdGVkQnVuZGxlUGFnZUNvY29hLm1tCmlu
ZGV4IDM5ODkxOTEyZjM5ZGIyNmJiZGM5ZTUwNDAzNTVlOGYzYzlmNGRkNDUuLjQ2MmFlNWI1Njk5
ZTU0MTJkNjgyYmJmY2ZiMjdlODI0OTMxMjNkZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvY29jb2EvSW5qZWN0ZWRCdW5kbGVQYWdlQ29jb2EubW0K
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9jb2NvYS9JbmplY3Rl
ZEJ1bmRsZVBhZ2VDb2NvYS5tbQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEluamVjdGVkQnVuZGxl
UGFnZTo6cGxhdGZvcm1EaWRTdGFydFByb3Zpc2lvbmFsTG9hZEZvckZyYW1lKFdLQnVuZGxlRnJh
bWVSZQogICAgIGlmICghV0tCdW5kbGVGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2V0Q3Jhc2hSZXBvcnRBcHBsaWNhdGlvblNwZWNpZmljSW5mb3JtYXRp
b25Ub1VSTChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkudGVzdFJ1bm5lcigpLT50ZXN0VVJMKCkp
OworICAgIHNldENyYXNoUmVwb3J0QXBwbGljYXRpb25TcGVjaWZpY0luZm9ybWF0aW9uVG9VUkwo
SW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnRlc3RSdW5uZXIoKS0+dGVzdFVSTCgpKTsKIAog
I2lmIFBMQVRGT1JNKElPUykKICAgICBXS0J1bmRsZVBhZ2VTZXRVc2VUZXN0aW5nVmlld3BvcnRD
b25maWd1cmF0aW9uKHBhZ2UoKSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL2VmbC9UZXN0UnVubmVyRWZsLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCmluZGV4IDgy
ODkwMjNkN2Q2ZDRlYjM1NTNkNTY1YTM1MjZkNWViNWEzZGQ0MmUuLmNiYzA3MGIzYThmZmYzNTFm
N2YxN2IxNGM1YzA1YTU2NTkzNzJlZjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCisrKyBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvZWZsL1Rlc3RSdW5uZXJFZmwuY3BwCkBAIC0zMCw3
ICszMCw3IEBAIG5hbWVzcGFjZSBXVFIgewogCiBzdGF0aWMgRWluYV9Cb29sIHdhaXRUb0R1bXBX
YXRjaGRvZ1RpbWVyQ2FsbGJhY2sodm9pZCopCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJl
ZCgpLnRlc3RSdW5uZXIoKS0+d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIElu
amVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXBXYXRjaGRv
Z1RpbWVyRmlyZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlDb250cm9s
bGVySU9TLm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KaW5kZXggYmM2OWQ4ZGEyNzEyZjZkZjlkNzk4NjY5
NTgxODg5MDJiODZlM2FjMi4uOGY5YzRlMDFjODU3YzI2MWMxMTk0YWQyMGIzZWRhZThhMWMyMWU0
ZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3Mv
QWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXJJT1MubW0KQEAgLTcz
LDcgKzczLDcgQEAgc3RhdGljIGlkIGZpbmRBY2Nlc3NpYmxlT2JqZWN0QnlJZChpZCBvYmosIE5T
U3RyaW5nICppZEF0dHJpYnV0ZSkKIAogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
PiBBY2Nlc3NpYmlsaXR5Q29udHJvbGxlcjo6YWNjZXNzaWJsZUVsZW1lbnRCeUlkKEpTU3RyaW5n
UmVmIGlkQXR0cmlidXRlKQogewotICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdlID0gSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpOworICAgIFdLQnVuZGxlUGFnZVJlZiBwYWdl
ID0gSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpOwogICAgIGlkIHJv
b3QgPSBzdGF0aWNfY2FzdDxQbGF0Zm9ybVVJRWxlbWVudD4oV0tBY2Nlc3NpYmlsaXR5Um9vdE9i
amVjdChwYWdlKSk7CiAKICAgICBpZCByZXN1bHQgPSBmaW5kQWNjZXNzaWJsZU9iamVjdEJ5SWQo
cm9vdCwgW05TU3RyaW5nIHN0cmluZ1dpdGhKU1N0cmluZ1JlZjppZEF0dHJpYnV0ZV0pOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQppbmRleCA1M2ZlMjJjMzg2
MGQwYTg4Yzc0MWVkMzViMDI3ODY4NGU5NjlkMmNmLi5lNjg4Yzk4MjdlNTI1MTZjYmUyMzVlNGIw
OTE3ZTZlYzE2Y2E5YmM0IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxlck1hYy5tbQorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ck1hYy5tbQpAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBpZCBmaW5kQWNjZXNzaWJsZU9iamVj
dEJ5SWQoaWQgb2JqLCBOU1N0cmluZyAqaWRBdHRyaWJ1dGUpCiAKIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gQWNjZXNzaWJpbGl0eUNvbnRyb2xsZXI6OmFjY2Vzc2libGVFbGVt
ZW50QnlJZChKU1N0cmluZ1JlZiBpZEF0dHJpYnV0ZSkKIHsKLSAgICBXS0J1bmRsZVBhZ2VSZWYg
cGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKTsKKyAgICBXS0J1
bmRsZVBhZ2VSZWYgcGFnZSA9IEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBh
Z2UoKTsKICAgICBpZCByb290ID0gc3RhdGljX2Nhc3Q8UGxhdGZvcm1VSUVsZW1lbnQ+KFdLQWNj
ZXNzaWJpbGl0eVJvb3RPYmplY3QocGFnZSkpOwogCiAgICAgaWQgcmVzdWx0ID0gZmluZEFjY2Vz
c2libGVPYmplY3RCeUlkKHJvb3QsIFtOU1N0cmluZyBzdHJpbmdXaXRoSlNTdHJpbmdSZWY6aWRB
dHRyaWJ1dGVdKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlOb3RpZmljYXRpb25IYW5kbGVyLm1tIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlv
bkhhbmRsZXIubW0KaW5kZXggMjNiZTkzZjY2OTAzMTNmZjUyZjJjYmU5MzYzZTkyNzdiYzAzYmE2
NC4uNjUxYjU5MTEyZTg5N2ZiNjZhODNiMmU3NWY2ZjBlZjY2ZjAyYzViMiAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5v
dGlmaWNhdGlvbkhhbmRsZXIubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eU5vdGlmaWNhdGlvbkhhbmRsZXIubW0KQEAgLTc3LDcg
Kzc3LDcgQEAKIHsKICAgICBbc2VsZiBzdG9wT2JzZXJ2aW5nXTsKIAotICAgIFdLQnVuZGxlRnJh
bWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKKyAgICBXS0J1bmRsZUZyYW1lUmVmIG1h
aW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShXVFI6OkluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBX
S0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZyYW1lKTsKIAogICAgIEpTVmFs
dWVVbnByb3RlY3QoY29udGV4dCwgbV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKTsKQEAg
LTkxLDcgKzkxLDcgQEAKICAgICBpZiAoIWNhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShX
VFI6OkluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7CisgICAgV0tCdW5k
bGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmpl
Y3RlZEJ1bmRsZTo6c2luZ2xldG9uKCkucGFnZSgpLT5wYWdlKCkpOwogICAgIEpTQ29udGV4dFJl
ZiBjb250ZXh0ID0gV0tCdW5kbGVGcmFtZUdldEphdmFTY3JpcHRDb250ZXh0KG1haW5GcmFtZSk7
CiAKICAgICBpZiAobV9ub3RpZmljYXRpb25GdW5jdGlvbkNhbGxiYWNrKQpAQCAtMTI1LDcgKzEy
NSw3IEBACiAgICAgaWYgKG1fcGxhdGZvcm1FbGVtZW50ICYmIG1fcGxhdGZvcm1FbGVtZW50ICE9
IFtub3RpZmljYXRpb24gb2JqZWN0XSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoV1RSOjpJbmplY3Rl
ZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYg
bWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1lKFdUUjo6SW5qZWN0ZWRCdW5kbGU6
OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4dChtYWluRnJhbWUpOwogCiAgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzTm90aWZpY2F0aW9uKEFkb3B0LCBbbm90aWZpY2F0aW9u
TmFtZSBjcmVhdGVKU1N0cmluZ1JlZl0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbSBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRNYWMubW0KaW5kZXggYTIwODlkZjFlMTllZWE2Nzg5OGEyNTRiMjcwNTc1MzJjMzY0YjI3
MS4uOTVkNTQzMzAxNWNhZjVjN2Y2OTFmNTRhNzY5MjQzNzFkMmNlYzQ1MyAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCkBAIC0zNjAsNyArMzYwLDcgQEAgdm9p
ZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRDaGlsZHJlbldpdGhSYW5nZShWZWN0b3I8UmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUUKIAogSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
Ojpyb3dIZWFkZXJzKCkgY29uc3QKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9
IFdLQnVuZGxlUGFnZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgp
LT5wYWdlKCkpOworICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdl
R2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7
CiAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENv
bnRleHQobWFpbkZyYW1lKTsKICAgICAKICAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKQEAg
LTM3NCw3ICszNzQsNyBAQCBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnJvd0hl
YWRlcnMoKSBjb25zdAogCiBKU1ZhbHVlUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmNvbHVt
bkhlYWRlcnMoKSBjb25zdAogewotICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tC
dW5kbGVQYWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBh
Z2UoKSk7CisgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRN
YWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLnBhZ2UoKS0+cGFnZSgpKTsKICAg
ICBKU0NvbnRleHRSZWYgY29udGV4dCA9IFdLQnVuZGxlRnJhbWVHZXRKYXZhU2NyaXB0Q29udGV4
dChtYWluRnJhbWUpOwogCiAgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCkBAIC01OTQsNyAr
NTk0LDcgQEAgZG91YmxlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om51bWJlckF0dHJpYnV0ZVZh
bHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0ZSkKIAogSlNWYWx1ZVJlZiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp1aUVsZW1lbnRBcnJheUF0dHJpYnV0ZVZhbHVlKEpTU3RyaW5nUmVmIGF0dHJpYnV0
ZSkgY29uc3QKIHsKLSAgICBXS0J1bmRsZUZyYW1lUmVmIG1haW5GcmFtZSA9IFdLQnVuZGxlUGFn
ZUdldE1haW5GcmFtZShJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCkpOwor
ICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQYWdlR2V0TWFpbkZyYW1l
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5wYWdlKCktPnBhZ2UoKSk7CiAgICAgSlNDb250
ZXh0UmVmIGNvbnRleHQgPSBXS0J1bmRsZUZyYW1lR2V0SmF2YVNjcmlwdENvbnRleHQobWFpbkZy
YW1lKTsKICAgICAKICAgICBWZWN0b3I8UmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+PiBl
bGVtZW50czsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDE0ZjJkOWI5M2YwY2E0OWQzZDFlMDUx
Y2VjMzYyNDRiODZhZDcxOWIuLjIzZjViNjkwNTE2ZTliODFjNmMzYTBhNjdiMDRmYzM5NGQyM2M3
OTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFj
L1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDQsNyArNDQsNyBAQCB2b2lkIFRlc3RSdW5u
ZXI6OmludmFsaWRhdGVXYWl0VG9EdW1wV2F0Y2hkb2dUaW1lcigpCiAKIHN0YXRpYyB2b2lkIHdh
aXRVbnRpbERvbmVXYXRjaGRvZ1RpbWVyRmlyZWQoQ0ZSdW5Mb29wVGltZXJSZWYgdGltZXIsIHZv
aWQqIGluZm8pCiB7Ci0gICAgSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnRlc3RSdW5uZXIoKS0+
d2FpdFRvRHVtcFdhdGNoZG9nVGltZXJGaXJlZCgpOworICAgIEluamVjdGVkQnVuZGxlOjpzaW5n
bGV0b24oKS50ZXN0UnVubmVyKCktPndhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyRmlyZWQoKTsKIH0K
IAogdm9pZCBUZXN0UnVubmVyOjppbml0aWFsaXplV2FpdFRvRHVtcFdhdGNoZG9nVGltZXJJZk5l
ZWRlZCgpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGEy
OTQ0Mzk5OGVmNTVjZjljZDQwOTI4ZDIzNjdmZWZjZWE2MjQ5NzMuLjMzN2FhNzY5Mzc5NTRhMmYx
MGNiZjQ3MzM5N2E1YjQ2YWJlZjk2NTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCkBAIC05Miw3ICs5Miw3IEBAIHN0YXRpYyBXS0RhdGFSZWYgY29weVdlYkNy
eXB0b01hc3RlcktleShXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQqKQogCiBzdGF0aWMgVGVzdENv
bnRyb2xsZXIqIGNvbnRyb2xsZXI7CiAKLVRlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkKK1Rlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkKIHsK
ICAgICBBU1NFUlQoY29udHJvbGxlcik7CiAgICAgcmV0dXJuICpjb250cm9sbGVyOwpAQCAtMTUw
LDcgKzE1MCw3IEBAIHN0YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiBwYWdlLCBX
S1JlY3QgZnJhbWUsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCiBzdGF0aWMgYm9vbCBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoV0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIG1lc3NhZ2Us
IFdLRnJhbWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQqKQogewogICAgIHByaW50ZigiQ09ORklSTSBO
QVZJR0FUSU9OOiAlc1xuIiwgdG9TVEQobWVzc2FnZSkuY19zdHIoKSk7Ci0gICAgcmV0dXJuIFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5iZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSgpOworICAgIHJl
dHVybiBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUo
KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6cnVuTW9kYWwoV0tQYWdlUmVmIHBhZ2UsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0xODMsMTIgKzE4MywxMiBAQCBzdGF0aWMgdm9pZCB1
bmZvY3VzKFdLUGFnZVJlZiBwYWdlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogCiBzdGF0aWMg
dm9pZCBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdLUGFnZVJl
ZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0UmVmIHBlcm1pc3Npb25SZXF1ZXN0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQog
ewotICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5oYW5kbGVHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KHBlcm1pc3Npb25SZXF1ZXN0KTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuaGFuZGxlR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChwZXJtaXNzaW9uUmVxdWVz
dCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlY2lkZVBvbGljeUZvclVzZXJNZWRpYVBlcm1pc3Npb25S
ZXF1ZXN0KFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgV0tTZWN1cml0eU9yaWdpblJlZiwgV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uUmVxdWVzdFJlZiBwZXJtaXNzaW9uUmVxdWVzdCwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKIHsKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuaGFuZGxlVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3QocGVybWlzc2lvblJlcXVlc3QpOworICAgIFRlc3RDb250cm9s
bGVyOjpzaW5nbGV0b24oKS5oYW5kbGVVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdChwZXJtaXNz
aW9uUmVxdWVzdCk7CiB9CiAKIFdLUGFnZVJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRlT3RoZXJQ
YWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiwg
V0tFdmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQpAQCAtMjU4LDcgKzI1OCw3IEBAIFdLUGFnZVJlZiBUZXN0Q29udHJvbGxlcjo6Y3JlYXRl
T3RoZXJQYWdlKFdLUGFnZVJlZiBvbGRQYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLCiAgICAgV0tQ
YWdlU2V0UGFnZVVJQ2xpZW50KG5ld1BhZ2UsICZvdGhlclBhZ2VVSUNsaWVudC5iYXNlKTsKIAog
ICAgIFdLUGFnZUxvYWRlckNsaWVudFY1IHBhZ2VMb2FkZXJDbGllbnQgPSB7Ci0gICAgICAgIHsg
NSwgJlRlc3RDb250cm9sbGVyOjpzaGFyZWQoKSB9LAorICAgICAgICB7IDUsICZUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkgfSwKICAgICAgICAgMCwgLy8gZGlkU3RhcnRQcm92aXNpb25hbExv
YWRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbExvYWRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRGYWlsUHJvdmlzaW9uYWxMb2Fk
V2l0aEVycm9yRm9yRnJhbWUKQEAgLTMwMiw3ICszMDIsNyBAQCBXS1BhZ2VSZWYgVGVzdENvbnRy
b2xsZXI6OmNyZWF0ZU90aGVyUGFnZShXS1BhZ2VSZWYgb2xkUGFnZSwgV0tVUkxSZXF1ZXN0UmVm
LCBXSwogICAgIFdLUGFnZVNldFBhZ2VMb2FkZXJDbGllbnQodmlldy0+cGFnZSgpLCAmcGFnZUxv
YWRlckNsaWVudC5iYXNlKTsKIAogICAgIFdLUGFnZVBvbGljeUNsaWVudFYxIHBhZ2VQb2xpY3lD
bGllbnQgPSB7Ci0gICAgICAgIHsgMSwgJlRlc3RDb250cm9sbGVyOjpzaGFyZWQoKSB9LAorICAg
ICAgICB7IDEsICZUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkgfSwKICAgICAgICAgMCwgLy8g
ZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbl9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCiAg
ICAgICAgIDAsIC8vIGRlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbgogICAgICAgICAwLCAv
LyBkZWNpZGVQb2xpY3lGb3JSZXNwb25zZV9kZXByZWNhdGVkRm9yVXNlV2l0aFYwCkBAIC0zMTQs
NyArMzE0LDcgQEAgV0tQYWdlUmVmIFRlc3RDb250cm9sbGVyOjpjcmVhdGVPdGhlclBhZ2UoV0tQ
YWdlUmVmIG9sZFBhZ2UsIFdLVVJMUmVxdWVzdFJlZiwgV0sKIAogICAgIHZpZXctPmRpZEluaXRp
YWxpemVDbGllbnRzKCk7CiAKLSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkudXBkYXRlV2lu
ZG93U2NhbGVGb3JUZXN0KHZpZXcsICpUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubV9jdXJyZW50
SW52b2NhdGlvbik7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnVwZGF0ZVdpbmRv
d1NjYWxlRm9yVGVzdCh2aWV3LCAqVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1fY3VycmVu
dEludm9jYXRpb24pOwogCiAgICAgV0tSZXRhaW4obmV3UGFnZSk7CiAgICAgcmV0dXJuIG5ld1Bh
Z2U7CkBAIC02NzQsMTEgKzY3NCwxMSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRl
VG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICBXS1JldGFpblB0cjxXS0Jvb2xlYW5SZWY+IHNob3Vs
ZEdDVmFsdWUgPSBhZG9wdFdLKFdLQm9vbGVhbkNyZWF0ZShtX2djQmV0d2VlblRlc3RzKSk7CiAg
ICAgV0tEaWN0aW9uYXJ5U2V0SXRlbShyZXNldE1lc3NhZ2VCb2R5LmdldCgpLCBzaG91bGRHQ0tl
eS5nZXQoKSwgc2hvdWxkR0NWYWx1ZS5nZXQoKSk7CiAKLSAgICBXS0NvbnRleHRQb3N0TWVzc2Fn
ZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVz
c2FnZU5hbWUuZ2V0KCksIHJlc2V0TWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQ29udGV4dFBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29u
dGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgcmVzZXRNZXNzYWdlQm9keS5nZXQoKSk7CiAKLSAg
ICBXS0NvbnRleHRTZXRTaG91bGRVc2VGb250U21vb3RoaW5nKFRlc3RDb250cm9sbGVyOjpzaGFy
ZWQoKS5jb250ZXh0KCksIGZhbHNlKTsKKyAgICBXS0NvbnRleHRTZXRTaG91bGRVc2VGb250U21v
b3RoaW5nKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIGZhbHNlKTsKIAot
ICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRl
eHQoKSwga1dLQ2FjaGVNb2RlbERvY3VtZW50QnJvd3Nlcik7CisgICAgV0tDb250ZXh0U2V0Q2Fj
aGVNb2RlbChUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBrV0tDYWNoZU1v
ZGVsRG9jdW1lbnRCcm93c2VyKTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBhbHNvIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHBhZ2Ugb3Blbi4KIApAQCAtMTM0
Miw3ICsxMzQyLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZyYW1l
KFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lKQogICAgICAgICByZXR1cm47CiAKICAg
ICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwotICAgIHNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAg
ICBzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiB9CiAKIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUluRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdL
RnJhbWVSZWYgZnJhbWUsIFdLQXV0aGVudGljYXRpb25DaGFsbGVuZ2VSZWYgYXV0aGVudGljYXRp
b25DaGFsbGVuZ2UpCkBAIC0xNDc1LDcgKzE0NzUsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpk
ZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0SWZQb3NzaWJsZSgpCiAK
IHZvaWQgVGVzdENvbnRyb2xsZXI6OmRlY2lkZVBvbGljeUZvck5vdGlmaWNhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KFdLUGFnZVJlZiBwYWdlLCBXS1NlY3VyaXR5T3JpZ2luUmVmIG9yaWdpbiwgV0tO
b3RpZmljYXRpb25QZXJtaXNzaW9uUmVxdWVzdFJlZiByZXF1ZXN0LCBjb25zdCB2b2lkKikKIHsK
LSAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9u
UGVybWlzc2lvblJlcXVlc3QocGFnZSwgb3JpZ2luLCByZXF1ZXN0KTsKKyAgICBUZXN0Q29udHJv
bGxlcjo6c2luZ2xldG9uKCkuZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJl
cXVlc3QocGFnZSwgb3JpZ2luLCByZXF1ZXN0KTsKIH0KIAogdm9pZCBUZXN0Q29udHJvbGxlcjo6
ZGVjaWRlUG9saWN5Rm9yTm90aWZpY2F0aW9uUGVybWlzc2lvblJlcXVlc3QoV0tQYWdlUmVmLCBX
S1NlY3VyaXR5T3JpZ2luUmVmLCBXS05vdGlmaWNhdGlvblBlcm1pc3Npb25SZXF1ZXN0UmVmIHJl
cXVlc3QpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggOGI1YzZl
MjI2NWM5N2YyODA3YTljZmU1NzlkNTE0NDc2ZGVmOGMyNi4uODI2NWNkNTZjNDk5MGFmYTJiOWQ4
NDc1YTQ3M2YwZjU4MjI3NjgxYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xs
ZXIuaApAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBFdmVudFNlbmRlclByb3h5OwogLy8gRklYTUU6
IFJlbmFtZSB0aGlzIFRlc3RSdW5uZXI/CiBjbGFzcyBUZXN0Q29udHJvbGxlciB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFRlc3RDb250cm9sbGVyJiBzaGFyZWQoKTsKKyAgICBzdGF0aWMgVGVzdENv
bnRyb2xsZXImIHNpbmdsZXRvbigpOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHZpZXdX
aWR0aDsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgdmlld0hlaWdodDsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXggYmZiNjVjZWMxZTZkNjNhNjEzZWNj
NmE0OTIyOTgzYjY4MmYyMWM2YS4uNTIxZWViZGY2YzBhMjIwZTMyYzNlNDdjZjQ2NjQzNmU3NWJh
MTQxYSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKQEAgLTEy
OSwxMyArMTI5LDEzIEBAIHN0YXRpYyBib29sIHNob3VsZExvZ0hpc3RvcnlDbGllbnRDYWxsYmFj
a3MoY29uc3QgY2hhciogcGF0aE9yVVJMKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2Uo
KQogewotICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb25maWd1cmVWaWV3Rm9yVGVzdCgq
dGhpcyk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbmZpZ3VyZVZpZXdGb3JU
ZXN0KCp0aGlzKTsKIAotICAgIFdLUGFnZVNldEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgZmFsc2UpOworICAgIFdLUGFnZVNl
dEFkZHNWaXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3
KCktPnBhZ2UoKSwgZmFsc2UpOwogCiAgICAgbV90ZXh0T3V0cHV0LmNsZWFyKCk7CiAKLSAgICBU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0U2hvdWxkTG9nSGlzdG9yeUNsaWVudENhbGxiYWNr
cyhzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKG1fcGF0aE9yVVJMLmNfc3RyKCkpKTsK
KyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0U2hvdWxkTG9nSGlzdG9yeUNsaWVu
dENhbGxiYWNrcyhzaG91bGRMb2dIaXN0b3J5Q2xpZW50Q2FsbGJhY2tzKG1fcGF0aE9yVVJMLmNf
c3RyKCkpKTsKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2xlYXIgb3V0IHZpc2l0ZWQgbGlu
a3MgaGVyZS4KIApAQCAtMTUxLDE2ICsxNTEsMTYgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52
b2tlKCkKICAgICBXS0RpY3Rpb25hcnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgp
LCBkdW1wUGl4ZWxzS2V5LmdldCgpLCBkdW1wUGl4ZWxzVmFsdWUuZ2V0KCkpOwogCiAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyS2V5ID0gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlV2FpdFRvRHVtcFdhdGNoZG9n
VGltZXIiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tCb29sZWFuUmVmPiB1c2VXYWl0VG9EdW1wV2F0
Y2hkb2dUaW1lclZhbHVlID0gYWRvcHRXSyhXS0Jvb2xlYW5DcmVhdGUoVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLnVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyKCkpKTsKKyAgICBXS1JldGFpblB0
cjxXS0Jvb2xlYW5SZWY+IHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyVmFsdWUgPSBhZG9wdFdL
KFdLQm9vbGVhbkNyZWF0ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkudXNlV2FpdFRvRHVt
cFdhdGNoZG9nVGltZXIoKSkpOwogICAgIFdLRGljdGlvbmFyeVNldEl0ZW0oYmVnaW5UZXN0TWVz
c2FnZUJvZHkuZ2V0KCksIHVzZVdhaXRUb0R1bXBXYXRjaGRvZ1RpbWVyS2V5LmdldCgpLCB1c2VX
YWl0VG9EdW1wV2F0Y2hkb2dUaW1lclZhbHVlLmdldCgpKTsKIAogICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0aW1lb3V0S2V5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiVGltZW91dCIpKTsKICAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gdGltZW91dFZh
bHVlID0gYWRvcHRXSyhXS1VJbnQ2NENyZWF0ZShtX3RpbWVvdXQpKTsKICAgICBXS0RpY3Rpb25h
cnlTZXRJdGVtKGJlZ2luVGVzdE1lc3NhZ2VCb2R5LmdldCgpLCB0aW1lb3V0S2V5LmdldCgpLCB0
aW1lb3V0VmFsdWUuZ2V0KCkpOwogCi0gICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVk
QnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdl
dCgpLCBiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tDb250ZXh0UG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCks
IG1lc3NhZ2VOYW1lLmdldCgpLCBiZWdpblRlc3RNZXNzYWdlQm9keS5nZXQoKSk7CiAKLSAgICBU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkucnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UsIFRl
c3RDb250cm9sbGVyOjpzaG9ydFRpbWVvdXQpOworICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5ydW5VbnRpbChtX2dvdEluaXRpYWxSZXNwb25zZSwgVGVzdENvbnRyb2xsZXI6OnNob3J0
VGltZW91dCk7CiAgICAgaWYgKCFtX2dvdEluaXRpYWxSZXNwb25zZSkgewogICAgICAgICBtX2Vy
cm9yTWVzc2FnZSA9ICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgaW5pdGlhbCByZXNwb25zZSBmcm9t
IHdlYiBwcm9jZXNzXG4iOwogICAgICAgICBtX3dlYlByb2Nlc3NJc1VucmVzcG9uc2l2ZSA9IHRy
dWU7CkBAIC0xNjksOSArMTY5LDkgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKICAg
ICBpZiAobV9lcnJvcikKICAgICAgICAgZ290byBlbmQ7CiAKLSAgICBXS1BhZ2VMb2FkVVJMKFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCksIG1fdXJsLmdldCgp
KTsKKyAgICBXS1BhZ2VMb2FkVVJMKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2Vi
VmlldygpLT5wYWdlKCksIG1fdXJsLmdldCgpKTsKIAotICAgIFRlc3RDb250cm9sbGVyOjpzaGFy
ZWQoKS5ydW5VbnRpbChtX2dvdEZpbmFsTWVzc2FnZSwgVGVzdENvbnRyb2xsZXI6Om5vVGltZW91
dCk7CisgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnJ1blVudGlsKG1fZ290RmluYWxN
ZXNzYWdlLCBUZXN0Q29udHJvbGxlcjo6bm9UaW1lb3V0KTsKICAgICBpZiAobV9lcnJvcikKICAg
ICAgICAgZ290byBlbmQ7CiAKQEAgLTE4MCwxNyArMTgwLDE3IEBAIHZvaWQgVGVzdEludm9jYXRp
b246Omludm9rZSgpCiBlbmQ6CiAjaWYgIVBMQVRGT1JNKElPUykKICAgICBpZiAobV9nb3RJbml0
aWFsUmVzcG9uc2UpCi0gICAgICAgIFdLSW5zcGVjdG9yQ2xvc2UoV0tQYWdlR2V0SW5zcGVjdG9y
KFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCkpKTsKKyAgICAg
ICAgV0tJbnNwZWN0b3JDbG9zZShXS1BhZ2VHZXRJbnNwZWN0b3IoVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSkpOwogI2VuZGlmIC8vICFQTEFURk9STShJ
T1MpCiAKICAgICBpZiAobV93ZWJQcm9jZXNzSXNVbnJlc3BvbnNpdmUpCiAgICAgICAgIGR1bXBX
ZWJQcm9jZXNzVW5yZXNwb25zaXZlbmVzcygpOwotICAgIGVsc2UgaWYgKCFUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkucmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpKSB7CisgICAgZWxzZSBp
ZiAoIVRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5yZXNldFN0YXRlVG9Db25zaXN0ZW50VmFs
dWVzKCkpIHsKICAgICAgICAgLy8gVGhlIHByb2Nlc3MgZnJvemUgd2hpbGUgbG9hZGluZyBhYm91
dDpibGFuaywgbGV0J3Mgc3RhcnQgYSBmcmVzaCBvbmUuCiAgICAgICAgIC8vIEl0IHdvdWxkIGJl
IG5pY2UgdG8gcmVwb3J0IHRoYXQgdGhlIHByZXZpb3VzIHRlc3QgZnJvemUgYWZ0ZXIgZHVtcGlu
ZyByZXN1bHRzLCBidXQgd2UgaGF2ZSBubyB3YXkgdG8gZG8gdGhhdC4KLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpLnRlcm1pbmF0ZVdlYkNvbnRlbnRQcm9jZXNzKCk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS50ZXJtaW5hdGVXZWJDb250ZW50UHJvY2Vzcygp
OwogICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgcHJvY2VzcywgYXMgaW52b2tl
KCkgd2lsbCBuZWVkIG9uZSB0byBzZW5kIGJ1bmRsZSBtZXNzYWdlcyBmb3IgdGhlIG5leHQgdGVz
dC4KLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLnJlYXR0YWNoUGFnZVRvV2ViUHJv
Y2VzcygpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkucmVhdHRhY2hQYWdl
VG9XZWJQcm9jZXNzKCk7CiAgICAgfQogfQogCkBAIC0yMDMsNyArMjAzLDcgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZHVtcFdlYlByb2Nlc3NVbnJlc3BvbnNpdmVuZXNzKGNvbnN0IGNoYXIqIGVy
cm9yTWVzc2FnZSkKIHsKICAgICBjaGFyIGVycm9yTWVzc2FnZVRvU3RkZXJyWzEwMjRdOwogI2lm
IFBMQVRGT1JNKENPQ09BKQotICAgIHBpZF90IHBpZCA9IFdLUGFnZUdldFByb2Nlc3NJZGVudGlm
aWVyKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wYWdlKCkpOworICAg
IHBpZF90IHBpZCA9IFdLUGFnZUdldFByb2Nlc3NJZGVudGlmaWVyKFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wYWdlKCkpOwogICAgIHNwcmludGYoZXJyb3JNZXNz
YWdlVG9TdGRlcnIsICIjUFJPQ0VTUyBVTlJFU1BPTlNJVkUgLSAlcyAocGlkICVsZClcbiIsIFRl
c3RDb250cm9sbGVyOjp3ZWJQcm9jZXNzTmFtZSgpLCBzdGF0aWNfY2FzdDxsb25nPihwaWQpKTsK
ICNlbHNlCiAgICAgc3ByaW50ZihlcnJvck1lc3NhZ2VUb1N0ZGVyciwgIiNQUk9DRVNTIFVOUkVT
UE9OU0lWRSAtICVzIiwgVGVzdENvbnRyb2xsZXI6OndlYlByb2Nlc3NOYW1lKCkpOwpAQCAtMjMy
LDcgKzIzMiw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmZvcmNlUmVwYWludERvbmVDYWxsYmFj
ayhXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0KQogewogICAgIFRlc3RJbnZvY2F0aW9uKiB0ZXN0
SW52b2NhdGlvbiA9IHN0YXRpY19jYXN0PFRlc3RJbnZvY2F0aW9uKj4oY29udGV4dCk7CiAgICAg
dGVzdEludm9jYXRpb24tPm1fZ290UmVwYWludCA9IHRydWU7Ci0gICAgVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
bm90aWZ5RG9uZSgpOwogfQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkdW1wUmVzdWx0cygpCkBA
IC0yNDUsOCArMjQ1LDggQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFJlc3VsdHMoKQogICAg
IGlmIChtX2R1bXBQaXhlbHMgJiYgbV9waXhlbFJlc3VsdCkgewogICAgICAgICBpZiAoUGxhdGZv
cm1XZWJWaWV3Ojp3aW5kb3dTbmFwc2hvdEVuYWJsZWQoKSkgewogICAgICAgICAgICAgbV9nb3RS
ZXBhaW50ID0gZmFsc2U7Ci0gICAgICAgICAgICBXS1BhZ2VGb3JjZVJlcGFpbnQoVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2UoKSwgdGhpcywgVGVzdEludm9jYXRp
b246OmZvcmNlUmVwYWludERvbmVDYWxsYmFjayk7Ci0gICAgICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkucnVuVW50aWwobV9nb3RSZXBhaW50LCBUZXN0Q29udHJvbGxlcjo6c2hvcnRU
aW1lb3V0KTsKKyAgICAgICAgICAgIFdLUGFnZUZvcmNlUmVwYWludChUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+cGFnZSgpLCB0aGlzLCBUZXN0SW52b2NhdGlvbjo6
Zm9yY2VSZXBhaW50RG9uZUNhbGxiYWNrKTsKKyAgICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpz
aW5nbGV0b24oKS5ydW5VbnRpbChtX2dvdFJlcGFpbnQsIFRlc3RDb250cm9sbGVyOjpzaG9ydFRp
bWVvdXQpOwogICAgICAgICAgICAgaWYgKCFtX2dvdFJlcGFpbnQpIHsKICAgICAgICAgICAgICAg
ICBtX2Vycm9yTWVzc2FnZSA9ICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcHJlLXBpeGVsIGR1bXAg
cmVwYWludFxuIjsKICAgICAgICAgICAgICAgICBtX3dlYlByb2Nlc3NJc1VucmVzcG9uc2l2ZSA9
IHRydWU7CkBAIC0zMDAsNyArMzAwLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAg
ICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwogICAgICAgICBtX2Vycm9yID0gdHJ1ZTsKICAg
ICAgICAgbV9lcnJvck1lc3NhZ2UgPSAiRkFJTFxuIjsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6
OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLm5vdGlmeURvbmUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzA5LDcgKzMw
OSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdLU3RyaW5nUmVmIG1lc3Nh
Z2VCb2R5U3RyaW5nID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKICAg
ICAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZUJvZHlTdHJpbmcs
ICJCZWdpblRlc3QiKSkgewogICAgICAgICAgICAgbV9nb3RJbml0aWFsUmVzcG9uc2UgPSB0cnVl
OwotICAgICAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAg
ICAgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ub3RpZnlEb25lKCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMzMxLDcgKzMzMSw3IEBAIHZvaWQgVGVz
dEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5n
UmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIG1fYXVkaW9SZXN1bHQgPSBzdGF0aWNfY2FzdDxXS0Rh
dGFSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBh
dWRpb1Jlc3VsdEtleS5nZXQoKSkpOwogCiAgICAgICAgIG1fZ290RmluYWxNZXNzYWdlID0gdHJ1
ZTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm5vdGlmeURvbmUoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMzQ1LDU5ICszNDUsNTkgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkJl
Zm9yZVVubG9hZFJldHVyblZhbHVlIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1l
c3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVhblJl
ZiBiZWZvcmVVbmxvYWRSZXR1cm5WYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVz
c2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0QmVmb3JlVW5s
b2FkUmV0dXJuVmFsdWUoV0tCb29sZWFuR2V0VmFsdWUoYmVmb3JlVW5sb2FkUmV0dXJuVmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJlZm9yZVVubG9hZFJl
dHVyblZhbHVlKFdLQm9vbGVhbkdldFZhbHVlKGJlZm9yZVVubG9hZFJldHVyblZhbHVlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJBZGRDaHJvbWVJbnB1dEZpZWxkIikpIHsKLSAgICAgICAg
VGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPmFkZENocm9tZUlucHV0Rmll
bGQoKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCkt
PmFkZENocm9tZUlucHV0RmllbGQoKTsKICAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ2Fs
bEFkZENocm9tZUlucHV0RmllbGRDYWxsYmFjayIpKTsKLSAgICAgICAgV0tDb250ZXh0UG9zdE1l
c3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCks
IG1lc3NhZ2VOYW1lLmdldCgpLCAwKTsKKyAgICAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCksIG1lc3Nh
Z2VOYW1lLmdldCgpLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUmVtb3ZlQ2hyb21lSW5wdXRG
aWVsZCIpKSB7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5tYWluV2ViVmlldygp
LT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5n
bGV0b24oKS5tYWluV2ViVmlldygpLT5yZW1vdmVDaHJvbWVJbnB1dEZpZWxkKCk7CiAgICAgICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIkNhbGxSZW1vdmVDaHJvbWVJbnB1dEZpZWxkQ2FsbGJhY2si
KSk7Ci0gICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29u
dHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CisgICAg
ICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgMCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJGb2N1c1dlYlZpZXciKSkgewotICAgICAgICBUZXN0Q29udHJvbGxlcjo6
c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+bWFrZVdlYlZpZXdGaXJzdFJlc3BvbmRlcigpOworICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXcoKS0+bWFrZVdlYlZp
ZXdGaXJzdFJlc3BvbmRlcigpOwogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVz
c2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYWxsRm9j
dXNXZWJWaWV3Q2FsbGJhY2siKSk7Ci0gICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRs
ZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpLCBtZXNzYWdlTmFtZS5nZXQo
KSwgMCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFs
VG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldEJhY2tpbmdTY2FsZUZhY3RvciIpKSB7CiAg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tEb3VibGVHZXRUeXBl
SUQoKSk7CiAgICAgICAgIGRvdWJsZSBiYWNraW5nU2NhbGVGYWN0b3IgPSBXS0RvdWJsZUdldFZh
bHVlKHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBXS1Bh
Z2VTZXRDdXN0b21CYWNraW5nU2NhbGVGYWN0b3IoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1h
aW5XZWJWaWV3KCktPnBhZ2UoKSwgYmFja2luZ1NjYWxlRmFjdG9yKTsKKyAgICAgICAgV0tQYWdl
U2V0Q3VzdG9tQmFja2luZ1NjYWxlRmFjdG9yKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5t
YWluV2ViVmlldygpLT5wYWdlKCksIGJhY2tpbmdTY2FsZUZhY3Rvcik7CiAKICAgICAgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FsbFNldEJhY2tpbmdTY2FsZUZhY3RvckNhbGxiYWNrIikpOwot
ICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xs
ZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOworICAgICAgICBX
S0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmds
ZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIDApOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5h
bWUsICJTaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNrIikpIHsKICAgICAgICAgQVNTRVJUKFdL
R2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdldFR5cGVJRCgpKTsKICAgICAgICAg
dWludDY0X3Qgbm90aWZpY2F0aW9uSUQgPSBXS1VJbnQ2NEdldFZhbHVlKHN0YXRpY19jYXN0PFdL
VUludDY0UmVmPihtZXNzYWdlQm9keSkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVk
KCkuc2ltdWxhdGVXZWJOb3RpZmljYXRpb25DbGljayhub3RpZmljYXRpb25JRCk7CisgICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zaW11bGF0ZVdlYk5vdGlmaWNhdGlvbkNsaWNr
KG5vdGlmaWNhdGlvbklEKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0
cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0QWRkc1Zpc2l0ZWRMaW5r
cyIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29s
ZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGlj
X2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFdLUGFnZVNldEFkZHNW
aXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPnBhZ2Uo
KSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFdLUGFnZVNldEFkZHNW
aXNpdGVkTGlua3MoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBh
Z2UoKSwgV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwg
IlNldEdlb2xvY2F0aW9uUGVybWlzc2lvbiIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlwZUlEKCkpOwogICAgICAgICBXS0Jvb2xl
YW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Np
b24oV0tCb29sZWFuR2V0VmFsdWUoZW5hYmxlZFdLKSk7CisgICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRHZW9sb2NhdGlvblBlcm1pc3Npb24oV0tCb29sZWFuR2V0VmFsdWUo
ZW5hYmxlZFdLKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTQ0OSwyMSArNDQ5LDIx
IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdLRG91YmxlUmVmIHNwZWVkV0sg
PSBzdGF0aWNfY2FzdDxXS0RvdWJsZVJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShtZXNz
YWdlQm9keURpY3Rpb25hcnksIHNwZWVkS2V5V0suZ2V0KCkpKTsKICAgICAgICAgZG91YmxlIHNw
ZWVkID0gV0tEb3VibGVHZXRWYWx1ZShzcGVlZFdLKTsKIAotICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVk
ZSwgYWNjdXJhY3ksIHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRl
QWNjdXJhY3ksIGFsdGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJv
dmlkZXNTcGVlZCwgc3BlZWQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCku
c2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb24obGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWNjdXJhY3ks
IHByb3ZpZGVzQWx0aXR1ZGUsIGFsdGl0dWRlLCBwcm92aWRlc0FsdGl0dWRlQWNjdXJhY3ksIGFs
dGl0dWRlQWNjdXJhY3ksIHByb3ZpZGVzSGVhZGluZywgaGVhZGluZywgcHJvdmlkZXNTcGVlZCwg
c3BlZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVu
YXZhaWxhYmxlRXJyb3IiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiBlcnJvck1l
c3NhZ2UgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBU
ZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0TW9ja0dlb2xvY2F0aW9uUG9zaXRpb25VbmF2YWls
YWJsZUVycm9yKGVycm9yTWVzc2FnZSk7CisgICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0
b24oKS5zZXRNb2NrR2VvbG9jYXRpb25Qb3NpdGlvblVuYXZhaWxhYmxlRXJyb3IoZXJyb3JNZXNz
YWdlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0VXNlck1lZGlhUGVybWlzc2lvbiIpKSB7CiAg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tCb29sZWFuR2V0VHlw
ZUlEKCkpOwogICAgICAgICBXS0Jvb2xlYW5SZWYgZW5hYmxlZFdLID0gc3RhdGljX2Nhc3Q8V0tC
b29sZWFuUmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQo
KS5zZXRVc2VyTWVkaWFQZXJtaXNzaW9uKFdLQm9vbGVhbkdldFZhbHVlKGVuYWJsZWRXSykpOwor
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0VXNlck1lZGlhUGVybWlzc2lv
bihXS0Jvb2xlYW5HZXRWYWx1ZShlbmFibGVkV0spKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdL
Qm9vbGVhblJlZiBwZXJtaXNzaXZlV0sgPSBzdGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGlj
dGlvbmFyeUdldEl0ZW1Gb3JLZXkobWVzc2FnZUJvZHlEaWN0aW9uYXJ5LCBwZXJtaXNzaXZlS2V5
V0suZ2V0KCkpKTsKICAgICAgICAgYm9vbCBwZXJtaXNzaXZlID0gV0tCb29sZWFuR2V0VmFsdWUo
cGVybWlzc2l2ZVdLKTsKIAotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0Q3Vz
dG9tUG9saWN5RGVsZWdhdGUoZW5hYmxlZCwgcGVybWlzc2l2ZSk7CisgICAgICAgIFRlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRDdXN0b21Qb2xpY3lEZWxlZ2F0ZShlbmFibGVkLCBwZXJt
aXNzaXZlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNDkxLDE0ICs0OTEsMTQgQEAg
dm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUo
V0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgV0tCb29sZWFuUmVmIGhpZGRlbldLID0g
c3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KG1lc3Nh
Z2VCb2R5RGljdGlvbmFyeSwgaXNJbml0aWFsS2V5V0suZ2V0KCkpKTsKICAgICAgICAgYm9vbCBo
aWRkZW4gPSBXS0Jvb2xlYW5HZXRWYWx1ZShoaWRkZW5XSyk7CiAKLSAgICAgICAgVGVzdENvbnRy
b2xsZXI6OnNoYXJlZCgpLnNldEhpZGRlbihoaWRkZW4pOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlBy
b2Nlc3NXb3JrUXVldWUiKSkgewotICAgICAgICBpZiAoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgp
LndvcmtRdWV1ZU1hbmFnZXIoKS5wcm9jZXNzV29ya1F1ZXVlKCkpIHsKKyAgICAgICAgaWYgKFRl
c3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS53b3JrUXVldWVNYW5hZ2VyKCkucHJvY2Vzc1dvcmtR
dWV1ZSgpKSB7CiAgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5h
bWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJXb3JrUXVldWVQcm9j
ZXNzZWRDYWxsYmFjayIpKTsKLSAgICAgICAgICAgIFdLQ29udGV4dFBvc3RNZXNzYWdlVG9Jbmpl
Y3RlZEJ1bmRsZShUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuY29udGV4dCgpLCBtZXNzYWdlTmFt
ZS5nZXQoKSwgMCk7CisgICAgICAgICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRC
dW5kbGUoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIDApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC01MDYsMTQg
KzUwNiwxNCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiUXVldWVCYWNrTmF2aWdhdGlvbiIpKSB7CiAg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBl
SUQoKSk7CiAgICAgICAgIHVpbnQ2NF90IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUoc3Rh
dGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9s
bGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVCYWNrTmF2aWdhdGlvbihzdGVw
Q291bnQpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFu
YWdlcigpLnF1ZXVlQmFja05hdmlnYXRpb24oc3RlcENvdW50KTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiUXVldWVGb3J3YXJkTmF2aWdhdGlvbiIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7CiAgICAgICAgIHVpbnQ2NF90
IHN0ZXBDb3VudCA9IFdLVUludDY0R2V0VmFsdWUoc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1l
c3NhZ2VCb2R5KSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVN
YW5hZ2VyKCkucXVldWVGb3J3YXJkTmF2aWdhdGlvbihzdGVwQ291bnQpOworICAgICAgICBUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlRm9yd2FyZE5h
dmlnYXRpb24oc3RlcENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTI3LDcg
KzUyNyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB0YXJnZXRLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJp
bmcoInRhcmdldCIpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgdGFyZ2V0V0sgPSBzdGF0aWNfY2Fz
dDxXS1N0cmluZ1JlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleShsb2FkRGF0YURpY3Rpb25h
cnksIHRhcmdldEtleS5nZXQoKSkpOwogCi0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQo
KS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2FkKHRvV1RGU3RyaW5nKHVybFdLKSwgdG9XVEZT
dHJpbmcodGFyZ2V0V0spKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndv
cmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWQodG9XVEZTdHJpbmcodXJsV0spLCB0b1dURlN0cmlu
Zyh0YXJnZXRXSykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC01NDQsNTQgKzU0NCw1
NCBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZQogICAgICAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gdW5yZWFjaGFibGVVUkxLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoInVucmVhY2hhYmxlVVJMIikpOwogICAgICAgICBXS1N0cmluZ1JlZiB1bnJlYWNoYWJs
ZVVSTFdLID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JL
ZXkobG9hZERhdGFEaWN0aW9uYXJ5LCB1bnJlYWNoYWJsZVVSTEtleS5nZXQoKSkpOwogCi0gICAg
ICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVMb2Fk
SFRNTFN0cmluZyh0b1dURlN0cmluZyhjb250ZW50V0spLCBiYXNlVVJMV0sgPyB0b1dURlN0cmlu
ZyhiYXNlVVJMV0spIDogU3RyaW5nKCksIHVucmVhY2hhYmxlVVJMV0sgPyB0b1dURlN0cmluZyh1
bnJlYWNoYWJsZVVSTFdLKSA6IFN0cmluZygpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNp
bmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIoKS5xdWV1ZUxvYWRIVE1MU3RyaW5nKHRvV1RGU3Ry
aW5nKGNvbnRlbnRXSyksIGJhc2VVUkxXSyA/IHRvV1RGU3RyaW5nKGJhc2VVUkxXSykgOiBTdHJp
bmcoKSwgdW5yZWFjaGFibGVVUkxXSyA/IHRvV1RGU3RyaW5nKHVucmVhY2hhYmxlVVJMV0spIDog
U3RyaW5nKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZVJlbG9hZCIpKSB7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVldWVSZWxvYWQo
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFnZXIo
KS5xdWV1ZVJlbG9hZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3Ry
aW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJRdWV1ZUxvYWRpbmdTY3JpcHQi
KSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5n
R2V0VHlwZUlEKCkpOwogICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVk
KCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTG9hZGluZ1NjcmlwdCh0b1dURlN0cmluZyhzY3Jp
cHQpKTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLndvcmtRdWV1ZU1hbmFn
ZXIoKS5xdWV1ZUxvYWRpbmdTY3JpcHQodG9XVEZTdHJpbmcoc2NyaXB0KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIlF1ZXVlTm9uTG9hZGluZ1NjcmlwdCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dl
dFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdL
U3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7
Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS53b3JrUXVldWVNYW5hZ2VyKCkucXVl
dWVOb25Mb2FkaW5nU2NyaXB0KHRvV1RGU3RyaW5nKHNjcmlwdCkpOworICAgICAgICBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkud29ya1F1ZXVlTWFuYWdlcigpLnF1ZXVlTm9uTG9hZGluZ1Nj
cmlwdCh0b1dURlN0cmluZyhzY3JpcHQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SGFuZGxl
c0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlE
KG1lc3NhZ2VCb2R5KSA9PSBXS0Jvb2xlYW5HZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLQm9vbGVh
blJlZiB2YWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4obWVzc2FnZUJvZHkpOwotICAg
ICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlcyhXS0Jvb2xlYW5HZXRWYWx1ZSh2YWx1ZSkpOworICAgICAgICBUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyhXS0Jvb2xl
YW5HZXRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRBdXRoZW50aWNhdGlv
blVzZXJuYW1lIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9
PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgdXNlcm5hbWUgPSBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJv
bGxlcjo6c2hhcmVkKCkuc2V0QXV0aGVudGljYXRpb25Vc2VybmFtZSh0b1dURlN0cmluZyh1c2Vy
bmFtZSkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuc2V0QXV0aGVudGlj
YXRpb25Vc2VybmFtZSh0b1dURlN0cmluZyh1c2VybmFtZSkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJTZXRBdXRoZW50aWNhdGlvblBhc3N3b3JkIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJp
bmdSZWYgcGFzc3dvcmQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwot
ICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuc2V0QXV0aGVudGljYXRpb25QYXNzd29y
ZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOworICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0QXV0aGVudGljYXRpb25QYXNzd29yZCh0b1dURlN0cmluZyhwYXNzd29yZCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENT
dHJpbmcobWVzc2FnZU5hbWUsICJTZXRCbG9ja0FsbFBsdWdpbnMiKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgpKTsKICAg
ICAgICAgV0tCb29sZWFuUmVmIHNob3VsZEJsb2NrID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVm
PihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5zZXRCbG9j
a0FsbFBsdWdpbnMoV0tCb29sZWFuR2V0VmFsdWUoc2hvdWxkQmxvY2spKTsKKyAgICAgICAgVGVz
dENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldEJsb2NrQWxsUGx1Z2lucyhXS0Jvb2xlYW5HZXRW
YWx1ZShzaG91bGRCbG9jaykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02MDMsMTIg
KzYwMywxMiBAQCBXS1JldGFpblB0cjxXS1R5cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNl
aXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQgogICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0V2luZG93SXNLZXkiKSkgewogICAgICAg
ICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLQm9vbGVhbkdldFR5cGVJRCgp
KTsKICAgICAgICAgV0tCb29sZWFuUmVmIGlzS2V5VmFsdWUgPSBzdGF0aWNfY2FzdDxXS0Jvb2xl
YW5SZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1h
aW5XZWJWaWV3KCktPnNldFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUp
KTsKKyAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnNl
dFdpbmRvd0lzS2V5KFdLQm9vbGVhbkdldFZhbHVlKGlzS2V5VmFsdWUpKTsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJc1dvcmtRdWV1ZUVtcHR5IikpIHsKLSAgICAgICAgYm9vbCBpc0VtcHR5ID0g
VGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLndvcmtRdWV1ZU1hbmFnZXIoKS5pc1dvcmtRdWV1ZUVt
cHR5KCk7CisgICAgICAgIGJvb2wgaXNFbXB0eSA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24o
KS53b3JrUXVldWVNYW5hZ2VyKCkuaXNXb3JrUXVldWVFbXB0eSgpOwogICAgICAgICBXS1JldGFp
blB0cjxXS1R5cGVSZWY+IHJlc3VsdChBZG9wdFdLLCBXS0Jvb2xlYW5DcmVhdGUoaXNFbXB0eSkp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1dvcmtRdWV1ZU1hbmFnZXIuY3BwCmluZGV4IDI1NWQ5MzkxN2FhZjYzZjJlMDZmMDdiNzU2N2Yw
YjllZDk2Y2FjYjkuLjAzMjNjMjNlYTMxMzNkMDdhM2NhNDY1OTkxYWRmNmUwMTQ5ZDc1ZDQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvV29ya1F1ZXVlTWFuYWdlci5jcHAKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Xb3JrUXVldWVNYW5hZ2VyLmNwcApAQCAtMzcsNyAr
MzcsNyBAQCBuYW1lc3BhY2UgV1RSIHsKIAogc3RhdGljIGlubGluZSBXS1BhZ2VSZWYgbWFpblBh
Z2UoKQogewotICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXco
KS0+cGFnZSgpOworICAgIHJldHVybiBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldl
YlZpZXcoKS0+cGFnZSgpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wgZ29Ub0l0ZW1BdEluZGV4
KGludCBpbmRleCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVz
dEludm9jYXRpb25DYWlyby5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL2NhaXJvL1Rlc3RJ
bnZvY2F0aW9uQ2Fpcm8uY3BwCmluZGV4IDE5NDAyY2QzMDUyYzk1YmQ5N2JhMTY4MDhjMzA5MjRi
ZjM3Yjk5NTIuLjllMDU0Njg4ODFhOTQzNjYwYTNlNDRjNTEyMDc5ODA2NjMzNGI4YzggMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Fpcm8vVGVzdEludm9jYXRpb25DYWlyby5j
cHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jYWlyby9UZXN0SW52b2NhdGlvbkNhaXJv
LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXBQaXhlbHNB
bmRDb21wYXJlV2l0aEV4cGVjdGVkKFdLSW1hZ2VSZWYgd2tJbWFnZSwgV0tBcnJhCiB7CiAjaWYg
UExBVEZPUk0oRUZMKSB8fCBQTEFURk9STShHVEspCiAgICAgVU5VU0VEX1BBUkFNKHdrSW1hZ2Up
OwotICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IFdLSW1hZ2VDcmVhdGVDYWlyb1N1cmZh
Y2UoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLm1haW5XZWJWaWV3KCktPndpbmRvd1NuYXBzaG90
SW1hZ2UoKS5nZXQoKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gV0tJbWFnZUNy
ZWF0ZUNhaXJvU3VyZmFjZShUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkubWFpbldlYlZpZXco
KS0+d2luZG93U25hcHNob3RJbWFnZSgpLmdldCgpKTsKICNlbHNlCiAgICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlID0gV0tJbWFnZUNyZWF0ZUNhaXJvU3VyZmFjZSh3a0ltYWdlKTsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNH
LmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2cvVGVzdEludm9jYXRpb25DRy5jcHAKaW5k
ZXggNzExMWE4ZTFlNTFkNWRlZDQzZWQ3NDE0ZTA1ZTcyNWFhZjVkMmI5OS4uZWM4MzkyYWY3NTU4
NjkwODEzNTdhNGI0YzM3MTcyYmE2ZGFlN2VjMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9jZy9UZXN0SW52b2NhdGlvbkNHLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL2NnL1Rlc3RJbnZvY2F0aW9uQ0cuY3BwCkBAIC0xNTYsNyArMTU2LDcgQEAgc3RhdGljIHZv
aWQgcGFpbnRSZXBhaW50UmVjdE92ZXJsYXkoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdLSW1hZ2VS
ZWYgaW1hZ2UsIFdLQXIKIAogdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcFBpeGVsc0FuZENvbXBh
cmVXaXRoRXhwZWN0ZWQoV0tJbWFnZVJlZiBpbWFnZSwgV0tBcnJheVJlZiByZXBhaW50UmVjdHMp
CiB7Ci0gICAgUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3ID0gVGVzdENvbnRyb2xsZXI6OnNoYXJl
ZCgpLm1haW5XZWJWaWV3KCk7CisgICAgUGxhdGZvcm1XZWJWaWV3KiB3ZWJWaWV3ID0gVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCk7CiAgICAgV0tSZXRhaW5QdHI8V0tJ
bWFnZVJlZj4gd2luZG93U25hcHNob3QgPSB3ZWJWaWV3LT53aW5kb3dTbmFwc2hvdEltYWdlKCk7
CiAKICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjb250ZXh0OwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mby5tbSBi
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RSdW5uZXJEcmFnZ2luZ0luZm8u
bW0KaW5kZXggYWYzMWQzM2M3NTQ4OGRlMzUyMzY0NmQ0YjQ0YjBmNGE4N2ZiNGJmOS4uZDM1NmQ4
M2M1ZTU2MTU1NzEyOTM5YzAxMzk0MmZkYTUzNzBjNWYyNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckRyYWdnaW5nSW5mby5tbQorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0UnVubmVyRHJhZ2dpbmdJbmZvLm1t
CkBAIC01OCw3ICs1OCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVFI7CiAKIC0gKE5TV2luZG93ICop
ZHJhZ2dpbmdEZXN0aW5hdGlvbldpbmRvdyAKIHsKLSAgICByZXR1cm4gW1Rlc3RDb250cm9sbGVy
OjpzaGFyZWQoKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVZpZXcoKSB3aW5kb3ddOworICAgIHJl
dHVybiBbVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLm1haW5XZWJWaWV3KCktPnBsYXRmb3Jt
VmlldygpIHdpbmRvd107CiB9CiAKIC0gKE5TRHJhZ09wZXJhdGlvbilkcmFnZ2luZ1NvdXJjZU9w
ZXJhdGlvbk1hc2sgCkBAIC02OSwxMyArNjksMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdUUjsKIAog
LSAoTlNQb2ludClkcmFnZ2luZ0xvY2F0aW9uCiB7Ci0gICAgV0tQb2ludCBsb2NhdGlvbiA9IFRl
c3RDb250cm9sbGVyOjpzaGFyZWQoKS5ldmVudFNlbmRlclByb3h5KCktPnBvc2l0aW9uKCk7Cisg
ICAgV0tQb2ludCBsb2NhdGlvbiA9IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5ldmVudFNl
bmRlclByb3h5KCktPnBvc2l0aW9uKCk7CiAgICAgcmV0dXJuIE5TTWFrZVBvaW50KGxvY2F0aW9u
LngsIGxvY2F0aW9uLnkpOwogfQogCiAtIChOU1BvaW50KWRyYWdnZWRJbWFnZUxvY2F0aW9uIAog
ewotICAgIFdLUG9pbnQgbG9jYXRpb24gPSBUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkuZXZlbnRT
ZW5kZXJQcm94eSgpLT5wb3NpdGlvbigpOworICAgIFdLUG9pbnQgbG9jYXRpb24gPSBUZXN0Q29u
dHJvbGxlcjo6c2luZ2xldG9uKCkuZXZlbnRTZW5kZXJQcm94eSgpLT5wb3NpdGlvbigpOwogICAg
IHJldHVybiBOU01ha2VQb2ludChsb2NhdGlvbi54ICsgX29mZnNldC53aWR0aCwgbG9jYXRpb24u
eSArIF9vZmZzZXQuaGVpZ2h0KTsKIH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9tYWMvV2ViS2l0VGVzdFJ1bm5lckV2ZW50Lm1tCmluZGV4IDI0MjEyYzdhZDA4ZDRmOTk0ZDk5
ZDViYmVmNDM2NjU1ZWI4NWM4NDguLjlkZWEyZGY4MTg4OTZmYmE4NzExMGVlZDVhOGQ5NDI1N2Nl
ZDI5MzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvbWFjL1dlYktpdFRlc3RS
dW5uZXJFdmVudC5tbQorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL21hYy9XZWJLaXRUZXN0
UnVubmVyRXZlbnQubW0KQEAgLTM2LDggKzM2LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdUUjsKIAog
KyAoTlNQb2ludCltb3VzZUxvY2F0aW9uCiB7Ci0gICAgV0tQb2ludCBsb2NhdGlvbiA9IFRlc3RD
b250cm9sbGVyOjpzaGFyZWQoKS5ldmVudFNlbmRlclByb3h5KCktPnBvc2l0aW9uKCk7Ci0gICAg
cmV0dXJuIFtUZXN0Q29udHJvbGxlcjo6c2hhcmVkKCkubWFpbldlYlZpZXcoKS0+cGxhdGZvcm1X
aW5kb3coKSBjb252ZXJ0QmFzZVRvU2NyZWVuOk5TTWFrZVBvaW50KGxvY2F0aW9uLngsIGxvY2F0
aW9uLnkpXTsKKyAgICBXS1BvaW50IGxvY2F0aW9uID0gVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRv
bigpLmV2ZW50U2VuZGVyUHJveHkoKS0+cG9zaXRpb24oKTsKKyAgICByZXR1cm4gW1Rlc3RDb250
cm9sbGVyOjpzaW5nbGV0b24oKS5tYWluV2ViVmlldygpLT5wbGF0Zm9ybVdpbmRvdygpIGNvbnZl
cnRCYXNlVG9TY3JlZW46TlNNYWtlUG9pbnQobG9jYXRpb24ueCwgbG9jYXRpb24ueSldOwogfQog
CiBAZW5kCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>