<?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>66807</bug_id>
          
          <creation_ts>2011-08-23 13:42:20 -0700</creation_ts>
          <short_desc>[chromium] Introduce CCSingleThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl</short_desc>
          <delta_ts>2011-09-08 14:53:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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>
          
          <blocked>66430</blocked>
    
    <blocked>66922</blocked>
    
    <blocked>66959</blocked>
    
    <blocked>66961</blocked>
    
    <blocked>66970</blocked>
    
    <blocked>67417</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nat Duca">nduca</reporter>
          <assigned_to name="Nat Duca">nduca</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>shawnsingh</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>455668</commentid>
    <comment_count>0</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-23 13:42:20 -0700</bug_when>
    <thetext>[chromium] Introduce CCLayerTreeHostImplMainThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455669</commentid>
    <comment_count>1</comment_count>
      <attachid>104906</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-23 13:42:38 -0700</bug_when>
    <thetext>Created attachment 104906
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455670</commentid>
    <comment_count>2</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-23 13:43:05 -0700</bug_when>
    <thetext>Just FYI for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455680</commentid>
    <comment_count>3</comment_count>
      <attachid>104906</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-23 13:52:59 -0700</bug_when>
    <thetext>Comment on attachment 104906
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:78
&gt; +    // CCLayerTreeHostImplProxyClient implemenation

implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455980</commentid>
    <comment_count>4</comment_count>
      <attachid>104965</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-23 22:47:00 -0700</bug_when>
    <thetext>Created attachment 104965
Splitting out committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455981</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-23 22:49:27 -0700</bug_when>
    <thetext>Attachment 104965 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.cpp:86:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.cpp:257:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.h:44:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.h:53:  The parameter name &quot;visible&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:85:  The parameter name &quot;visible&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.cpp:213:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:75:  Missing space before ( in if(  [whitespace/parens] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:52:  The parameter name &quot;settings&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:65:  The parameter name &quot;context&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:72:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:75:  The parameter name &quot;layer&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:80:  The parameter name &quot;visible&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:91:  The parameter name &quot;settings&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommitter.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.h:45:  The parameter name &quot;rect&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.h:54:  The parameter name &quot;visible&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 16 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455982</commentid>
    <comment_count>6</comment_count>
      <attachid>104965</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-23 22:50:56 -0700</bug_when>
    <thetext>Comment on attachment 104965
Splitting out committing.

Attachment 104965 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9481749</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456344</commentid>
    <comment_count>7</comment_count>
      <attachid>104965</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-24 13:03:19 -0700</bug_when>
    <thetext>Comment on attachment 104965
Splitting out committing.

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

I really like hiding the differences between the single threaded and multithreaded versions of the compositor with a runtime proxy class.  I think that&apos;ll make maintaining both configurations a lot easier.  :)

&gt; Source/WebCore/ChangeLog:12
&gt; +        (WebCore::LayerRendererCapabilities::LayerRendererCapabilities):

I said this in a chat conversation, but I think the capabilities could be its own patch.  It&apos;d help make this patch not be so huge.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-562
&gt; -    // Recheck that we still have a root layer. This may become null if
&gt; -    // compositing gets turned off during a paint operation.
&gt; -    if (!rootLayer()) {
&gt; -        m_rootCCLayerImpl.clear();
&gt; -        return;
&gt; -    }
&gt; -

Why is this check going away?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:61
&gt; +    if (false) // TODO: make thread a runtime flag in CCSettings

Just file another bug for this, rather than leaving a TODO.  :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-182
&gt; -        layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());

I had mentioned offline that this might not be safe to remove, but I think there&apos;s another setLayerRenderer call that happens in paintLayerContents.  So, I think this particular call is redundant and safe to remove.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:85
&gt; +    if (m_layerRenderer-&gt;owner()-&gt;rootLayer()) {
&gt; +        m_layerRenderer-&gt;updateLayers();
&gt; +        m_layerRenderer-&gt;drawLayers();
&gt;      }

It seems like this updateLayers call should go elsewhere.  In the BlahBlahMainThreadProxy::compositeIfNeeded case, it looks like updateLayers would get called twice.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:189
&gt; +    // GraphicsContext3D::create might fail and return 0, in that case fall back to software.
&gt; +    RefPtr&lt;GraphicsContext3D&gt; context = m_client-&gt;createLayerTreeHostContext3D();
&gt; +    if (!context)
&gt; +        return 0;
&gt; +

There&apos;s a lot of plumbing to get the GraphicsContext3D from the WebView across to the CCLayerTreeHostImpl.  This is especially the case where we&apos;ll fail to be able to do anything if we don&apos;t have a GC3D.  It just seems like it&apos;d be easier to pass this through up front, unless I&apos;m missing a reason for making GC3D a constructor argument here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.cpp:58
&gt; +        ccThread = m_client-&gt;createCompositorThread().leakPtr();

Same thing here.  Why so much plumbing here to create the compositor thread in the WebViewImpl? It looks like WebViewImpl just calls the static CCThreadImpl::create function.  I just don&apos;t see the value of adding this function to a number of client interfaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456619</commentid>
    <comment_count>8</comment_count>
      <attachid>105123</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-24 19:44:09 -0700</bug_when>
    <thetext>Created attachment 105123
Complete enough for initial review. Dont try running it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456674</commentid>
    <comment_count>9</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-24 23:37:29 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I said this in a chat conversation, but I think the capabilities could be its own patch.
I agree, for what its worth. If it proves that we&apos;re having a hard time getting our heads around this patch, I&apos;ll do my best to split it up. However, if we have a chance of getting a quality review without breaking it up, I&apos;d definitely love the reduction of work it&apos;d entail.

&gt; &gt; -    // Recheck that we still have a root layer. This may become null if
&gt; Why is this check going away?
It moved to the CCLayerTreeHostCommitter. Its still there. :)

&gt; &gt; +    if (false) // TODO: make thread a runtime flag in CCSettings
https://bugs.webkit.org/show_bug.cgi?id=66922

&gt; &gt; -        layer-&gt;platformLayer()-&gt;setLayerRenderer(m_layerRenderer.get());
&gt; So, I think this particular call is redundant and safe to remove.
I added a TODO to the current code to remove this before landing. My next few patch revs will leave it in place just because there are so many other bugs, I can&apos;t cleanly verify whether we&apos;re certain that matters yet. ~crying~

&gt; &gt; +        ccThread = m_client-&gt;createCompositorThread().leakPtr();
&gt; &gt; +    RefPtr&lt;GraphicsContext3D&gt; context = m_client-&gt;createLayerTreeHostContext3D();
&gt; There&apos;s a lot of plumbing to get the...

Yeah, there is a Ton of plumbing to get these.

One problem is that constructing a GraphicsContext requires the HostWindow, which is the WebView, which is WebKit side. Compositor is WebCore-side, so I don&apos;t have access to it. Also complicating things is the (old) need for the WebView to create the compositor context before the CCLayerTreeHost in order to set parent contexts appropriately. The CCThread is similar --- a WebThread is WebKit-only, so we can&apos;t create it on the compositor side. 

There are two cleanups we can do to make this less gross:
1. we could change the compositor so you instantiate it with a HostWindow. And, remove all the need for the temporaryGraphicsContext in the webview. I dont think its a lot of work, its just work.
2. We make a WebCore::MessageLoop, which has a platform/chromium implementation in terms of WebThread. CCThread would then be implemented as a WebCore message loop. @levin and I have talked about this but I think that process is best decoupled from &quot;get threaded compositor done&quot; pressures. :)

One other problem leading to excessive plumbing is that we have to create GraphicsContexts using main thread pointers(HostWindow, namely) but try to pevent main-thread concepts from ever leaking into the impl side. This prevents us from just creating a graphicsContexts in the LayerRenderer, for instance. So, though thats where they end up, to prevent the pointers needed to construct them from accidentally moving into the impl-side, we add ... um... pipes.

Eewies. I think CCThread plumbing is unavoidable. We could fix the graphics  context plumbing a bit. The LTH-&gt;LTHP-&gt;LTHI-&gt;LRC plumbing of the contexts feels unavoidable, but maybe there&apos;s a better way???</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456895</commentid>
    <comment_count>10</comment_count>
      <attachid>105197</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 09:00:05 -0700</bug_when>
    <thetext>Created attachment 105197
All features work as advertised.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457006</commentid>
    <comment_count>11</comment_count>
      <attachid>105197</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 11:12:38 -0700</bug_when>
    <thetext>Comment on attachment 105197
All features work as advertised.

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

One pass of comments for ya.  I don&apos;t think I understand settings/capabilities yet, so I&apos;ll try to understand that next.

&gt; Source/WebCore/platform/graphics/chromium/ContentLayerChromium.cpp:125
&gt; +#if 0 // AcceleratedPainting is broken by this patch. Will fix in a followon patch.

can you open a bug?

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:103
&gt; +    const Vector&lt;RefPtr&lt;LayerChromium&gt; &gt;&amp; c = children();
&gt; +    for (size_t i = 0; i &lt; c.size(); ++i)
&gt; +        c[i]-&gt;setLayerRendererRecursive(renderer);

nit: we try not to use one-char variables names except for loop counters (i, j, k, ...). maybe just access children() throughout this?

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:194
&gt; +    // FIXME: Remove this
&gt;      CCLayerTreeHost* m_owner;

by &quot;this&quot; you mean the m_owner pointer, right? can haz bug?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:62
&gt; +    if (false) // TODO: make thread a runtime flag in CCSettings

TODO-&gt;FIXME. can we just make the USE(THREADED_COMPOSITING) path always make a CCThreadProxy for now, or something like that? seems odd to have compile-time and runtime flags for the same thing

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:71
&gt; +    // Create the renderer...

comment not so useful

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:77
&gt; +    if (m_settings.acceleratePainting &amp;&amp; !m_proxy-&gt;layerRendererCapabilities().usingAcceleratedPainting)
&gt; +        m_settings.acceleratePainting = false;

i&apos;m a bit surprised this isn&apos;t m_settings.acceleratePainting = m_proxy-&gt;layerRendererCapabilities().usingAcceleratedPainting

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:116
&gt; +        // TODO: this is rumored to be redundant. If we can get things working, remove it.

can we figure this out before landing?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:117
&gt; +    if (m_layerRenderer)
&gt; +        m_layerRenderer-&gt;releaseTextures();

do we always want to releaseTextures(), or just when going !visible?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:133
&gt; +        // If creation failed, and we had asked for accelerated painting, disable accelerated painting
&gt; +        // and try creating the renderer again.
&gt; +        if (!m_layerRenderer &amp;&amp; m_settings.acceleratePainting) {
&gt; +            m_settings.acceleratePainting = false;
&gt; +            m_layerRenderer = LayerRendererChromium::create(implHack, this, context);

since we aren&apos;t supporting acceleratedPainting yet can we take this out for now?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:145
&gt; +        // If creation failed, and we had asked for accelerated painting, disable accelerated painting
&gt; +        // and try creating the renderer again.
&gt; +        if (!layerRenderer &amp;&amp; m_settings.acceleratePainting) {
&gt; +            m_settings.acceleratePainting = false;
&gt; +            layerRenderer = LayerRendererChromium::create(m_layerRenderer-&gt;owner(), this, context);
&gt; +        }

same here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:148
&gt; +        if (layerRenderer)
&gt; +            m_layerRenderer-&gt;rootLayer()-&gt;platformLayer()-&gt;setLayerRendererRecursive(layerRenderer.get());

should this go outside the else{} block (do we need to set this on initial creation) ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:151
&gt; +    return !!m_layerRenderer;

return m_layerRenderer; is fine, we have a conversion operator to bool on smart pointer types for a reason

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:154
&gt; +// FIXME: move all this code to LTH

LTH-&gt;CCLayerTreeHost. I know you&apos;ll probably be the one addressing this FIXME but no need to leave mysteries in case someone else picks this up.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplCCThreadProxy.cpp:114
&gt; +    // Make a blocking call to initializeLayerRendererOnCCThread. The results of that call
&gt; +    // are pushed into the ok and caps local varaibles.
&gt; +    CCCompletionEvent completion;
&gt; +    bool ok;
&gt; +    LayerRendererCapabilities capabilities;

caps -&gt; capabilities
varaibles -&gt; variables

I have no idea what &quot;ok&quot; means, can you use a more descriptive variable name for this?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.cpp:158
&gt; +    // We don&apos;t optimize this case in the main threaded case.

not sure i grok this, commits aren&apos;t free in the main thread case (although they aren&apos;t hugely expensive either)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.cpp:231
&gt; +        bool ok = !m_layerTreeHostImpl-&gt;initializeLayerRenderer(0, context);
&gt; +        m_layerTreeHost-&gt;didRecreateGraphicsContext(ok);

what does &apos;ok&apos; mean? something about context creation failing?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplMainThreadProxy.h:68
&gt; +    bool doComposite(bool presentResult);

nit: rather than having a bool param why not just have this never present and the one callsite that really does want to present can call present() itself

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.cpp:62
&gt; +void CCLayerTreeHostImplProxy::setImplThread(WTF::ThreadIdentifier value)
&gt;  {
&gt; -    ASSERT(isImplThread());
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::commitOnCCThread&quot;, this, 0);
&gt; -    m_layerTreeHostImpl-&gt;beginCommit();
&gt; -    {
&gt; -        TRACE_EVENT(&quot;CCLayerTreeHost::commit&quot;, this, 0);
&gt; -        committer-&gt;commit(m_layerTreeHost, m_layerTreeHostImpl.get());
&gt; -    }
&gt; -    completion-&gt;signal();
&gt; -
&gt; -    m_layerTreeHostImpl-&gt;commitComplete();
&gt; -}
&gt; -
&gt; -void CCLayerTreeHostImplProxy::drawLayersOnCCThread()
&gt; -{
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::drawLayersOnCCThread&quot;, this, 0);
&gt; -    ASSERT(isImplThread());
&gt; -    if (m_layerTreeHostImpl)
&gt; -        m_layerTreeHostImpl-&gt;drawLayers();
&gt; -}
&gt; -
&gt; -void CCLayerTreeHostImplProxy::setNeedsCommitAndRedrawOnCCThread()
&gt; -{
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::setNeedsCommitAndRedrawOnCCThread&quot;, this, 0);
&gt; -    ASSERT(isImplThread() &amp;&amp; m_layerTreeHostImpl);
&gt; -    m_layerTreeHostImpl-&gt;setNeedsCommitAndRedraw();
&gt; -}
&gt; -
&gt; -void CCLayerTreeHostImplProxy::setNeedsRedrawOnCCThread()
&gt; -{
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::setNeedsRedrawOnCCThread&quot;, this, 0);
&gt; -    ASSERT(isImplThread() &amp;&amp; m_layerTreeHostImpl);
&gt; -    m_layerTreeHostImpl-&gt;setNeedsRedraw();
&gt; -}
&gt; -
&gt; -void CCLayerTreeHostImplProxy::initImplOnCCThread(CCCompletionEvent* completion)
&gt; -{
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHostImplProxy::initImplOnCCThread&quot;, this, 0);
&gt; -    ASSERT(isImplThread());
&gt; -    m_layerTreeHostImpl = m_layerTreeHost-&gt;createLayerTreeHostImpl(this);
&gt; -    completion-&gt;signal();
&gt; +    implThreadID = value;

nit: value-&gt;identifier or something like that

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:73
&gt; +    virtual GraphicsContext3D* context() = 0; // Temporary hack until the scheduling inversion is completed.
&gt;  
&gt; -    void start(); // Must be called before using the proxy.
&gt; -    void stop(); // Must be called before deleting the proxy.
&gt; +    virtual void finishAllRendering() = 0;
&gt;  
&gt; -    // CCLayerTreeHostImplCient -- called on CCThread
&gt; -    virtual void postDrawLayersTaskOnCCThread();
&gt; -    virtual void requestFrameAndCommitOnCCThread(double frameBeginTime);
&gt; +    virtual bool isStarted() const = 0;
&gt; +
&gt; +    // The ownerHack argument is to allow introducing the ImplProxy subclasses
&gt; +    // without also trying to change LayerRendererChromium to point at
&gt; +    // CCLayerTreeHostImpl.
&gt; +    virtual bool initializeLayerRenderer(CCLayerTreeHost* ownerHack) = 0;
&gt; +
&gt; +    virtual const LayerRendererCapabilities&amp; layerRendererCapabilities() const = 0;
&gt; +
&gt; +    // Testing hook
&gt; +    virtual void loseCompositorContext() = 0;
&gt; +
&gt; +    virtual void setNeedsCommitAndRedraw() = 0;
&gt; +    virtual void setNeedsRedraw() = 0;
&gt; +
&gt; +    virtual void setVisible(bool) = 0;
&gt; +
&gt; +    virtual void start() = 0; // Must be called before using the proxy.
&gt; +    virtual void stop() = 0; // Must be called before deleting the proxy.

can you reorder this to be:

actual interface (with doc)

testing hooks

hack stuff for now

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImplProxy.h:84
&gt; +    static void setImplThread(WTF::ThreadIdentifier value);

nit: don&apos;t name the parameter here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCMainThreadTask.h:162
&gt; +template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;

we need to write a script to write these</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457043</commentid>
    <comment_count>12</comment_count>
      <attachid>105197</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-25 11:56:41 -0700</bug_when>
    <thetext>Comment on attachment 105197
All features work as advertised.

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-561
&gt; -    if (!rootLayer()) {
&gt; -        m_rootCCLayerImpl.clear();
&gt; -        return;
&gt; -    }

Maybe I&apos;m being blind, but I still don&apos;t see where this check for a null root layer has moved to.  Can you point that out to me? I don&apos;t see where on the path to updateLayers this gets checked.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:68
&gt;  class CCLayerTreeHostCommitter;

If you&apos;re removing this class, can you remove this and the other few forward declarations to it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457117</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-25 13:59:43 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I said this in a chat conversation, but I think the capabilities could be its own patch.
&gt; I agree, for what its worth. If it proves that we&apos;re having a hard time getting our heads around this patch, I&apos;ll do my best to split it up. However, if we have a chance of getting a quality review without breaking it up, I&apos;d definitely love the reduction of work it&apos;d entail.

That sounds reasonable.

&gt; &gt; There&apos;s a lot of plumbing to get the...
&gt; 
&gt; Yeah, there is a Ton of plumbing to get these.

Nat and I talked a bit offline.  I guess I didn&apos;t realize how much work there would be to remove this plumbing.  Filing separate bugs to postpone this work is totally reasonable to keep this patch from getting even bigger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457130</commentid>
    <comment_count>14</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 14:11:58 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Maybe I&apos;m being blind, but I still don&apos;t see where this check for a null root layer has moved to.


You&apos;re not blind. You right. :) My bad!


(In reply to comment #11)
&gt; can you open a bug?
Bugs filed.

&gt; TODO-&gt;FIXME. can we just make the USE(THREADED_COMPOSITING) path always make a CCThreadProxy for now
Yep! Done.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:116
&gt; &gt; +        // TODO: this is rumored to be redundant. If we can get things working, remove it.
&gt; can we figure this out before landing?
Yep, I&apos;m still chasing a few uglies so this is lower on my panic-radar than a few other things. :)

&gt; &gt; +        // If creation failed, and we had asked for accelerated painting, disable accelerated painting
&gt; since we aren&apos;t supporting acceleratedPainting yet can we take this out for now?
I tried to reduce clean this up a lot. But, this code serves both the threaded and non-threaded cases, so &quot;hacking for thread&quot; doesn&apos;t really work.


&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCMainThreadTask.h:162
&gt; &gt; +template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
&gt; 
&gt; we need to write a script to write these

https://bugs.webkit.org/show_bug.cgi?id=66962 will probably force such a discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457219</commentid>
    <comment_count>15</comment_count>
      <attachid>105271</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 16:11:47 -0700</bug_when>
    <thetext>Created attachment 105271
Incorporate feedback. Awesome names care-of Enne.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457244</commentid>
    <comment_count>16</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-25 16:24:53 -0700</bug_when>
    <thetext>*** Bug 58850 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457346</commentid>
    <comment_count>17</comment_count>
      <attachid>105271</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-08-25 19:49:02 -0700</bug_when>
    <thetext>Comment on attachment 105271
Incorporate feedback. Awesome names care-of Enne.

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

This looks really good.  Left a bunch of comments, but most of the nitpick variety.  This patch also doesn&apos;t apply cleanly to ToT, so please merge up and make sure that the tests still pass in debug and release.

Also make sure that when this lands it does not have the memory leaks https://bugs.webkit.org/show_bug.cgi?id=66981 fixes.  It looks like the shutdown path of this code will need at least some of the code in that patch to avoid leaking like crazy.

I&apos;m going to be out of town for a few days, so Enne is going to take over reviewing this.  Would you mind rubber stamping when Enne&apos;s satisfied, Ken? Much appreciated.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:112
&gt; +        // TODO: this is rumored to be redundant. If we can get things working, remove it.

please file a bug + link to it here before landing (or just remove the calls, if you can prove it&apos;s safe)

we use FIXME in WebKit, not TODO

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:153
&gt; +GraphicsContext3D* CCLayerTreeHost::context()
&gt; +{
&gt; +    return m_proxy-&gt;context();
&gt; +}

kinda surprised to see this here - the context lives over on the impl most of the time.  I&apos;m guessing this is gonna go away, or maybe it&apos;s only supposed to be called during commit?  can it get thread ASSERT()s and/or FIXMEs?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:238
&gt;  void CCLayerTreeHost::composite(bool finish)
&gt;  {
&gt; -    TRACE_EVENT(&quot;CCLayerTreeHost::composite&quot;, this, 0);
&gt; -
&gt; -    if (m_recreatingGraphicsContext) {
&gt; -        // reallocateRenderer will request a repaint whether or not it succeeded
&gt; -        // in creating a new context.
&gt; -        reallocateRenderer();
&gt; -        m_recreatingGraphicsContext = false;
&gt; -        return;
&gt; -    }
&gt; -
&gt; -    // Do not composite if the compositor context is already lost.
&gt; -    if (!m_layerRenderer-&gt;isCompositorContextLost()) {
&gt; -        doComposite();
&gt; -
&gt; -        // Put result onscreen.
&gt; -        m_layerRenderer-&gt;present();
&gt; -    }
&gt; -
&gt; -    if (m_layerRenderer-&gt;isCompositorContextLost()) {
&gt; -        // Trying to recover the context right here will not work if GPU process
&gt; -        // died. This is because GpuChannelHost::OnErrorMessage will only be
&gt; -        // called at the next iteration of the message loop, reverting our
&gt; -        // recovery attempts here. Instead, we detach the root layer from the
&gt; -        // renderer, recreate the renderer at the next message loop iteration
&gt; -        // and request a repaint yet again.
&gt; -        m_recreatingGraphicsContext = true;
&gt; -        setNeedsCommitAndRedraw();
&gt; -    }
&gt; -}
&gt; -
&gt; -void CCLayerTreeHost::loseCompositorContext()
&gt; -{
&gt; -    m_recreatingGraphicsContext = true;
&gt; -}
&gt; -
&gt; -void CCLayerTreeHost::reallocateRenderer()
&gt; -{
&gt; -    RefPtr&lt;LayerRendererChromium&gt; layerRenderer = createLayerRenderer();
&gt; -    if (!layerRenderer) {
&gt; -        m_client-&gt;didRecreateGraphicsContext(false);
&gt; -        return;
&gt; -    }
&gt; -
&gt; -    layerRenderer-&gt;setLayerRendererRecursive(m_rootLayer-&gt;platformLayer());
&gt; -    m_layerRenderer = layerRenderer;
&gt; -
&gt; -    m_client-&gt;didRecreateGraphicsContext(true);
&gt; +    static_cast&lt;CCSingleThreadProxy*&gt;(m_proxy.get())-&gt;compositeImmediately();

looks like we&apos;re ignoring the &apos;finish&apos; parameter, which seems right to me (i never knew what it was for anyway).  if so leave out the param name or at least comment it out so we don&apos;t get unused variable warnings.

can we get ASSERT()s that we aren&apos;t calling this with a threaded proxy?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:123
&gt; +    bool compositeAndReadback(void *pixels, const IntRect&amp;);

what&apos;s the return value for? since this is the public interface to the outside world (WebViewImpl) it&apos;d be good to document what the caller is supposed to do here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:125
&gt;      void finishAllRendering();

this API is pretty problematic (i see you ASSERT_NOT_REACHED it in the threaded case).  do we have a bug to track this, or does it just fall into the &apos;need to invert scheduling&apos; bucket?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCProxy.cpp:57
&gt; +void CCProxy::setImplThread(bool value)
&gt; +{
&gt; +    fakeImplThread = value;

use something other than &apos;value&apos;

&gt; Source/WebCore/platform/graphics/chromium/cc/CCProxy.h:90
&gt; +

nit: extra newline

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h:42
&gt; +    // CCLayerTreeHostImplProxy implementation

CCLayterlkjdflkjsdfkljsdfProxy -&gt; CCProxy

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:63
&gt; +

nit: extra newline here

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:111
&gt; +    // are pushed into the ok and caps local variables.

code is updated (thank you) but the comment isn&apos;t.
ok-&gt;initializeSucceeded
caps-&gt;capabilities

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:253
&gt; +    ASSERT(isImplThread() &amp;&amp; m_layerTreeHostImpl);

if you don&apos;t mind too much, can you make this 2 ASSERT()s instead of &amp;&amp;&apos;ing the conditions? when a compound ASSERT() like this fails on the bots it&apos;s always a big pain in the butt to figure out which side failed. same goes for the rest of the file

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:254
&gt; +    // TODO: should this pass through via the commit?

TODO -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.h:43
&gt; +    // CCLayerTreeHostImplProxy implementation

CCLayerTresldkfjsdlkfjsdflkjProxy -&gt; CCProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457672</commentid>
    <comment_count>18</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-26 11:24:05 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:125
&gt; &gt;      void finishAllRendering();
&gt; 
&gt; this API is pretty problematic (i see you ASSERT_NOT_REACHED it in the threaded case).  do we have a bug to track this, or does it just fall into the &apos;need to invert scheduling&apos; bucket?

I think this is actually safe. Its OK to block the main thread on the compositor. Its not ok to block in the reverse direction.

To eliminate this, we need to do this:
http://code.google.com/p/chromium/issues/detail?id=85086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457676</commentid>
    <comment_count>19</comment_count>
      <attachid>105385</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-26 11:27:28 -0700</bug_when>
    <thetext>Created attachment 105385
Remove nits, rebaseline.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457682</commentid>
    <comment_count>20</comment_count>
      <attachid>105385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 11:38:58 -0700</bug_when>
    <thetext>Comment on attachment 105385
Remove nits, rebaseline.

Attachment 105385 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9549067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458318</commentid>
    <comment_count>21</comment_count>
      <attachid>105505</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-29 11:35:22 -0700</bug_when>
    <thetext>Created attachment 105505
Add precommit step and make sure we dont leak memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458330</commentid>
    <comment_count>22</comment_count>
      <attachid>105505</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-29 11:49:19 -0700</bug_when>
    <thetext>Comment on attachment 105505
Add precommit step and make sure we dont leak memory.

Attachment 105505 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/9563228</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458381</commentid>
    <comment_count>23</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 12:47:53 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=105385&amp;action=review

I guess I had previously assumed prior to looking at this too closely that the CCThreadProxy was in a workable state.  But, given some conversation, it sounds like it has a ways to go before it&apos;s fully implemented, but the CCSingleThreadProxy is workable.

I&apos;ll admit that I&apos;m not really comfortable with the idea of landing dead and broken code in the tree.  There&apos;s some advantage to having it compile-checked, but I think that&apos;s outweighed by any confusion others might have about its state of functionality.  So, I think I&apos;d prefer to just wait until CCThreadProxy worked to land it and it can get reviewed in a working state.  (Maybe we can also add at least a layout test to make sure it runs too.)  It doesn&apos;t look that tricky to remove from this patch, since there&apos;s maybe 4 lines of code and 2 files to cut and you can just revert that commit locally.

/me puts on eir WebKit nitpicking pants.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-562
&gt; -    // Recheck that we still have a root layer. This may become null if
&gt; -    // compositing gets turned off during a paint operation.
&gt; -    if (!rootLayer()) {
&gt; -        m_rootCCLayerImpl.clear();
&gt; -        return;
&gt; -    }
&gt; -

...I still think we need a &quot;if (!rootLayer()) return;&quot; check here.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:67
&gt; +class CCLayerTreeHost; // TODO: remove pointers to this

TODO -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:45
&gt; +    virtual void setNeedsRedrawOnImplThread() = 0;

Where is this used?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCProxy.cpp:58
&gt; +void CCProxy::setImplThread(bool value)
&gt; +{
&gt; +    fakeImplThread = value;
&gt; +}

s/value/isImplThread/

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:70
&gt; +

Unneeded whitespace.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:148
&gt; +    m_layerTreeHost-&gt;scheduleComposite();

I assume this won&apos;t compile with threaded compositing turned on? Shouldn&apos;t there be a guard here?

I know you said you were also thinking about inverting where the scheduling happened?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp:263
&gt; +    // TODO: should this pass through via the commit?

TODO -&gt; FIXME.

I&apos;m not sure if this should pass through the commit or not.  Would a setVisible(false) abort compositing a frame on the cc thread?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458414</commentid>
    <comment_count>24</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 13:25:15 -0700</bug_when>
    <thetext>(In reply to comment #23)

&gt; I&apos;ll admit that I&apos;m not really comfortable with the idea of landing dead and broken code in the tree.  There&apos;s some advantage to having it compile-checked, but I think that&apos;s outweighed by any confusion others might have about its state of functionality.  So, I think I&apos;d prefer to just wait until CCThreadProxy worked to land it and it can get reviewed in a working state.  (Maybe we can also add at least a layout test to make sure it runs too.)  It doesn&apos;t look that tricky to remove from this patch, since there&apos;s maybe 4 lines of code and 2 files to cut and you can just revert that commit locally.

I had some conversation with nduca about this offline, and I realize that I&apos;m coming into this patch sequence in the middle.  CCThreadProxy, previously known as ReallyLongNameProxy, already existed and the THREADED_COMPOSITING mode flag wasn&apos;t being built anywhere so probably didn&apos;t compile either.  So, none of this complaint is introduced by this patch.

Maybe I&apos;ll just express my frustration that even when moving quickly, I don&apos;t think it&apos;s worthwhile to land code that doesn&apos;t work at all.  Those things are better kept in a longer-running local branch, with any refactoring to other classes pushed upstream where that can be tested.  That process also keeps patches smaller and easier to review.

However, we&apos;re well on the way through this process and this will be fixed by a future patch soon enough, so I&apos;ll just let it be rather than create more work to clean up a mess that was already here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458464</commentid>
    <comment_count>25</comment_count>
      <attachid>105524</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-29 14:48:08 -0700</bug_when>
    <thetext>Created attachment 105524
Remove CCLayerTreeHostImplClient as it was unused. Pass visibility via commit. Fix compile with THREADED_COMPOSITING. Nit fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458498</commentid>
    <comment_count>26</comment_count>
      <attachid>105524</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 15:40:34 -0700</bug_when>
    <thetext>Comment on attachment 105524
Remove CCLayerTreeHostImplClient as it was unused. Pass visibility via commit. Fix compile with THREADED_COMPOSITING. Nit fixes.

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

Thanks for adding the pre-commit step.  It&apos;s a necessary short-term band-aid.  :(

I think I&apos;m down to just nits at this point.

&gt; Source/WebCore/ChangeLog:41
&gt; +        (WebCore::CCLayerTreeHost::commitTo):

ChangeLog needs a refresh.  :(

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:67
&gt; +class CCLayerTreeHost; // TODO: remove pointers to this

nit: TODO -&gt; FIXME

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:120
&gt; +#if !USE(THREADED_COMPOSITING)
&gt; +    void composite(bool finish);
&gt; +#endif

nit: This doesn&apos;t look like it needs a finish parameter.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:43
&gt; +    return adoptPtr(new CCLayerTreeHostImpl( settings));

nit: needless whitespace.  Kind of surprised this passed the style bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458518</commentid>
    <comment_count>27</comment_count>
      <attachid>105536</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-29 15:55:29 -0700</bug_when>
    <thetext>Created attachment 105536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458522</commentid>
    <comment_count>28</comment_count>
      <attachid>105536</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 16:04:18 -0700</bug_when>
    <thetext>Comment on attachment 105536
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        [chromium] Introduce CCLayerTreeHostImplMainThreadProxy in order to move LayerRenderer to CCLayerTreeHostImpl

nit: s/ReallyLongNameProxy/CCProxy/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458523</commentid>
    <comment_count>29</comment_count>
      <attachid>105537</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-29 16:09:02 -0700</bug_when>
    <thetext>Created attachment 105537
Edit changelog for nit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458536</commentid>
    <comment_count>30</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 16:22:51 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; Created an attachment (id=105537) [details]
&gt; Edit changelog for nit

Unofficially, this looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458544</commentid>
    <comment_count>31</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-08-29 16:29:45 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Created an attachment (id=105537) [details] [details]
&gt; &gt; Edit changelog for nit
&gt; 
&gt; Unofficially, this looks good to me.

...so long as it doesn&apos;t make cr-mac-ews cry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458737</commentid>
    <comment_count>32</comment_count>
      <attachid>105589</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-29 23:46:10 -0700</bug_when>
    <thetext>Created attachment 105589
Win ews failure likely flake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460043</commentid>
    <comment_count>33</comment_count>
      <attachid>105853</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-31 16:26:08 -0700</bug_when>
    <thetext>Created attachment 105853
Fixes for lost context, video, readback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460101</commentid>
    <comment_count>34</comment_count>
      <attachid>105853</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-31 17:13:31 -0700</bug_when>
    <thetext>Comment on attachment 105853
Fixes for lost context, video, readback.

Attachment 105853 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9570777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460115</commentid>
    <comment_count>35</comment_count>
      <attachid>105871</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-08-31 17:34:15 -0700</bug_when>
    <thetext>Created attachment 105871
make ews happy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460525</commentid>
    <comment_count>36</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-01 09:44:33 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Created an attachment (id=105871) [details]
&gt; make ews happy

This (unofficially) looks awesome to me.  Can this get an official review by somebody?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460584</commentid>
    <comment_count>37</comment_count>
      <attachid>105871</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-01 10:36:30 -0700</bug_when>
    <thetext>Comment on attachment 105871
make ews happy

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460638</commentid>
    <comment_count>38</comment_count>
      <attachid>105998</attachid>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-01 11:39:07 -0700</bug_when>
    <thetext>Created attachment 105998
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460692</commentid>
    <comment_count>39</comment_count>
      <attachid>105998</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 12:29:55 -0700</bug_when>
    <thetext>Comment on attachment 105998
Patch for landing

Rejecting attachment 105998 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
8b9618a02581e43138353a742366cf80bdef5ff0
r94329 = 9eb422c0b4bfca80a17f63a1e3d849c8b5b38f19
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.
Updating chromium port dependencies using gclient...

________ running &apos;/usr/bin/python gyp_webkit&apos; in &apos;/mnt/git/webkit-commit-queue/Source/WebKit/chromium&apos;
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/9580351</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460719</commentid>
    <comment_count>40</comment_count>
      <attachid>105998</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-01 12:55:53 -0700</bug_when>
    <thetext>Comment on attachment 105998
Patch for landing

cq barfed in a non-obvious way, flippin&apos; bit to try again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460720</commentid>
    <comment_count>41</comment_count>
      <attachid>105998</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 12:58:18 -0700</bug_when>
    <thetext>Comment on attachment 105998
Patch for landing

Rejecting attachment 105998 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
tching file Source/WebCore/platform/graphics/chromium/cc/CCThreadTask.h
patching file Source/WebCore/platform/graphics/chromium/cc/CCTiledLayerImpl.cpp
patching file Source/WebCore/platform/graphics/chromium/cc/CCVideoLayerImpl.cpp
patching file Source/WebKit/chromium/ChangeLog
patching file Source/WebKit/chromium/src/WebViewImpl.cpp
patching file Source/WebKit/chromium/tests/CCThreadTaskTest.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9578517</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460854</commentid>
    <comment_count>42</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-01 15:39:16 -0700</bug_when>
    <thetext>Committed r94353: &lt;http://trac.webkit.org/changeset/94353&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464277</commentid>
    <comment_count>43</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-08 13:07:03 -0700</bug_when>
    <thetext>I think this patch re-introduced https://bugs.webkit.org/show_bug.cgi?id=66981.  Try this:

1) open poster circle
2) open task manager, look at GPU memory use
3) right click on the poster circle tab, hit &apos;duplicate tab&apos; a bunch of times. each time the GPU memory use should increase (since the new tabs have textures)
4) close all tabs except the first one. the GPU memory use should return to the value in step (2), but on ToT it doesn&apos;t go down at all when the duplicated tabs are closed

:(  I&apos;m looking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464395</commentid>
    <comment_count>44</comment_count>
    <who name="Nat Duca">nduca</who>
    <bug_when>2011-09-08 14:53:40 -0700</bug_when>
    <thetext>&gt; 
&gt; :(  I&apos;m looking

Womp. Sorry! :/ Let me know if you need me to take this on since its my regression. Sleep is overrated.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104906</attachid>
            <date>2011-08-23 13:42:38 -0700</date>
            <delta_ts>2011-08-23 22:46:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66807-20110823134237.patch</filename>
            <type>text/plain</type>
            <size>60303</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM2MDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjY2VlMDNlY2FjNDMxYmQ3
NGRlZjA3YTU1Y2QzZDJjNTU4N2I3Y2M0Li4xYzhlZmNmOTRkMTdlZGU5NzBkZTE3OWY4YmE4NzQ0
OTVhNzYzODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMjMgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNl
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXll
clJlbmRlcmVyIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6U2NvcGVk
U2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTZXRJbXBsVGhyZWFkOjp+
U2NvcGVkU2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJ
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaDoKKwogMjAxMS0wOC0yMyAgSmVzc2llIEJlcmxpbiAgPGpi
ZXJsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCA1YWJmZGJiNGJhOWFmYTA1MzRkOTFjZjdkNjk1YmVmMDNhOGJkN2I1Li42NmRiNTUyYmZlOWJj
MTUzYjdiMjg3NzE2NmRjZTAxMGVhYWFiNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTMzLDYg
KzM1MzMsMTAgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCcsCisgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRo
cmVhZFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAppbmRleCBjY2E4NmU3ZjAzMDg1MGIwY2Y5ZDI2N2U0NmViZTY1MGI5ODc4YTBiLi41OTIw
N2MwNGRhMzM4NjExMGRiMDZlOTA2MmYyOTUxNjg3Mjc3MzZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ4NCwxMiArNDg0LDEzIEBAIGJvb2wgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFs
bG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KICAg
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAy
NCAqIDEwMjQ7CiAgICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyht
YXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICBtX2Nh
cGFiaWxpdGllcy51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcgPSB0cnVlOwogICAgIH0KICNlbmRp
ZgogCiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIgPSBleHRlbnNpb25z
LT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwotICAgIGlmIChtX2NvbnRleHRTdXBw
b3J0c01hcFN1YikKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMt
PnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVz
LnVzaW5nTWFwU3ViKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJP
TUlVTV9tYXBfc3ViIik7CiAKICAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IGMxOWJjMzBkNTg5ZmJiMDlhOWM5
YWU4NTllOTkyOTQ2NmE2NmE4NDEuLjMxN2Q5YWVhZDQ3NjdkM2FkMTE5NTI0OTI2ZGVlOGNmM2Mz
Mzc4NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC02OSw2ICs2OSwx
NSBAQCBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDsKIAorc3RydWN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMgeworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKQorICAgICAgICA6IHN1
cHBvcnRzTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGlu
ZyhmYWxzZSkgeyB9CisKKyAgICBib29sIHVzaW5nTWFwU3ViOworICAgIGJvb2wgdXNpbmdBY2Nl
bGVyYXRlZFBhaW50aW5nOworfTsKKwogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2Yg
Y29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJs
aWM6CkBAIC03Nyw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5MYXllclJlbmRlcmVy
Q2hyb21pdW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvc250IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9
CiAKICAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsgfQogICAg
IGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9
CkBAIC04NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCiAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKLSAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1
YigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOyB9CisgICAgYm9vbCBj
b250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllcy51c2lu
Z01hcFN1YjsgfQogCiAjaWYgVVNFKFNLSUEpCiAgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgp
IHsgcmV0dXJuIG1fc2tpYUNvbnRleHQuZ2V0KCk7IH0KQEAgLTE5Nyw2ICsyMDcsNyBAQCBwcml2
YXRlOgogCiAgICAgLy8gRklYTUU6IENoYW5nZSB0aGlzIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwK
ICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fb3duZXI7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVj
dGlvbk1hdHJpeDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKQEAg
LTIzOSw4ICsyNTAsNiBAQCBwcml2YXRlOgogCiAgICAgQ2hpbGRDb250ZXh0TWFwIG1fY2hpbGRD
b250ZXh0czsKIAotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBDQ1Jl
bmRlclN1cmZhY2UqIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVy
IG1fbGF5ZXJTb3J0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAxZjNi
OTc5NzkwMDA0N2MzM2ZmNGMzNmEwZTJlYjFmMDk4ZTIyZjMwLi44MmNlY2E1N2U3MTljMDU3YjBh
MDc2ZjkwODIzNTM0ODMxYTQzY2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
QEAgLTU2LDEwICs1NiwyNCBAQCBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xh
eWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncwogCiBib29sIENDTGF5
ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiB7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gY3JlYXRl
TGF5ZXJSZW5kZXJlcigpOwotICAgIGlmICghbV9sYXllclJlbmRlcmVyKQorI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKKyAgICBpZiAoZmFsc2UpIC8vIFRPRE86IG1ha2UgdGhyZWFkIGEg
cnVudGltZSBmbGFnIGluIENDU2V0dGluZ3MKKyAgICAgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVl
SG9zdEltcGxDQ1RocmVhZFByb3h5OjpjcmVhdGUodGhpcyk7CisgICAgZWxzZQorICAgICAgICBt
X3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMp
OworI2Vsc2UKKyAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94
eTo6Y3JlYXRlKHRoaXMpOworI2VuZGlmCisgICAgbV9wcm94eS0+c3RhcnQoKTsKKworICAgIC8v
IENyZWF0ZSB0aGUgcmVuZGVyZXIuLi4KKyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxpemVMYXll
clJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBVcGRhdGUg
bV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRo
ZSByZW5kZXJlci4KKyAgICBpZihtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyAmJiAhbV9w
cm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnN1cHBvcnRzQWNjZWxlcmF0ZWRQYWlu
dGluZykKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKwog
ICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOwogI2lmbmRlZiBOREVC
VUcKICAgICBtX3Jvb3RMYXllci0+c2V0TmFtZSgicm9vdCBsYXllciIpOwpAQCAtNjgsMTIgKzgy
LDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogCiAgICAgbV9yb290TGF5
ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkp
OwogCi0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgbV9wcm94eSA9IENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwotICAgIEFTU0VSVChtX3Byb3h5LT5p
c1N0YXJ0ZWQoKSk7CisgICAgLy8gV2UgY2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUg
cHJveHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtODEsMTAgKzkxLDgg
QEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+
Q0NMYXllclRyZWVIb3N0KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+
Q0NMYXllclRyZWVIb3N0IiwgdGhpcywgMCk7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQogICAgIG1fcHJveHktPnN0b3AoKTsKICAgICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCkKQEAgLTEwMywxMCArMTExLDE0
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSkKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCitQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0
Q29udGV4dDNEKCkKK3sKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKTsKK30KKwogUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCiB7Ci0gICAgLy8g
RklYTUU6IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBjYXNlLCBmaXggd2hlbiBwb3NzaWJsZS4K
LSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
OjpjcmVhdGUoKTsKIH0KIAogUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVy
VHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQqIGNsaWVudCkKQEAgLTExNSwyOCArMTI3LDI0IEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVy
CiAgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVy
KTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KGJvb2wgc3VjY2VzcykKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKK30KKwogR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgp
CiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIHJldHVybiBt
X3Byb3h5LT5jb250ZXh0KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVB
bmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0jaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0
aGlzLgotI2Vsc2UKLSAgICBkb0NvbXBvc2l0ZSgpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0
RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKLSNlbmRpZgorICAgIG1fcHJveHktPmNv
bXBvc2l0ZUFuZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKLSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgbV9s
YXllclJlbmRlcmVyLT5maW5pc2goKTsKLSNlbmRpZgorICAgIG1fcHJveHktPmZpbmlzaEFsbFJl
bmRlcmluZygpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQpAQCAtMTk0LDkxICsyMDIsMTQgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6
ZSwgY29uc3QgSW50U2l6ZSYgY28KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKQogewotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgaWYg
KCF2aXNpYmxlKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwot
I2VuZGlmCi19Ci0KLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBDQ0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQotewotICAgIC8vIEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2FzZSBmYWxsIGJhY2sg
dG8gc29mdHdhcmUuCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9j
bGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQWN0dWFsbHkgY3JlYXRlIHRoZSByZW5kZXJl
ci4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0KLSAgICAvLyBJZiBj
cmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5n
LCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCi0gICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0
aGUgcmVuZGVyZXIgYWdhaW4uCi0gICAgaWYgKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5n
ICYmICFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50
aW5nID0gZmFsc2U7Ci0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGF5ZXJSZW5k
ZXJlcjsKKyAgICBtX3Byb3h5LT5zZXRWaXNpYmxlKGZhbHNlKTsKIH0KIAogI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9Db21wb3NpdGUoKQot
ewotI2lmbmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxU
aHJlYWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBt
X2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJh
d0xheWVycygpOwotI2lmbmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldEltcGxUaHJlYWQoZmFsc2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhp
Y3NDb250ZXh0KSB7Ci0gICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3Qg
YSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVh
dGluZyBhIG5ldyBjb250ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAg
ICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRl
eHQgaXMgYWxyZWFkeSBsb3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0
b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8g
UHV0IHJlc3VsdCBvbnNjcmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7
Ci0gICAgfQotCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExv
c3QoKSkgewotICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBo
ZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBp
cyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAg
ICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29w
LCByZXZlcnRpbmcgb3VyCi0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3Rl
YWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJl
ciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRp
b24KLSAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAg
bV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKLSAgICB9CisgICAgc3RhdGljX2Nhc3Q8Q0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21wb3NpdGVJbW1lZGlhdGVseSgp
OwogfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKLXsKLSAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gY3JlYXRlTGF5
ZXJSZW5kZXJlcigpOwotICAgIGlmICghbGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX2NsaWVu
dC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbGF5ZXJSZW5kZXJlci0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jv
b3RMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJl
bmRlcmVyOwotCi0gICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHRydWUp
OwotfQotI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisjZW5kaWYKIAogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBiMDdhMjVmY2E2MmNiY2I1YWRjY2E5MTg5
Y2FiZWFkZDNlNWUwZDk5Li43YzExYTQ0MTliMWU4NWUzYTc2YmZhNjUyMWM1YWQxYzdmNWY5NTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNzAsMTcgKzcwLDE5IEBAIHN0cnVj
dCBDQ1NldHRpbmdzIHsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKIH07CiAKLWNs
YXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4g
eworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVI
b3N0PiwgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGll
bnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0KCk7
CiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlDbGllbnQgaW1wbGVtZW5hdGlvbgog
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
CiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1p
dENvbXBsZXRlKCk7Ci0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudCopOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKIAogICAgIGJvb2wg
YW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KICAgICB2b2lkIHNldEFu
aW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX2FuaW1hdGluZyA9IGFuaW1hdGluZzsgfSAvLyBD
YW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJlYWRlZCBzY2hlZHVsaW5nIG1vdmVzIGluc2lkZS4K
QEAgLTEyNSwxNSArMTI3LDYgQEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBjcmVhdGVMYXllclJlbmRlcmVyKCk7CiAKLSAgICAvLyBUZW1wb3Jhcnkg
aG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKLSAgICB2b2lkIHJlYWxs
b2NhdGVSZW5kZXJlcigpOwotCi0gICAgYm9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7
Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotI2Vu
ZGlmCi0KICAgICBib29sIG1fYW5pbWF0aW5nOwogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXgg
NGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1Mzg2NjlhZS4uYWIyNTE5MWNmMjE1ZTZi
ZjUxNmNkMmY3NmQ3ZGI5YWRlNDI5MWFkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKQEAgLTM4LDE4ICszOCwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCog
Y2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKIHsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCByZW5kZXJlcikpOworICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbChjbGllbnQsIHNldHRpbmdzKSk7CiB9
CiAKLUNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVI
b3N0SW1wbENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
cmVuZGVyZXIpCitDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3Mp
CiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQog
ICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAg
ICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQogICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNl
KQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIApAQCAtNjgsMzQgKzY4LDU2IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogICAgIHNldE5lZWRz
UmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCkKIHsKLSAgICAv
LyBJZiBhIGNvbW1pdCBpcyBwZW5kaW5nLCBkbyBub3QgZHJhdy4gVGhpcyBpcyBhIHRlbXBvcmFy
eSByZXN0cmljdGlvbiB0aGF0Ci0gICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgZHJhd0xheWVy
cyBpcyBjdXJyZW50bHkgYSBibG9ja2luZyBvcGVyYXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgot
ICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnMoKTsKK30KIAotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKG1fcmVkcmF3UGVuZGlu
Zyk7Ci0gICAgbV9yZWRyYXdQZW5kaW5nID0gZmFsc2U7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBkcmF3TGF5ZXJzKCk7CisgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1
ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOworfQogCi0gICAgewotICAgICAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQiLCB0aGlzLCAwKTsK
LSAgICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAgICAgYm9vbCBjb250
ZXh0TG9zdDsKLSAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmNvbnRleHRMb3N0KSkpOwotICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQoKQoreworICAgIGRyYXdMYXll
cnMoKTsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnByZXNlbnQoKTsKIAotICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1l
c3NhZ2UgdXAgdG8gdGhlIFJlbmRlcldpZGdldCBbb3IgbW92ZXBsdWdpbiBlcXVpdmFsZW50cy4u
Ll0KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYgbV9yZWRyYXdQZW5kaW5nKTsKKyAgICBtX3Jl
ZHJhd1BlbmRpbmcgPSBmYWxzZTsKIAotICAgICAgICAvLyBGSVhNRTogaGFuZGxlIGNvbnRleHQg
bG9zdAotICAgICAgICBpZiAoY29udGV4dExvc3QpCi0gICAgICAgICAgICBGQVRBTCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtSW1wbCBkb2VzIG5vdCBoYW5kbGUgY29udGV4dCBsb3N0IHlldC4iKTsK
KyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkgeworICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdMYXllcnMoKTsKICAgICB9CiAKICAgICArK21fZnJhbWVOdW1iZXI7CiB9CiAKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBtX2xh
eWVyUmVuZGVyZXItPmZpbmlzaCgpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6Omlz
Q29udGV4dExvc3QoKQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIHJldHVy
biBtX2xheWVyUmVuZGVyZXItPmlzQ29udGV4dExvc3QoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpwcmVzZW50KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyICYmICFp
c0NvbnRleHRMb3N0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworfQorCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXciLCB0aGlzLCAwKTsKQEAgLTExNiwxOSArMTM4LDU5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tP
bkNDVGhyZWFkKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09u
TWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExv
c3QpCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKEND
TGF5ZXJUcmVlSG9zdCogaW1wbEhhY2ssIFBhc3NSZWY8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5k
ZXJlcikgeworICAgICAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAg
ICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1w
bEhhY2ssIGNvbnRleHQpOworCisgICAgICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdl
IGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQg
cGFpbnRpbmcKKyAgICAgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4u
CisgICAgICAgIGlmICghbV9sYXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBh
aW50aW5nKSB7CisgICAgICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZh
bHNlOworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUodGhpcywgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBMYXllclJlbmRlcmVyIHJlY3JlYXRpb24uLi4gaW4gdGhlIGZ1dHVyZSwgZG8gYSBmdWxs
IGRlbGV0ZS1hbmQtcmVjcmVhdGUuCisKKyAgICAgICAgLy8gR2V0IHRoZSBpbXBsSGFjayBmcm9t
IHRoZSBwcmV2aW91cyBtX2xheWVyUmVuZGVyZXIKKyAgICAgICAgaW1wbEhhY2sgPSBtX2xheWVy
UmVuZGVyZXItPm93bmVyKCk7CisKKyAgICAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbGF5ZXJSZW5kZXJlcjsKKyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKGltcGxIYWNrLCBjb250ZXh0KTsKKworICAgICAgICAvLyBJZiBjcmVh
dGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBk
aXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCisgICAgICAgIC8vIGFuZCB0cnkgY3JlYXRpbmcg
dGhlIHJlbmRlcmVyIGFnYWluLgorICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0
aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgICAgIG1fc2V0dGluZ3MuYWNjZWxl
cmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobGF5ZXJSZW5kZXJlcikKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPnNldExh
eWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAg
ICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CisgICAgfQorICAgIHJldHVybiAh
IW1fbGF5ZXJSZW5kZXJlcjsKK30KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCkt
PnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwot
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXAoKQor
eworICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJu
IDAsIGluIHRoYXQgY2FzZSBmYWxsIGJhY2sgdG8gc29mdHdhcmUuCisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250
ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8g
QWN0dWFsbHkgY3JlYXRlIHRoZSByZW5kZXJlci4KKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhp
cywgY29udGV4dCk7CisKKyAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNr
ZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5n
CisgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisgICAgaWYgKG1f
c2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFsYXllclJlbmRlcmVyKSB7CisgICAgICAg
IG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIGxheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKKyAg
ICB9CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVy
ZXItPmNvbnRleHQoKTsKLSAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SOwotICAgIH0gZWxzZQotICAgICAgICAqY29udGV4dExvc3QgPSBmYWxzZTsKLSAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcjsKIH0KIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGM0MTFjY2M3MzU1NGYx
ZGQzMmJjY2UyZTE1ZTQ4ZGJlY2FjNGE4OGUuLmU3ZDVjNjQxMDg1OTI3YjcxYTUyZTc5MjQ2NDBh
ZTc0NmE4YmEyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1
LDE0ICsyNSwxNSBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NM
YXllclRyZWVIb3N0SW1wbF9oCiAKLSNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDb21wbGV0aW9u
RXZlbnQ7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07CitzdHJ1Y3QgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllczsKIAogLy8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVjdHVyZSBm
b3IgYSBDQ0xheWVyVHJlZUhvc3RJbXBsCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
ICB7CkBAIC00OCwzMyArNDksNDcgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRl
KENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJv
bWl1bT4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0
ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3Mp
OwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogCisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIg
PyBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSA6IDA7IH0KKworICAgIHZvaWQgY29tcG9zaXRl
QW5kUmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKICAgICB2b2lk
IGRyYXdMYXllcnMoKTsKIAorICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgaW50
IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCisgICAgYm9v
bCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9s
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzLT5jYXBhYmlsaXRpZXMoKTsgfQorCisgICAgdm9pZCBw
cmVzZW50KCk7CisKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAgICAgdm9pZCBzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpOwogCiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zb3VyY2VGcmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVO
dW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJl
cjsgfQogCisKIHByb3RlY3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwotICAg
IHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGNv
bnRleHRMb3N0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncyk7CiAgICAgaW50IG1fc291cmNlRnJh
bWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZhdGU6CisgICAgdm9pZCBk
cmF3TGF5ZXJzKCk7CisKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsK
ICAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBtX2xheWVyUmVuZGVyZXI7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CiAgICAgYm9vbCBtX3JlZHJhd1BlbmRpbmc7CisgICAg
Q0NTZXR0aW5ncyBtX3NldHRpbmdzOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDlh
MTdmMDJjZjNhYWM2MWZjMTRjODFjMjc0NGY1YjY1NzVkNTE4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAi
Y2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NU
aHJlYWQqIGNjVGhyZWFkOworaW50IG51bVByb3hpZXMgPSAwOworfQorCitQYXNzT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eShsYXllclRyZWVIb3N0
KSk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhv
c3RJbXBsQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAg
OiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVl
SG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVh
ZCkKKyAgICAgICAgY2NUaHJlYWQgPSBsYXllclRyZWVIb3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKK30KKworCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxDQ1RocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJ
bXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29t
cGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKworQ0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eSgpCit7
CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXll
clRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJv
eGllcy0tOworICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7
CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5
ZXJUcmVlSG9zdEltcGw7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAg
IGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVl
SG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQp
KTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGUgaW1w
bC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVh
ZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFj
Y2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEFTU0VS
VCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQu
CisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
Q0NUaHJlYWRQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCit7CisgICAgQVNT
RVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKSk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25D
Q1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYg
KG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3Jl
YXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5
OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQi
LCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5h
bmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1pdFBl
bmRpbmcgPSBmYWxzZTsKKworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNv
bW1pdHRlciA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXQoKTsKKworICAgIC8vIEJsb2NraW5n
IGNhbGwgdG8gQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21taXQK
KyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5n
ZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxl
dGlvbi53YWl0KCk7CisKKyAgICBjb21taXR0ZXIuY2xlYXIoKTsKKworICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIqIGNv
bW1pdHRlciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJUKGlz
SW1wbFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIGNvbW1pdHRlci0+Y29tbWl0
KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0
Q29tcGxldGUoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQor
ICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25D
Q1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFk
KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LT5zZXROZWVkc1JlZHJhdygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVh
ZFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
Cit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpp
bml0SW1wbE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVy
VHJlZUhvc3RJbXBsKHRoaXMpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMjg5MDhhYzE0YzkxZGZjMzEyODEyYzRkNjU5ZjZiZTRh
MjI1MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oCkBAIC0wLDAg
KzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5X2gKKworI2luY2x1ZGUgImNjL0ND
Q29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0KiBob3N0KTsKKworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVh
ZFByb3h5KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNSZWRyYXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOyAvLyBNdXN0IGJl
IGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7
IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhyZWFkCisgICAgdmlydHVh
bCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVy
VHJlZUhvc3QqKTsKKyAgICBDQ0xheWVyVHJlZUhvc3QqIGhvc3QoKSBjb25zdCB7IHJldHVybiBt
X2xheWVyVHJlZUhvc3Q7IH0KKworICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKKyAgICB2
b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCisgICAg
Ly8gQ2FsbGVkIG9uIENDVGhyZWFkCisgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50Kik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsK
KyAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgbGF5ZXJUcmVl
SG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIC8vIFVzZWQg
b24gbWFpbi10aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKworICAgIC8v
IEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xh
eWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQg
b24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgorICAgIE93blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1h
aW5UaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAyODQxZTI1NDU4ODc0NTQzNDJhY2NjZjlk
NjEzZDdiOTJlYmFhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHku
Y3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKworI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRl
ICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkKCkgeworcHVibGlj
OgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRp
ZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNl
KTsKKyNlbmRpZgorICAgIH0KK307CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Q2xpZW50KiBjbGllbnQpCisgICAgOiBtX2NsaWVudChsYXllclRyZWVIb3N0KQorICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0KGZhbHNlKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRo
cmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxNYWluVGhyZWFkUHJveHk6OnN0YXJ0KCkKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRy
ZWVIb3N0SW1wbCgpOworfQorCitDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBs
TWFpblRocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8v
IG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tcG9z
aXRlQW5kUmVhZGJhY2socGl4ZWxzLCByZWN0KTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIEND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIHJl
dHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKK30KKworYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdElt
cGw7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIoTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFj
aywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
JiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9j
b21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0
aGlzLCAwKTsKKyAgICAvL21fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgLy8KK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvL2NjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxNYWluVGhyZWFkUHJveHk6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIFNj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRWaXNp
YmxlKHZpc2libGUpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRo
cmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIH0KKyAgICBtX2NsaWVudCA9IDA7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRl
bHkoKQoreworICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKKyAgICAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVy
VHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICAgICAgYm9vbCBvayA9ICFtX2xheWVyVHJlZUhvc3RJ
bXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihOVUxMLCB0aGlzKTsKKyAgICAgICAgbV9jbGll
bnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CisgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cisg
ICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkgeworICAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsKKyAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5v
dCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNl
IEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgICAv
LyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVy
dGluZyBvdXIKKyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3
ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJlciwg
cmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24K
KyAgICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICAg
IG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
TWFpblRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDE0NTMyZTc3MTExOThiZDZkNzM3OTRhZDQxYjNlMzE1ZDMxMzk0OQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCisjZGVmaW5lIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
KTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKwor
ICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1
YWwgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3Qm
IHJlY3QpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlzU3Rh
cnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihM
YXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wgdmlzaWJs
ZSk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsK
KworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQK
KyAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOworICAgIHZp
cnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRXYXNMb3N0KCk7CisKKyAgICAvLyBT
cGVjaWFsIGNhc2UgZnVuY3Rpb25zLgorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisg
ICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworCisg
ICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHlDbGllbnQqIG1fY2xpZW50OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQs
IGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93
bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsK
KworICAgIC8vIFdoZXRoZXIgdGhlIGNvbnRleHQgaXMgbG9zdC4uLgorICAgIGJvb2wgbV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCmluZGV4IGI5OWRiOTc3ZTlmYWMwYzg1
MzYxMDY1MzVlYzAyYTk0OGUyOTBjNTMuLmQ4OTRhMWJjNTgxYTRjMTQ5MWQ1Zjg0NzgxZWE5ZGMz
NWZkNGJlN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmNwcApAQCAtMzYsMjAwICszNiwyNiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci1DQ1RocmVhZCogY2NUaHJlYWQ7Ci1pbnQgbnVt
UHJveGllcyA9IDA7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKLSAgICA6IG1fY29t
bWl0UGVuZGluZyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgbnVtUHJveGllcysrOwotICAgIGlmICghY2NUaHJlYWQpCi0gICAgICAgIGNjVGhyZWFkID0g
Q0NUaHJlYWQ6OmNyZWF0ZSgpLmxlYWtQdHIoKTsKLX0KLQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c3RhcnQoKQotewotICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4K
LSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5p
dEltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwot
ICAgIGNvbXBsZXRpb24ud2FpdCgpOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1w
bCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgot
Ci0gICAgbnVtUHJveGllcy0tOwotICAgIGlmICghbnVtUHJveGllcykgewotICAgICAgICBkZWxl
dGUgY2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X2xheWVyVHJlZUhvc3RJbXBsOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXci
LCB0aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkp
OwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCgpCi17Ci0gICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRo
ZSBpbXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKLQotICAgIEFTU0VSVCgh
bV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCi0g
ICAgbV9sYXllclRyZWVIb3N0ID0gMDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJ
bXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBDQ01h
aW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsK
LX0KLQogI2lmbmRlZiBOREVCVUcKIGJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01h
aW5UaHJlYWQoKQogewogICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwogfQogCi0jaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omlz
SW1wbFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+
dGhyZWFkSUQoKTsKLX0KLSNlbHNlCiBuYW1lc3BhY2UgewogYm9vbCBmYWtlSW1wbFRocmVhZCA9
IGZhbHNlOwogfQogCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFk
KCkKIHsKLSAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQ7CisgICAgcmV0dXJuIGZha2VJbXBsVGhy
ZWFkIHx8IGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKIH0KIAogdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkKIHsK
ICAgICBmYWtlSW1wbFRocmVhZCA9IHZhbHVlOwogfQotI2VuZGlmIC8vIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKIAogI2VuZGlmIC8vICFOREVCVUcKIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgewotICAgICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7
Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGlt
ZSk7Ci0gICAgfQotCi0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBPd25QdHI8
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNy
ZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2lu
Q29tbWl0KCk7Ci0KLSAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0g
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KGNvbW1pdHRlci5nZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7
Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci0KLSAgICBjb21taXR0ZXIuY2xlYXIoKTsKLQotICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
KiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmJlZ2luQ29tbWl0KCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9s
YXllclRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0gICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21w
bGV0ZSgpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09u
Q0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+ZHJhd0xheWVycygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRy
ZWVIb3N0SW1wbCk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlz
SW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnNldE5lZWRzUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCi17
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkND
VGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1w
bCh0aGlzKTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAg
QVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7
Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5LmgKaW5kZXggZDAyMDdlNTYxNzYyYWMxZGRmOWRkODc4Mzc4
ZDU0NjM1NmM3ODdiYS4uMWU2YWIyN2VhZjU1NzExZTc2MzM0OWQxZTYwMTI5MDViOTE2YzFmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKQEAgLTMzLDU4
ICszMyw1NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsK
IGNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlDbGllbnQgeworICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkgPSAwOworICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3Vj
Y2VzcykgPSAwOworfTsKIAotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGlj
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgeworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkp
OwogcHVibGljOgogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOwogCi0g
ICAgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcG9zaXRlQW5k
UmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KSA9IDA7CisKKyAgICB2
aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOyAvLyBUZW1wb3JhcnkgaGFj
ayB1bnRpbCB0aGUgc2NoZWR1bGluZyBpbnZlcnNpb24gaXMgY29tcGxldGVkLgorCisgICAgdmly
dHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBp
c1N0YXJ0ZWQoKSBjb25zdCA9IDA7CisKKyAgICAvLyBUaGUgb3duZXJIYWNrIGFyZ3VtZW50IGlz
IHRvIGFsbG93IGludHJvZHVjaW5nIHRoZSBJbXBsUHJveHkgc3ViY2xhc3NlcworICAgIC8vIHdp
dGhvdXQgYWxzbyB0cnlpbmcgdG8gY2hhbmdlIExheWVyUmVuZGVyZXJDaHJvbWl1bSB0byBwb2lu
dCBhdAorICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGwuCisgICAgdmlydHVhbCBib29sIGluaXRp
YWxpemVMYXllclJlbmRlcmVyKExheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOwogCi0gICAg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdCA9IDA7CiAKLSAgICB2b2lkIHN0YXJ0KCk7IC8vIE11
c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCi0gICAgdm9pZCBzdG9wKCk7IC8v
IE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpID0gMDsKIAotICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBj
YWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25D
Q1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUo
Ym9vbCB2aXNpYmxlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7IC8vIE11
c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCiAK
ICNpZm5kZWYgTkRFQlVHCiAgICAgc3RhdGljIGJvb2wgaXNNYWluVGhyZWFkKCk7CiAgICAgc3Rh
dGljIGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LSAgICAvLyBGYWtlIHRocmVhZGVkIGNvbXBvc2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJl
Y3QgdXNhZ2UuCi0gICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgog
I2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkoQ0NMYXllclRyZWVIb3N0Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVl
SG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRl
OgotICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhy
ZWFkCi0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcios
IENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwot
ICAgIHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9p
ZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRz
UmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJl
YWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25s
eS4KLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4g
dGhyZWFkIG9ubHkuCi0gICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAg
ICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVy
aW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworICAgIC8vIENhbGxlZCBieSBDQ0xheWVyVHJlZUhv
c3RJbXBsTWFpblRocmVhZFByb3h5IHRvIG1ha2UgaXNJbXBsVGhyZWFkCisgICAgLy8gcmV0dXJu
IHRydWUuCisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104965</attachid>
            <date>2011-08-23 22:47:00 -0700</date>
            <delta_ts>2011-08-24 19:44:05 -0700</delta_ts>
            <desc>Splitting out committing.</desc>
            <filename>bug-66807-20110823224659.patch</filename>
            <type>text/plain</type>
            <size>90058</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM2ODcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMzhhNGIzMTM0MjRmNzI4
MjVkZTcwMDA3ZWExYmU4N2I1ZjhiYzRjLi4wODU0NTU4Yzg0OTVhNmFlNzQxMjI3NTJjMTZiOWVi
NzRmMzlmZTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMjMgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNl
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXll
clJlbmRlcmVyIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6U2NvcGVk
U2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTZXRJbXBsVGhyZWFkOjp+
U2NvcGVkU2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJ
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaDoKKwogMjAxMS0wOC0yMyAgU2NvdHQgQnllciAgPHNjb3R0
YnllckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU2Nyb2xsQW5pbWF0b3JOb25lIGNvYXN0aW5n
IGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggNWJiYzhhYjRiMzljZTU0ZmRjYmUw
M2Y5MWIyOTEwOGE4YzQ0MGU0My4uYmMwYmU0NGRiZDZiODkxOGVkMGQwN2U1NTEwN2RiOTgxZmRm
ODFjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzUzMyw2ICszNTMzLDEwIEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5jcHAnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU5YzJjY2ExZDkyY2Qz
YWVmNjNhNDcwMWUwNWJkMWZiYWFjYjg0ZTcuLjc4MWI5MDg3NTgwNWM5ZTY1YTQ5MTk3NTY3YzE2
MzkxNjZjY2QyMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEy
MCw2ICsxMjAsOCBAQCBib29sIENvbnRlbnRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBj
b25zdAogCiB2b2lkIENvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihj
b25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisjaWYgMCAvLyBGSVhNRSBCRUZPUkUgTEFORElORwogI2lmICFVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKGhvc3QtPnNldHRpbmdzKCkuYWNjZWxlcmF0
ZVBhaW50aW5nKSB7CkBAIC0xMjksNyArMTMxLDggQEAgdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogI2Vu
ZGlmIC8vIFNLSUEKICNlbmRpZiAvLyAhVEhSRUFERURfQ09NUE9TSVRJTkcKIAotICAgIG1fdGV4
dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExh
eWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIo
KSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CisjZW5kaWYKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhl
YzU3ODE5ZDJjYzViYy4uNzFiYzBiNmI5ZGI2NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9v
bCBJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VM
YXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3Qq
IGhvc3QpCiB7Ci0gICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRl
cjo6Y3JlYXRlKGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVV
cGRhdGVyID0gSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYTZmYjI1ODAzYWU3MDcwZjExNWRjMGM0NjUwNzNh
OGVjODdhOWE5NS4uNzc0Y2EyN2JjZTJmNzRmYWQ3ZDZjN2E1YjI1MzY4Y2RlN2QyNWM1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAj
aW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgog
I2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAt
NDgzLDE0ICs0ODQsMTggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUo
KQogICAgICAgICAvLyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBp
biB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAyNDsKICAgICAgICAgbV9za2lh
Q29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhU
ZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nQWNjZWxlcmF0
ZWRQYWludGluZyA9IHRydWU7CiAgICAgfQogI2VuZGlmCiAKICAgICBXZWJDb3JlOjpFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBtX2Nv
bnRleHRTdXBwb3J0c01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9t
YXBfc3ViIik7Ci0gICAgaWYgKG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQorICAgIG1fY2FwYWJp
bGl0aWVzLnVzaW5nTWFwU3ViID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21h
cF9zdWIiKTsKKyAgICBpZiAobV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWIpCiAgICAgICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKIAorICAgIG1f
Y2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplID0gbWF4VGV4dHVyZVNpemUoKTsKKyAgICBtX2Nh
cGFiaWxpdGllcy5iZXN0VGV4dHVyZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJl
Rm9ybWF0KG1fY29udGV4dC5nZXQoKSk7CisKICAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTUzLDEzICs1NTgsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKICAgICAvLyBSZW5kZXJXaWRn
ZXQuCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwog
Ci0gICAgLy8gUmVjaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxheWVyLiBUaGlzIG1h
eSBiZWNvbWUgbnVsbCBpZgotICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVybmVkIG9mZiBkdXJp
bmcgYSBwYWludCBvcGVyYXRpb24uCi0gICAgaWYgKCFyb290TGF5ZXIoKSkgewotICAgICAgICBt
X3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
dXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOwogfQogCkBAIC01Njgs
MTIgKzU2Niw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAg
ICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICB7Ci0gICAgICAgIFRS
QUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJlZXMiLCB0aGlz
LCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIG1fcm9vdENDTGF5ZXJJ
bXBsLmdldCgpKTsKLSAgICB9Ci0KLQogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
LT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcyAtIG1fY29u
dGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwogICAgIGRyYXdM
YXllcnNJbnRlcm5hbCgpOwogCkBAIC03MTgsNyArNzEwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRS
QUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsK
LSAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgp
OworICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVySW1wbCgpLmdldCgp
OwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5y
ZW5kZXJTdXJmYWNlKCkpCkBAIC05MzQsNyArOTI2LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAK
IE1hbmFnZWRUZXh0dXJlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVy
VGV4dHVyZSgpCiB7Ci0gICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYm
IG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+
Y29udGVudHNUZXh0dXJlKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9m
ZnNjcmVlbiAmJiByb290TGF5ZXJJbXBsKCkgPyByb290TGF5ZXJJbXBsKCktPnJlbmRlclN1cmZh
Y2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAppbmRleCA5NTU4ZmExZTYwYTA0MDdhZjE5YTdjOGZiNTM2MTgyZDI4OGEx
M2M0Li43NmU2NGU1NGJiZWZjNzFkYTliODVmODI3NjJiNDIwNjQ1NDQzZmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNj
L0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw2ICs2
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNs
YXNzIENDTGF5ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OyAvLyBUT0RPOiByZW1vdmUg
cG9pbnRlcnMgdG8gdGhpcwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwogY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKQEAgLTc3LDYgKzc5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCiAg
ICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5z
ZXR0aW5ncygpOyB9CisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgY2FwYWJp
bGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KIAogICAgIENDTGF5ZXJU
cmVlSG9zdCogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CiAgICAgY29uc3QgQ0NMYXllclRy
ZWVIb3N0KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KQEAgLTg0LDE0ICs4Nywx
NyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9v
d25lci0+cm9vdExheWVyKCk7IH0KICAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCisgICAgQ0NMYXllcklt
cGwqIHJvb3RMYXllckltcGwoKSB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0K
KyAgICBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQorCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKLSAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dFN1cHBvcnRzTWFwU3ViOyB9CisgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIo
KSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YjsgfQogCiAjaWYgVVNF
KFNLSUEpCiAgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpIHsgcmV0dXJuIG1fc2tpYUNvbnRl
eHQuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkg
eyByZXR1cm4gbV9vd25lci0+dmlld3BvcnRTaXplKCk7IH0KKyAgICBjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7IH0KICAg
ICBpbnQgdmlld3BvcnRXaWR0aCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCk7IH0K
ICAgICBpbnQgdmlld3BvcnRIZWlnaHQoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS5oZWlnaHQo
KTsgfQogCkBAIC0xNTYsOSArMTYyLDYgQEAgcHVibGljOgogICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhN
RTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCB3aGVu
IHRoYXQgY2xhc3MgZXhpc3RzLgotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290Q0NMYXll
ckltcGw7Ci0KICAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCkBA
IC0xOTAsOCArMTkzLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKIAotICAgIC8vIEZJWE1F
OiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgLy8gRklYTUU6IFJlbW92
ZSB0aGlzCiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX293bmVyOworICAgIENDTGF5ZXJUcmVlSG9z
dEltcGwqIG1fb3duZXJJbXBsOworCisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2Nh
cGFiaWxpdGllczsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJp
eDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKQEAgLTIzMiw4ICsy
MzgsNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxHckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CiAj
ZW5kaWYKIAotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBDQ1JlbmRl
clN1cmZhY2UqIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVyIG1f
bGF5ZXJTb3J0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzZTEwMmVj
ODY1Njk1ZjgzYmI3MDgxZTNiZmY2MTkxYmJhZDllMmMzLi5hNzllYTEyYzRkNzRjMTkxZWM0ZDYw
N2ViZmQ0OGFkNWUzN2RmODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTE0MSw3ICsxNDEsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAKICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0
KTsKIAotICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7Cisg
ICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJl
c3RUZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0
ZXIoKS0+b3JpZW50YXRpb24oKTsKICAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVV
cGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGls
ZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKaW5kZXggOTdlNzQyY2MxODI4Mjc4YzZiNTJlMjk2YjgwZGU5N2I0YWExODA1YS4uNGRm
MzAwZjY4NmZiYzg5M2MwMTU4MDYwZGZkNjE4Mjk0N2ZhYjYwYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCkBAIC0zMCwxMCArMzAsMTEgQEAKICNpbmNsdWRlICJMYXllclBhaW50
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQ2LDEwICs0Nyw3IEBAIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBDQ0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVuCiB9CiAKIEND
TGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xp
ZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKLSAgICA6IG1fcmVjcmVhdGluZ0dyYXBo
aWNzQ29udGV4dChmYWxzZSkKLSAgICAsIG1fbWF4VGV4dHVyZVNpemUoMCkKLSAgICAsIG1fY29u
dGV4dFN1cHBvcnRzTWFwU3ViKGZhbHNlKQotICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCisgICAg
OiBtX2FuaW1hdGluZyhmYWxzZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJh
bWVOdW1iZXIoMCkKICAgICAsIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KE5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdDo6Y3JlYXRlKG1fY2xpZW50LT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCkp
KQpAQCAtNTksMTUgKzU3LDIzIEBAIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KEND
TGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzCiAKIGJvb2wgQ0NM
YXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBjcmVh
dGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisjaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlmIChmYWxzZSkgLy8gVE9ETzogbWFrZSB0aHJlYWQg
YSBydW50aW1lIGZsYWcgaW4gQ0NTZXR0aW5ncworICAgICAgICBtX3Byb3h5ID0gQ0NMYXllclRy
ZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBlbHNlCisgICAgICAg
IG1fcHJveHkgPSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpjcmVhdGUodGhp
cyk7CisjZWxzZQorICAgIG1fcHJveHkgPSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFBy
b3h5OjpjcmVhdGUodGhpcyk7CisjZW5kaWYKKyAgICBtX3Byb3h5LT5zdGFydCgpOworCisgICAg
Ly8gQ3JlYXRlIHRoZSByZW5kZXJlci4uLgorICAgIGlmICghbV9wcm94eS0+aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1F
OiBJbiB0aGUgdGhyZWFkZWQgY2FzZSwgdGhlc2UgdmFsdWVzIHdpbGwgbmVlZCB0byBiZSBpbml0
aWFsaXplZAotICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuIG1fbGF5ZXJSZW5kZXJlci4K
LSAgICBtX21heFRleHR1cmVTaXplID0gbV9sYXllclJlbmRlcmVyLT5tYXhUZXh0dXJlU2l6ZSgp
OwotICAgIG1fYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZv
cm1hdChtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHRTdXBwb3J0c01hcFN1YigpOworICAgIC8v
IFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNr
IGZyb20gdGhlIHJlbmRlcmVyLgorICAgIGlmKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5n
ICYmICFtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdBY2NlbGVyYXRl
ZFBhaW50aW5nKQorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNl
OwogCiAgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CiAjaWZuZGVm
IE5ERUJVRwpAQCAtNzcsMTIgKzgzLDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxp
emUoKQogCiAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5ncmFwaGljc0xheWVyKCkpOwogCi0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
Ci0gICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwot
ICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQoKSk7CisgICAgLy8gV2UgY2hhbmdlZCB0aGUg
cm9vdCBsYXllci4gVGVsbCB0aGUgcHJveHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJv
eHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVl
OwogfQpAQCAtOTAsMTAgKzkyLDE1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXpl
KCkKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiB7CiAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOwotI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKICAgICBtX3Byb3h5LT5zdG9wKCk7CiAgICAgbV9wcm94
eS5jbGVhcigpOwotI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5k
TGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7
CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1f
YW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1p
dCgpCkBAIC0xMDUsNDcgKzExMiw0NCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29t
cGxldGUoKQogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorUGFzc093blB0cjxDQ1Ro
cmVhZD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsKLSAgICBt
X2FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50
LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCit7
CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiB9
CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQogewotICAgIC8vIEZJWE1FOiBvbmx5IGNh
bGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCi0gICAgcmV0dXJuIG51
bGxwdHI7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKCk7CiB9
CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVh
dGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCiB7
Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXllclJlbmRl
cmVyKTsKLSAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwgcmVu
ZGVyZXIpOworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY2xpZW50LCBt
X3NldHRpbmdzKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhp
Y3NDb250ZXh0KGJvb2wgc3VjY2VzcykKK3sKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFw
aGljc0NvbnRleHQoc3VjY2Vzcyk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJl
ZUhvc3Q6OmNvbnRleHQoKQogewotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQo
KTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOwogfQogCi12b2lkIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBp
eGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIGNv
bXBvc2l0ZShmYWxzZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVs
cyhwaXhlbHMsIHJlY3QpOwotI2VuZGlmCisgICAgcmV0dXJuIG1fcHJveHktPmNvbXBvc2l0ZUFu
ZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5p
c2hBbGxSZW5kZXJpbmcoKQogewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAv
LyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgbV9sYXllclJlbmRl
cmVyLT5maW5pc2goKTsKLSNlbmRpZgorICAgIG1fcHJveHktPmZpbmlzaEFsbFJlbmRlcmluZygp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQpAQCAtMTUzLDYgKzE1NywxMSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJl
Y3QpOwogfQogCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhv
c3Q6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
b3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQpAQCAtMTc3LDExICsxODYsOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9v
dExheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9ub25D
b21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgIGlmIChs
YXllcikgeworICAgIGlmIChsYXllcikKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QtPmdyYXBoaWNzTGF5ZXIoKS0+YWRkQ2hpbGQobGF5ZXIpOwotICAgICAgICBsYXllci0+cGxh
dGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7Ci0g
ICAgfQotCiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50
UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpAQCAtMTkyLDEwNiArMTk4LDI2IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0
IEludFNpemUmIGNvCiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFNjcm9sbFBv
c2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+
Z3JhcGhpY3NMYXllcigpLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7CiAKLSAgICBpZiAodmlzaWJs
ZVJlY3RDaGFuZ2VkKSB7CisgICAgaWYgKHZpc2libGVSZWN0Q2hhbmdlZCkKICAgICAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgICAg
ICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT52aWV3
cG9ydENoYW5nZWQoKTsKLSAgICB9CiAKICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwog
fQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0j
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBpZiAoIXZpc2libGUpCi0gICAgICAg
IG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5
LT5zZXRWaXNpYmxlKGZhbHNlKTsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJSZW5kZXJlcigpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKIHsKLSAgICAvLyBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgZmFsbCBi
YWNrIHRvIHNvZnR3YXJlLgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFjdHVhbGx5IGNyZWF0ZSB0aGUgcmVu
ZGVyZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotCi0gICAgLy8g
SWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBhY2NlbGVyYXRlZCBwYWlu
dGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZwotICAgIC8vIGFuZCB0cnkgY3JlYXRp
bmcgdGhlIHJlbmRlcmVyIGFnYWluLgotICAgIGlmIChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWlu
dGluZyAmJiAhbGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQ
YWludGluZyA9IGZhbHNlOwotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxheWVy
UmVuZGVyZXI7CisgICAgbV9wcm94eS0+bG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CiB9CiAKICNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29t
cG9zaXRlKCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzZXRJbXBsVGhyZWFkKHRydWUpOwotI2VuZGlmCi0gICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJl
cik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKLSAgICBtX2xheWVyUmVu
ZGVyZXItPmRyYXdMYXllcnMoKTsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKLSNlbmRpZgotfQotCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogewotICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSIsIHRoaXMsIDApOwotCi0gICAgaWYgKG1fcmVjcmVh
dGluZ0dyYXBoaWNzQ29udGV4dCkgewotICAgICAgICAvLyByZWFsbG9jYXRlUmVuZGVyZXIgd2ls
bCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBpdCBzdWNjZWVkZWQKLSAgICAgICAg
Ly8gaW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4KLSAgICAgICAgcmVhbGxvY2F0ZVJlbmRlcmVy
KCk7Ci0gICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IGZhbHNlOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRG8gbm90IGNvbXBvc2l0ZSBpZiB0aGUgY29tcG9z
aXRvciBjb250ZXh0IGlzIGFscmVhZHkgbG9zdC4KLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlci0+
aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAgICBkb0NvbXBvc2l0ZSgpOwotCi0g
ICAgICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+
cHJlc2VudCgpOwotICAgIH0KLQotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRv
ckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRl
eHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCi0gICAgICAgIC8vIGRp
ZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6T25FcnJvck1lc3NhZ2Ugd2lsbCBv
bmx5IGJlCi0gICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIG1l
c3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgotICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBo
ZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKLSAgICAgICAg
Ly8gcmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0aGUgbmV4dCBtZXNzYWdlIGxv
b3AgaXRlcmF0aW9uCi0gICAgICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVwYWludCB5ZXQgYWdhaW4u
Ci0gICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Ci0gICAgICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0gICAgfQotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKLXsKLSAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0Nv
bnRleHQgPSB0cnVlOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6cmVhbGxvY2F0ZVJlbmRl
cmVyKCkKLXsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVy
ID0gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwotICAgIGlmICghbGF5ZXJSZW5kZXJlcikgewotICAg
ICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF5ZXJSZW5kZXJlci0+c2V0TGF5ZXJSZW5kZXJlclJl
Y3Vyc2l2ZShtX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigpKTsKLSAgICBtX2xheWVyUmVuZGVy
ZXIgPSBsYXllclJlbmRlcmVyOwotCi0gICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KHRydWUpOworICAgIHN0YXRpY19jYXN0PENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhy
ZWFkUHJveHkqPihtX3Byb3h5LmdldCgpKS0+Y29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKIH0KICNl
bmRpZiAvLyAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5oCmluZGV4IGZkYTcyMjBmNmEyZmY1NTlmZDYwYzFjYTlmZmU1ZDY5ZGNlZTMyNDEuLjRj
Mzk2ZWZlMzIyYTc5ZTE4OTFjMmNhMDg3NWFiNDU1NTBhZDZiYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oCkBAIC03MywxNyArNzMsMzQgQEAgc3RydWN0IENDU2V0dGluZ3MgewogICAg
IGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwogfTsKIAotY2xhc3MgQ0NMYXllclRyZWVIb3N0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CisvLyBQcm92aWRlcyBpbmZv
cm1hdGlvbiBvbiBhbiBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBD
Q0xheWVyVHJlZUhvc3QKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkKKyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgw
KQorICAgICAgICAsIHVzaW5nTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0
ZWRQYWludGluZyhmYWxzZSkKKyAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAg
IEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAg
Ym9vbCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOwor
fTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRy
ZWVIb3N0PiwgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Q2xpZW50IHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RD
bGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0
KCk7CiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlDbGllbnQgaW1wbGVtZW50YXRp
b24KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRp
bWUpOwogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
b21taXRDb21wbGV0ZSgpOwotCisgICAgdmlydHVhbCBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVh
dGVDb21wb3NpdG9yVGhyZWFkKCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgdmlydHVhbCBQYXNz
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQqKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAKICAg
ICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CiAgICAgdm9p
ZCBzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9hbmltYXRpbmcgPSBhbmltYXRpbmc7
IH0gLy8gQ2FuIGJlIHJlbW92ZWQgd2hlbiBub24tdGhyZWFkZWQgc2NoZWR1bGluZyBtb3ZlcyBp
bnNpZGUuCkBAIC05Miw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhl
bHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKIApAQCAtMTAwLDYgKzExNyw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAorICAgIGNvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsK
KyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApAQCAtMTE1LDIx
ICsxMzUsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKLSAgICAv
LyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KLSNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgY29tcG9zaXRlKGJvb2wgZmlu
aXNoKTsKLQotICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7Ci0KLSAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVu
ZGVyZXIuZ2V0KCk7IH0KLSNlbmRpZgotCiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBu
b25Db21wb3NpdGVkQ29udGVudEhvc3QoKSBjb25zdCB7IHJldHVybiBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC5nZXQoKTsgfQogCi0gICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQotICAgIGludCBtYXhUZXh0
dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KLSAgICBHQzNEZW51
bSBiZXN0VGV4dHVyZUZvcm1hdCgpIHsgcmV0dXJuIG1fYmVzdFRleHR1cmVGb3JtYXQ7IH0KLQog
cHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBj
b25zdCBDQ1NldHRpbmdzJik7CiAKQEAgLTEzOCwxOSArMTQ1LDYgQEAgcHJpdmF0ZToKIAogICAg
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGVMYXllclJlbmRlcmVyKCk7
CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcg
cGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgZG9Db21wb3Np
dGUoKTsKLSAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotCi0gICAgYm9vbCBtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bV9sYXllclJlbmRlcmVyOwotI2VuZGlmCi0KLSAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKLSAg
ICBHQzNEZW51bSBtX2Jlc3RUZXh0dXJlRm9ybWF0OwotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9y
dHNNYXBTdWI7Ci0KICAgICBib29sIG1fYW5pbWF0aW5nOwogCiAgICAgQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
aXR0ZXIuY3BwCmluZGV4IDcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIwNTg2OTliZWEu
LjcxZmY4OTcyMzgyZDE2YzI2OTMwZjI3MTU5ZTZjMGY0Mzc4N2Y2MzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcApAQCAtMjYsNiArMjYsMTAgQEAK
IAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogCisjaW5jbHVkZSAi
R3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJD
Q0xheWVySW1wbC5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAKQEAg
LTM4LDcgKzQyLDIxIEBAIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyOjpjb21taXQoQ0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKIHsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
Ojpjb21taXQiLCB0aGlzLCAwKTsKICAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIo
aG9zdC0+ZnJhbWVOdW1iZXIoKSk7CisgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KGhvc3QtPnZp
ZXdwb3J0U2l6ZSgpKTsKKworICAgIHsKKyAgICAgICAgaWYgKGhvc3QtPnJvb3RMYXllcigpLT5w
bGF0Zm9ybUxheWVyKCktPmxheWVyUmVuZGVyZXIoKSAhPSBob3N0SW1wbC0+bGF5ZXJSZW5kZXJl
cigpKQorICAgICAgICAgICAgaG9zdC0+cm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+c2V0
TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpKTsKKworICAg
ICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0
KCkpKTsKKyAgICB9CisKKyAgICAvLyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3Qg
bGF5ZXIuIFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCisgICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0
dXJuZWQgb2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KKyAgICBpZiAoIWhvc3QtPnJvb3RM
YXllcigpKQorICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKG51bGxwdHIpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCmluZGV4IGJjMzE4
YTRhNzE0MjMyZDMxODRkMmZlZDRhZDgwOTUxNzU4M2NjOTkuLjZlNjMyMTU0Y2M2ZGVmYjMxNmVm
ODFjMTVhZGM0M2YzNTAwOGZjOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiAKLS8vIEZJWE1F
OiBtZXJnZSBpbiBUcmVlU3luY2hyb25pemVyIGNvZGUgaW50byBoZXJlCiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcik7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCmluZGV4IDRlMmQxYjg0M2MxODMyY2ZhZmExNDM1NDg2MmNiZmExNTM4NjY5YWUuLjQ3
OTM0NmUzOWQ2NmFmNzBjZjJhODU0Mjk1NjViY2I2ODA4YTE2ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zOCwxOCArMzgsMTggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK1Bhc3NPd25QdHI8Q0NMYXll
clRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVyZXIp
KTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCBz
ZXR0aW5ncykpOwogfQogCi1DQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBs
KENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKQogICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJh
bWVOdW1iZXIoMCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fY29tbWl0UGVuZGlu
ZyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcihyZW5kZXJlcikKICAgICAsIG1fcmVkcmF3
UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiB7CiB9CiAKQEAgLTY4
LDM0ICs2OCw1NyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCkK
ICAgICBzZXROZWVkc1JlZHJhdygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnMoKQorR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRl
eHQoKQogewotICAgIC8vIElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBUaGlz
IGlzIGEgdGVtcG9yYXJ5IHJlc3RyaWN0aW9uIHRoYXQKLSAgICAvLyBpcyBuZWNlc3NhcnkgYmVj
YXVzZSBkcmF3TGF5ZXJzIGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0aGUg
bWFpbiB0aHJlYWQuCi0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOwor
ICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIgPyBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSA6
IDA7Cit9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CiAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsK
LSAgICBBU1NFUlQobV9yZWRyYXdQZW5kaW5nKTsKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
ICYmIG1fcmVkcmF3UGVuZGluZyk7CiAgICAgbV9yZWRyYXdQZW5kaW5nID0gZmFsc2U7CiAKLSAg
ICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
QW5kUHJlc2VudCIsIHRoaXMsIDApOwotICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOwotICAgICAgICBib29sIGNvbnRleHRMb3N0OwotICAgICAgICBDQ01haW5UaHJlYWQ6OnBv
c3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsOjpk
cmF3TGF5ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29udGV4dExvc3QpKSk7Ci0gICAgICAgIGNvbXBs
ZXRpb24ud2FpdCgpOwotCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIg
bWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRz
Li4uXQotCi0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0Ci0gICAgICAgIGlm
IChjb250ZXh0TG9zdCkKLSAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1J
bXBsIGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOworICAgIGlmIChtX2xheWVy
UmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKSB7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+dXBkYXRlTGF5ZXJzKCk7CisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygp
OwogICAgIH0KIAogICAgICsrbV9mcmFtZU51bWJlcjsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+Zmlu
aXNoKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aXNDb250ZXh0TG9zdCgpCit7
CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJl
ci0+aXNDb250ZXh0TG9zdCgpOworfQorCitMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
ICYmICFpc0NvbnRleHRMb3N0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVy
UGl4ZWxzKHBpeGVscywgcmVjdCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQoreworICAgIG1fcm9vdExh
eWVySW1wbCA9IGxheWVyOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKQEAgLTExNiwxOSArMTM5LDgw
IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQogICAgIG1fY2xp
ZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dFZpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNl
VGV4dHVyZXMoKTsKK30KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RM
YXllcigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1Jl
ZjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK3sKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJl
cikgeworICAgICAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhh
Y2ssIGNvbnRleHQpOworCisgICAgICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhh
ZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFp
bnRpbmcKKyAgICAgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisg
ICAgICAgIGlmICghbV9sYXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50
aW5nKSB7CisgICAgICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNl
OworICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUodGhpcywgY29udGV4dCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBMYXllclJlbmRlcmVyIHJlY3JlYXRpb24uLi4gaW4gdGhlIGZ1dHVyZSwgZG8gYSBmdWxsIGRl
bGV0ZS1hbmQtcmVjcmVhdGUuCisKKyAgICAgICAgLy8gR2V0IHRoZSBpbXBsSGFjayBmcm9tIHRo
ZSBwcmV2aW91cyBtX2xheWVyUmVuZGVyZXIKKyAgICAgICAgaW1wbEhhY2sgPSBtX2xheWVyUmVu
ZGVyZXItPm93bmVyKCk7CisKKyAgICAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bGF5ZXJSZW5kZXJlcjsKKyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKGltcGxIYWNrLCBjb250ZXh0KTsKKworICAgICAgICAvLyBJZiBjcmVhdGlv
biBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNh
YmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCisgICAgICAgIC8vIGFuZCB0cnkgY3JlYXRpbmcgdGhl
IHJlbmRlcmVyIGFnYWluLgorICAgICAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0
ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobGF5ZXJSZW5kZXJlcikKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXItPnNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7CisgICAgICAg
IG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7CisgICAgfQorICAgIHJldHVybiAhIW1f
bGF5ZXJSZW5kZXJlcjsKK30KKworUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IEND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlcCgpCit7CisgICAgLy8gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNl
IGZhbGwgYmFjayB0byBzb2Z0d2FyZS4KKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBBY3R1YWxseSBjcmVhdGUg
dGhlIHJlbmRlcmVyLgorICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVu
ZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKKwor
ICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5
IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KKyAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVy
YXRlUGFpbnRpbmcgJiYgIWxheWVyUmVuZGVyZXIpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2Nl
bGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOworICAgIH0KKworICAgIHJldHVy
biBsYXllclJlbmRlcmVyOworfQogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgICpjb250ZXh0TG9zdCA9IGNv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRleHRM
b3N0ID0gZmFsc2U7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisvLyBGSVhNRTogbW92ZSBh
bGwgdGhpcyBjb2RlIHRvIExUSAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXll
cnMoKQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+dXBkYXRlTGF5ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmll
d3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQoreworICAgIGJvb2wgY2hhbmdlZCA9
IHZpZXdwb3J0U2l6ZSAhPSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBtX3ZpZXdwb3J0U2l6ZSA9IHZp
ZXdwb3J0U2l6ZTsKKyAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT52
aWV3cG9ydENoYW5nZWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oCmluZGV4IGM0MTFjY2M3MzU1NGYxZGQzMmJjY2UyZTE1ZTQ4ZGJlY2FjNGE4OGUuLjBiNThj
YTIwOGQ4NDViNWY2NjUwMzQ4YzA5YzAyMWY0MWQ5NDE0ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDE0ICsyNSwxNSBAQAogI2lmbmRlZiBDQ0xheWVyVHJl
ZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKLSNpbmNsdWRlICJj
Yy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKK2NsYXNzIEND
TGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworc3RydWN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXM7CiAKIC8vIFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1
cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCAgewpAQCAtNDgsMjUgKzQ5LDQ2IEBAIHByb3RlY3RlZDoKIGNsYXNzIENDTGF5ZXJUcmVl
SG9zdEltcGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwp
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmIHNldHRp
bmdzKTsKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsKCk7CiAKICAgICB2aXJ0dWFs
IHZvaWQgYmVnaW5Db21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsK
IAorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKICAgICB2b2lkIGRyYXdMYXll
cnMoKTsKIAorICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgaW50IGZyYW1lTnVt
YmVyKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCisgICAgYm9vbCBpbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCk7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7Cisg
ICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgeyByZXR1cm4gbV9sYXll
clJlbmRlcmVyLmdldCgpOyB9CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworCisgICAgdm9pZCBwcmVzZW50KCk7CisKKyAg
ICB2b2lkIHJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCk7CisKKyAg
ICBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBs
LmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4g
bGF5ZXIpOworCiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKIAorICAgIHZvaWQgc2V0VmlzaWJsZShib29sIHZpc2libGUpOwor
CiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFt
ZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVy
KSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCisgICAgdm9pZCB1cGRh
dGVMYXllcnMoKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplKTsKKyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVy
biBtX3ZpZXdwb3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1w
bChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+KTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqLCBib29sKiBjb250ZXh0TG9zdCk7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpOwogICAgIGlu
dCBtX3NvdXJjZUZyYW1lTnVtYmVyOwogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCkBAIC03NSw2
ICs5Nyw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CiAgICAgUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwogICAgIGJvb2wgbV9yZWRy
YXdQZW5kaW5nOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOworICAg
IENDU2V0dGluZ3MgbV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogfTsK
IAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYTE0OTQ2NzRhNzYzMjEzNmYyOWRjOWRjOWIyYmIy
ZTI3MDgyMjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkuY3BwCkBA
IC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oIgorCisjaW5jbGR1
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5o
IgorI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIHsKK0NDVGhyZWFkKiBjY1RocmVhZDsKK2ludCBudW1Qcm94aWVzID0gMDsKK30KKwor
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IENDTGF5ZXJUcmVlSG9zdEltcGxD
Q1RocmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBjbGllbnQpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eShjbGllbnQp
KTsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OkNDTGF5ZXJUcmVlSG9z
dEltcGxDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogY2xpZW50KQorICAgIDogbV9jb21t
aXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG51bVByb3hpZXMrKzsKKyAgICBpZiAoIWNjVGhyZWFkKSB7CisgICAgICAgIGNjVGhyZWFk
ID0gbV9jbGllbnQtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7CisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChjY1RocmVhZC0+dGhyZWFk
SUQoKSk7CisgICAgfQorfQorCisKK0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkoKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fY2xpZW50KTsgLy8gbWFrZSBzdXJlIHN0
b3AoKSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJveGllcy0tOworICAgIGlmICghbnVtUHJveGll
cykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAg
ICB9Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dDNEKiBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVl
SG9zdEltcGw7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6Omlu
aXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgb2s7
CisKKyAgICAvLyBTdHlsZSBub3RlOiB0aGlzIGlzIHdvcmQtd3JhcHBlZCBiZWNhdXNlIG9mIHRo
ZSBzaGVlciBhcmd1bWVudCBsZW5ndGguCisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmluaXRJ
bXBsT25DQ1RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mob3duZXJIYWNrKSwgY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNv
bXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZvayksIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoJm1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5KSkpOworICAg
IGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgcmV0dXJuIG9rOworfQorCitjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3Q6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6Omxv
c2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1p
dFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAw
KTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6Omlu
aXRJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsK
KyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxDQ1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisgICAgQ0NDb21w
bGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6bGF5ZXJU
cmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRp
b24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVl
SG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgorICAgIG1fY2xpZW50
ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6cG9zdERy
YXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNr
KGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwp
CisgICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhp
cywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21t
aXQsIGZyYW1lQmVnaW5UaW1lKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFk
UHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDAp
OworICAgICAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cisg
ICAgfQorCisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisKKyAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcigpOworICAgIG1fY2xpZW50LT5iZWdpbkNvbW1pdCgpOworCisgICAgLy8g
QmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6cGVyZm9y
bUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29t
bWl0dGVyLmdldCgpKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAg
ICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIGNvbW1pdHRlci5jbGVhcigpOworICAgIG1fY2xp
ZW50LT5jb21taXRDb21wbGV0ZSgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29t
bWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBBU1NFUlQoaXNJ
bXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAgLy8vIHh4eCBnZXQgcmlkIG9m
IHRoaXMgc3RhdGljIGNhc3Qgc29tZWhvdy4uLgorICAgICAgICBDQ0xheWVyVHJlZUhvc3QqIGhv
c3QgPSBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3QqPihtX2NsaWVudCk7CisgICAgICAgIGNv
bW1pdHRlci0+Y29tbWl0KGhvc3QsIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIH0K
KyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bW1pdENvbXBsZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1w
bCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1Ro
cmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJ
bXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94
eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJl
ZUhvc3RJbXBsKHRoaXMpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojppbml0TGF5ZXJSZW5kZXJlck9uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBvaywgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwcykKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmluaXRMYXllclJlbmRlcmVyT25DQ1RocmVhZCIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgKm9rID0gbV9sYXll
clRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0
KTsKKyAgICBpZigqb2spCisgICAgICAgICpjYXBzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RD
bG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
Q0NUaHJlYWRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkNDMyMWRlMThhMWVkODFjYWY0MzEzYzhmZTI3
MWM1NjJlNDBlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oCkBA
IC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94
eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwor
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eSA6IHB1YmxpYyBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHksIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlKEND
TGF5ZXJUcmVlSG9zdCogY2xpZW50KTsKKworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdElt
cGxDQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgaW1w
bGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAq
cGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAgIHZp
cnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sIHZpc2libGUpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7CisKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9u
IENDVGhyZWFkCisgICAgdmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0V2FzTG9zdCgpOwor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5
KENDTGF5ZXJUcmVlSG9zdCopOworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAg
IHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAg
ICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdM
YXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqKTsKKyAgICB2b2lkIGluaXRMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVy
VHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgQ0NDb21wbGV0aW9uRXZl
bnQqLCBib29sKiBvaywgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgc2V0
TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKEND
Q29tcGxldGlvbkV2ZW50Kik7CisKKyAgICAvLyBVc2VkIG9uIG1haW4tdGhyZWFkIG9ubHkuCisg
ICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisKKyAgICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVh
ZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9jbGllbnQ7CisgICAgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsK
KworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVh
ZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xZWRjMjhkMGYwODAyYjgzMzQzNDc0NzYwYzFkMjU5ZjRiOWVkOTc5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5jcHAKQEAgLTAsMCAr
MSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgor
ICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgor
ICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcK
KyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsK
KyNlbmRpZgorICAgIH0KK307CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5
PiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Q2xpZW50KiBjbGllbnQpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
Q0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KGNsaWVudCkpOworfQorCitDQ0xheWVy
VHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5KENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eUNsaWVudCogY2xpZW50KQorICAgIDogbV9j
bGllbnQoY2xpZW50KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAgICwgbV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0YXJ0KCkKK3sKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fY2xp
ZW50LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKK30KKworQ0NMYXllclRyZWVIb3N0
SW1wbE1haW5UaHJlYWRQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHko
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYm
ICFtX2NsaWVudCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgaWYgKCFkb0NvbXBv
c2l0ZShmYWxzZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPnJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisKKyAgICBpZiAobV9sYXllclRyZWVIb3N0
SW1wbC0+aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGxNYWlu
VGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFp
blRocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9CisKK2Jvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NM
YXllclRyZWVIb3N0KiBvd25lckhhY2spCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHsKKyAgICAgICAg
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICB9
Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdElt
cGxNYWluVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAorewor
ICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxNYWluVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAg
bV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAg
ICAgICByZXR1cm47CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIG1fY2xpZW50
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vsc2UKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlz
LCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxNYWlu
VGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlmTmVlZGVkKSk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAg
Ly8gV2UgZG9uJ3Qgb3B0aW1pemUgdGhpcyBjYXNlIGluIHRoZSBtYWluIHRocmVhZGVkIGNhc2Uu
CisgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0Vmlz
aWJsZSh2aXNpYmxlKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFBy
b3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgeworICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAgICB9CisgICAgbV9jbGllbnQgPSAwOworfQorCisv
LyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVy
X3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFp
blRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCit7CisgICAgZG9Db21wb3NpdGUo
dHJ1ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29t
cG9zaXRlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpIHsKKyAgICAgICAg
Ly8gVXBkYXRlCisgICAgICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7
CisgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8g
Q29tbWl0CisgICAgICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRl
ciA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7CisgICAgICAgIG1f
Y2xpZW50LT5iZWdpbkNvbW1pdCgpOworICAgICAgICB7CisgICAgICAgICAgICBTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGw7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNv
bW1pdCgpOworICAgICAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9jbGllbnQsIG1fbGF5ZXJU
cmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZW5k
Q29tbWl0KCk7CisgICAgICAgIH0KKyAgICAgICAgY29tbWl0dGVyLmNsZWFyKCk7CisgICAgICAg
IG1fY2xpZW50LT5jb21taXRDb21wbGV0ZSgpOworCisgICAgICAgIC8vIERyYXcKKyAgICAgICAg
ZG9Db21wb3NpdGUodHJ1ZSk7CisgICAgfQorfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKGJvb2wgcHJlc2VudFJlc3VsdCkKK3sKKyAgICBp
ZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4
dDNEKCk7CisgICAgICAgIGJvb2wgb2sgPSAhbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoTlVMTCwgY29udGV4dCk7CisgICAgICAgIG1fY2xpZW50LT5kaWRSZWNy
ZWF0ZUdyYXBoaWNzQ29udGV4dChvayk7CisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IGZhbHNlOworICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOworICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgICAg
aWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkgeworICAgICAgICAgIC8v
IFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBp
ZiBHUFUgcHJvY2VzcworICAgICAgICAgIC8vIGRpZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFu
bmVsSG9zdDo6T25FcnJvck1lc3NhZ2Ugd2lsbCBvbmx5IGJlCisgICAgICAgICAgLy8gY2FsbGVk
IGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3Vy
CisgICAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNo
IHRoZSByb290IGxheWVyIGZyb20gdGhlCisgICAgICAgICAgLy8gcmVuZGVyZXIsIHJlY3JlYXRl
IHRoZSByZW5kZXJlciBhdCB0aGUgbmV4dCBtZXNzYWdlIGxvb3AgaXRlcmF0aW9uCisgICAgICAg
ICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KKyAgICAgICAgICBtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOworICAgICAgICAgIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAo
cHJlc2VudFJlc3VsdCkKKyAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NzYwMzIyYWVkY2NiNWQ2NzNjYmFhYjIxMjM3NjJmNThmMDU2MTJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eV9oCisjZGVmaW5l
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0ND
b21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsK
K2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbE1haW5UaHJlYWRQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHksIEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eUNsaWVudCopOworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHkoKTsKKworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSBpbXBsZW1lbnRhdGlvbgor
ICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0
IEludFJlY3QmIHJlY3QpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBi
b29sIGlzU3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSk7
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKwor
ICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKKyAg
ICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOworICAgIHZpcnR1
YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CisgICAgdmlydHVhbCB2b2lkIGNvbnRleHRXYXNMb3N0KCk7CisKKyAgICAvLyBTcGVj
aWFsIGNhc2UgZnVuY3Rpb25zLgorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
dm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHlDbGllbnQqKTsKKyAgICB2b2lkIGNvbXBvc2l0ZUlmTmVlZGVkKCk7CisgICAgYm9v
bCBkb0NvbXBvc2l0ZShib29sIHByZXNlbnRSZXN1bHQpOworCisgICAgLy8gQWNjZXNzZWQgb24g
bWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlDbGllbnQqIG1f
Y2xpZW50OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1h
aW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKKworICAgIGJvb2wgbV9jb21t
aXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0OworfTsKKwor
fQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwCmluZGV4IGE2NjkyODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2NjJlOTguLjUwMTFi
MjQ0ZmYzODRhODI4ZjY1NTY0ODJkNGI4YjRmOWUyM2E3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcApAQCAtMzYsMjAwICszNiwzMiBAQCB1c2lu
ZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci1D
Q1RocmVhZCogY2NUaHJlYWQ7Ci1pbnQgbnVtUHJveGllcyA9IDA7Ci19Ci0KLUNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCkKLSAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKLSAgICAsIG1fbGF5
ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbnVtUHJveGllcysrOwotICAgIGlmICghY2NU
aHJlYWQpCi0gICAgICAgIGNjVGhyZWFkID0gbGF5ZXJUcmVlSG9zdC0+Y2xpZW50KCktPmNyZWF0
ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7Ci19Ci0KLQotdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnN0YXJ0KCkKLXsKLSAgICAvLyBDcmVhdGUgTGF5ZXJUcmVlSG9zdEltcGwu
Ci0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omlu
aXRJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsK
LSAgICBjb21wbGV0aW9uLndhaXQoKTsKLX0KLQotQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdElt
cGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4K
LQotICAgIG51bVByb3hpZXMtLTsKLSAgICBpZiAoIW51bVByb3hpZXMpIHsKLSAgICAgICAgZGVs
ZXRlIGNjVGhyZWFkOwotICAgICAgICBjY1RocmVhZCA9IDA7Ci0gICAgfQotfQotCi1ib29sIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9sYXllclRyZWVIb3N0SW1wbDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
IiwgdGhpcywgMCk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQp
KTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AoKQotewotICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0
aGUgaW1wbC4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci0KLSAgICBBU1NFUlQo
IW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgot
ICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojpwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJl
Z2luVGltZSkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlz
SW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgQ0NN
YWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7
Ci19Ci0KICNpZm5kZWYgTkRFQlVHCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNN
YWluVGhyZWFkKCkKIHsKICAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKTsKIH0KIAotI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpp
c0ltcGxUaHJlYWQoKQotewotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQt
PnRocmVhZElEKCk7Ci19Ci0jZWxzZQogbmFtZXNwYWNlIHsKIGJvb2wgZmFrZUltcGxUaHJlYWQg
PSBmYWxzZTsKK3N0YXRpYyBXVEY6OlRocmVhZElkZW50aWZpZXIgaW1wbFRocmVhZElEOwogfQog
CiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKIHsKLSAgICBy
ZXR1cm4gZmFrZUltcGxUaHJlYWQ7CisgICAgcmV0dXJuIGZha2VJbXBsVGhyZWFkIHx8IGN1cnJl
bnRUaHJlYWQoKSA9PSBpbXBsVGhyZWFkSUQ7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFsdWUpCiB7CiAgICAgZmFrZUltcGxUaHJlYWQg
PSB2YWx1ZTsKIH0KLSNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNlbmRp
ZiAvLyAhTkRFQlVHCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJh
bWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFu
ZENvbW1pdCIsIHRoaXMsIDApOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAgIG1f
Y29tbWl0UGVuZGluZyA9IGZhbHNlOwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29t
bWl0dGVyKCk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAgLy8g
QmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21taXQK
LSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFz
ayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29t
bWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkpLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2Fp
dCgpOwotCi0gICAgY29tbWl0dGVyLmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPmNv
bW1pdENvbXBsZXRlKCk7Ci19CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21t
aXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllciB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
aXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LT5iZWdpbkNvbW1pdCgpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5
ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotICAgIGNvbXBs
ZXRpb24tPnNpZ25hbCgpOwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxl
dGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkND
VGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpk
cmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmRyYXdMYXllcnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVl
SG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5zZXROZWVkc1JlZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewot
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXll
clRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwo
dGhpcyk7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgaW1wbFRocmVhZElEID0gdmFs
dWU7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25D
Q1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9s
YXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotfQor
I2VuZGlmIC8vICFOREVCVUcKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuaAppbmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2Jh
Li5iNDk1NmU1NWZmYmEwNjJiNmMwZThhZTdhMjE5ODQ2MDZjMTMyMDZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaApAQCAtMjUsNjYgKzI1LDgwIEBACiAj
aWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eV9oCiAKLSNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgotI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NU
aHJlYWQ7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBs
OworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworc3RydWN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXM7CiAKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1Ymxp
YyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eUNsaWVudCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpID0gMDsKKyAgICB2aXJ0
dWFsIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKSA9IDA7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCkgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
KikgPSAwOworICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+
IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykgPSAwOworI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7
CisjZW5kaWYKK307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKIAotICAgIGJvb2wgaXNTdGFy
dGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYpID0gMDsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQoKSA9IDA7IC8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIHRoZSBzY2hlZHVs
aW5nIGludmVyc2lvbiBpcyBjb21wbGV0ZWQuCisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxs
UmVuZGVyaW5nKCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0g
MDsKIAotICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSAgICB2b2lkIHNldE5l
ZWRzUmVkcmF3KCk7CisgICAgLy8gVGhlIG93bmVySGFjayBhcmd1bWVudCBpcyB0byBhbGxvdyBp
bnRyb2R1Y2luZyB0aGUgSW1wbFByb3h5IHN1YmNsYXNzZXMKKyAgICAvLyB3aXRob3V0IGFsc28g
dHJ5aW5nIHRvIGNoYW5nZSBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gcG9pbnQgYXQKKyAgICAv
LyBDQ0xheWVyVHJlZUhvc3RJbXBsLgorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOwogCi0gICAgdm9pZCBzdGFy
dCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgotICAgIHZvaWQg
c3RvcCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgorICAg
IHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpIGNvbnN0ID0gMDsKIAotICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVu
dCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNU
YXNrT25DQ1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgLy8gVGVzdGluZyBob29rCisg
ICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
c2V0TmVlZHNSZWRyYXcoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29s
IHZpc2libGUpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
ID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KIAogI2lm
bmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKICAgICBzdGF0aWMg
Ym9vbCBpc0ltcGxUaHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IC8vIEZha2UgdGhyZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29ycmVjdCB1
c2FnZS4KLSAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlmCiAjZW5k
aWYKIAogcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShD
Q0xheWVyVHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRyZWVIb3N0
KiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZhdGU6Ci0g
ICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQK
LSAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0ND
b21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7Ci0gICAg
dm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5Lgot
ICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJl
YWQgb25seS4KLSAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQotICAgIC8v
IFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcg
aW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisgICAgLy8gQ2FsbGVkIGJ5IENDTGF5ZXJUcmVlSG9zdElt
cGxNYWluVGhyZWFkUHJveHkgdG8gbWFrZSBpc0ltcGxUaHJlYWQKKyAgICAvLyByZXR1cm4gdHJ1
ZS4KKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xhc3Mg
U2NvcGVkU2V0SW1wbFRocmVhZDsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wp
OworICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyIHZh
bHVlKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRleCBmYWM2ZTY0
M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhLi5kYjcxMzA5MzNmOTY1ZGRlOWYyMWQz
YWRiZjg0NmFiMmQ4ZTZmYzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0x
NTgsNiArMTU4LDg4IEBAIHByaXZhdGU6CiAgICAgUDMgbV9wYXJhbWV0ZXIzOwogfTsKIAorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQ
MiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwg
dHlwZW5hbWUgTVA0PgorY2xhc3MgTWFpblRocmVhZFRhc2s0IDogcHVibGljIENDTWFpblRocmVh
ZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1Q
MiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s0PFQsIFAxLCBNUDEsIFAy
LCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUg
UGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6
UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1Ry
YWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWlu
VGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00
IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJl
YWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRU
YXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFt
MiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAg
ICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1l
dGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICB7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8
VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1f
cGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9k
IG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cisg
ICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBl
bmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFt
ZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBNYWluVGhyZWFkVGFzazUg
OiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQg
KFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIE1haW5U
aHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1
PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFy
YW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFy
YW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1w
bD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwg
UGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1h
aW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIy
LCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIE1haW5UaHJlYWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0x
IHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00
IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICA6IENDTWFpblRocmVhZDo6
VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9w
YXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIp
CisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0
ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAg
ICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwg
bV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1l
dGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0
IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRU
YXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTIxNSw2ICsyOTcsNDYgQEAgUGFzc093blB0
cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgICAgICBDcm9z
c1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOwogfQogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg
TVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0
PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAor
ICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAz
LCBNUDQpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0
ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0
KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlw
ZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNh
bGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNv
cHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJh
bWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMp
LAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRy
PENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3Qg
Y2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwK
KyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAg
ICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBj
b25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2s1PFQsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+
OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAg
ICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5
KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwK
KyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gK
KyNlbmRpZiAvLyBNYWluVGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDkx
YzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNiZTEwOTU3OGYxODMuLmUzYjEzNmQwZDM0NTA5YzVh
NjkzMDhiNjdhNjUwZjhmZjA5Y2U3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0xOTgs
NiArMTk4LDQ4IEBAIHByaXZhdGU6CiAgICAgUDQgbV9wYXJhbWV0ZXI0OwogfTsKIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIENDVGhyZWFkVGFzazUg
OiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6
Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRU
YXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDQ1Ro
cmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQ
YXJhbTU7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUo
VCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFy
YW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFy
YW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNr
SW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIz
LCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhy
ZWFkVGFzazUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQ
YXJhbTUgcGFyYW1ldGVyNSkKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAg
ICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJh
bWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQq
PihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3Bh
cmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3Bh
cmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAg
ICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0
cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxl
ZSwKQEAgLTI3NCw2ICszMTYsMjcgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRl
Q0NUaHJlYWRUYXNrKAogCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0
eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBl
bmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFt
ZSBNUDU+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisg
ICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMs
IE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFy
YW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1l
dGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRU
YXNrNTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5
cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVh
dGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpj
b3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFy
YW1ldGVyNCksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI1
KSk7CisKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ0NUaHJlYWRU
YXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRU
YXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rl
c3QuY3BwCmluZGV4IDFjNWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5NjNiNTc3YzIuLmQ5
OTQzZTcxM2EyMGE0ZDdiMDkwNDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtNDEsNiArNDEs
NyBAQCBwdWJsaWM6CiAgICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBpbnQg
YTIpKTsKICAgICBNT0NLX01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwgaW50
IGEzKSk7CiAgICAgTU9DS19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIsIGlu
dCBhMywgaW50IGE0KSk7CisgICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZvaWQoaW50IGExLCBp
bnQgYTIsIGludCBhMywgaW50IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1QoQ0NUaHJlYWRUYXNr
VGVzdCwgcnVubmFibGVNZXRob2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRFU1QoQ0NUaHJlYWRU
YXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIo
OSwgOCkpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwgNykp
LlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywgNikpLlRp
bWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwgNywgNiwgNSkpLlRp
bWVzKDEpOwogCiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMCkt
PnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0
aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAm
TW9jazo6bWV0aG9kMiwgOSwgOCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRU
YXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7CiAgICAg
Y3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnBl
cmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9k
NSwgOSwgOCwgNywgNiwgNSktPnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105123</attachid>
            <date>2011-08-24 19:44:09 -0700</date>
            <delta_ts>2011-08-25 09:00:02 -0700</delta_ts>
            <desc>Complete enough for initial review. Dont try running it. </desc>
            <filename>bug-66807-20110824194408.patch</filename>
            <type>text/plain</type>
            <size>94340</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZDJmMjNkNjU3N2I1YTMx
MDUyMmVkNmRjMzJiNDM5OGFkOTgxMDYxLi4zYzVhN2ExZmEzZTIxNDQ2NjdlOWJjMGFhMjI0ZDJi
NGU5OTU1ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMjMgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNl
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXll
clJlbmRlcmVyIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6U2NvcGVk
U2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTZXRJbXBsVGhyZWFkOjp+
U2NvcGVkU2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJ
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaDoKKwogMjAxMS0wOC0yNCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEpTSFRNTEltYWdlRWxlbWVudCAoYW5kIGFzc29jaWF0ZWQg
Tm9kZSkgaXMgYWJhbmRvbmVkIHdoZW4gaW1hZ2UgbG9hZCBpcyBjYW5jZWxlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDlkN2IwY2MwZWMzYTkzMGY2NmI5OWY1MzcwMzFlMjBjMjUzOTgyMzcuLjhjZDgw
M2MxZmQ1ZGM4ZmU1NzY1OTM4ZTQ1NmE2NWVlNzI3MmE1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1MzUsNiArMzUzNSwxMCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5LmgnLAorICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxNYWluVGhyZWFkUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5LmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNo
cm9taXVtLmNwcAppbmRleCA1OWMyY2NhMWQ5MmNkM2FlZjYzYTQ3MDFlMDViZDFmYmFhY2I4NGU3
Li43ODFiOTA4NzU4MDVjOWU2NWE0OTE5NzU2N2MxNjM5MTY2Y2NkMjBkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29udGVudExheWVyQ2hyb21pdW0uY3BwCkBAIC0xMjAsNiArMTIwLDggQEAgYm9vbCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0
KQogeworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIDAgLy8gRklYTUUgQkVGT1JFIExB
TkRJTkcKICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQogICAg
IGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewpAQCAtMTI5LDcgKzEz
MSw4IEBAIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKGNv
bnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKICNlbmRpZiAvLyBTS0lBCiAjZW5kaWYgLy8gIVRI
UkVBREVEX0NPTVBPU0lUSU5HCiAKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJl
VXBkYXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVy
KSwgaG9zdC0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOworICAgIG1fdGV4dHVyZVVwZGF0ZXIg
PSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6
Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdN
YXBTdWIpOworI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDIzYzg1NTVmNTBiZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQyY2M1YmMuLjcxYmMwYjZiOWRi
NjU2YmM0NjBmNGY4NTY1NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VMYXllckNocm9taXVtOjpkcmF3
c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVy
ZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIG1fdGV4dHVyZVVw
ZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5jb250ZXh0U3Vw
cG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJl
VXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01h
cFN1Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTU2M2VhYTU3ZjU2NzNj
ODU5OWQ0ZGJhYWM4OGI5MmQ5YzQ5NDM0OC4uZTA2YmEwZDhiMzRlMGY1MzUxYzU0YTc3MjIwM2Q0
MzI4YTQ2MzE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDYgKzk2LDIwIEBAIHZv
aWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiB9CiAKK3ZvaWQgTGF5ZXJD
aHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0q
IHJlbmRlcmVyKQoreworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
YyA9IGNoaWxkcmVuKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjLnNpemUoKTsgKytp
KQorICAgICAgICBjW2ldLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKwor
ICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCktPnNldExheWVyUmVuZGVy
ZXJSZWN1cnNpdmUocmVuZGVyZXIpOworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAg
cmVwbGljYUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworCisg
ICAgc2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJlcik7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQogewogICAg
IC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVuIHdlIG5lZWQgdG8gZnJl
ZSB1cCBhbnkgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNThlZDFiMDQwOTZkYWMz
ZTFiZjZlNzc5NmFmNTkwNmI4Mzg4Y2M4NS4uZmUyZTRjNzEzNzNiZTUyNWQ1OGM2M2I3Y2UwYTgx
ZWE4ZTFlNWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTUzLDYgKzE1Myw4IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldElzUm9vdExheWVyKGJvb2wgaXNSb290TGF5ZXIpIHsgbV9pc1Jvb3RM
YXllciA9IGlzUm9vdExheWVyOyB9CiAgICAgYm9vbCBpc1Jvb3RMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1faXNSb290TGF5ZXI7IH0KIAorICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2
ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBv
dmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAg
ICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtLgogICAgIC8vIEZJWE1FLCByZXBsYWNl
IHdpdGggQ0NMYXllclRyZWVIb3N0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKaW5kZXggYTZmYjI1ODAzYWU3MDcwZjExNWRjMGM0NjUwNzNhOGVjODdhOWE5NS4uNjFjNmQ3
ODhkMzA1OGEyMDVhNjI3Mzc3MDYxNWFkMjI5OTU2YjdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0
dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5o
IgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5o
IgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHRTdHJl
YW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtNDgzLDE0ICs0ODQsMTggQEAg
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemUoKQogICAgICAgICAvLyBMaW1p
dCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFwLT50ZXh0
dXJlIGNhY2hlLgogICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5
dGVzID0gNTAgKiAxMDI0ICogMTAyNDsKICAgICAgICAgbV9za2lhQ29udGV4dC0+c2V0VGV4dHVy
ZUNhY2hlTGltaXRzKG1heFRleHR1cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7
CisgICAgICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyA9IHRydWU7
CiAgICAgfQogI2VuZGlmCiAKICAgICBXZWJDb3JlOjpFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBtX2NvbnRleHRTdXBwb3J0c01hcFN1
YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7Ci0gICAgaWYg
KG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKQorICAgIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3Vi
ID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKKyAgICBpZiAo
bV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWIpCiAgICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVu
YWJsZWQoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKIAorICAgIG1fY2FwYWJpbGl0aWVzLm1heFRl
eHR1cmVTaXplID0gbWF4VGV4dHVyZVNpemUoKTsKKyAgICBtX2NhcGFiaWxpdGllcy5iZXN0VGV4
dHVyZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fY29udGV4dC5n
ZXQoKSk7CisKICAgICBpZiAoIWluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtNTUzLDEzICs1NTgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzKCkKICAgICAvLyBSZW5kZXJXaWRnZXQuCiAgICAgbV9oZWFkc1Vw
RGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJlbnRUaW1lKCkpOwogCi0gICAgLy8gUmVjaGVjayB0
aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxheWVyLiBUaGlzIG1heSBiZWNvbWUgbnVsbCBpZgot
ICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVybmVkIG9mZiBkdXJpbmcgYSBwYWludCBvcGVyYXRp
b24uCi0gICAgaWYgKCFyb290TGF5ZXIoKSkgewotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbC5j
bGVhcigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RM
YXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOwogfQogCkBAIC01NjgsMTIgKzU2Niw2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKCkKICAgICBpZiAoIXJvb3RMYXllcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXplVHJlZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9y
b290Q0NMYXllckltcGwgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RM
YXllcigpLT5wbGF0Zm9ybUxheWVyKCksIG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICB9
Ci0KLQogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5
dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkpOwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwog
CkBAIC03MTgsNyArNzEwLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBDQ0xheWVySW1wbCog
cm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpOworICAgIENDTGF5ZXJJbXBs
KiByb290RHJhd0xheWVyID0gcm9vdExheWVySW1wbCgpOwogICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOwogCiAgICAgaWYgKCFyb290RHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC04MjYs
MjAgKzgxOCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpwcmVzZW50KCkKICAgICBt
X2hlYWRzVXBEaXNwbGF5LT5vblByZXNlbnQoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi17
Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxh
eWVyLT5jaGlsZHJlbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6
ZSgpOyArK2kpCi0gICAgICAgIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoY2hpbGRyZW5baV0u
Z2V0KCkpOwotCi0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShsYXllci0+bWFza0xheWVyKCkpOwotICAgIGlmIChsYXllci0+cmVw
bGljYUxheWVyKCkpCi0gICAgICAgIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobGF5ZXItPnJl
cGxpY2FMYXllcigpKTsKLQotICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotfQot
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAq
cGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8
PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5tYXhZKCkgPD0gdmlld3BvcnRIZWlnaHQoKSk7CkBA
IC05MzQsNyArOTEyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCiAKIE1hbmFnZWRUZXh0dXJlKiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9mZnNjcmVlbkxheWVyVGV4dHVyZSgpCiB7Ci0gICAg
cmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJbXBs
ID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkg
OiAwOworICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5
ZXJJbXBsKCkgPyByb290TGF5ZXJJbXBsKCktPnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0
dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVl
blRleHR1cmVUb0Rpc3BsYXkoKQpAQCAtMTI5MSw3ICsxMjY5LDcgQEAgdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJmYWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCwgY29uc3QKICAgICAgICAgZHVtcFJlbmRlclN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5j
aGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAotYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlz
Q29tcG9zaXRvckNvbnRleHRMb3N0KCkKK2Jvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0Nv
bnRleHRMb3N0KCkKIHsKICAgICByZXR1cm4gKG1fY29udGV4dC5nZXQoKS0+Z2V0RXh0ZW5zaW9u
cygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggOTU1OGZh
MWU2MGEwNDA3YWYxOWE3YzhmYjUzNjE4MmQyODhhMTNjNC4uYzI3NTkzNDMwNmRkZTVlNzc5MmRl
ZTk1NjE2YjU5ZmQ2NGVlMTY5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1Bs
dWdpbkxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNjMsNiArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7CiBjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIEND
TGF5ZXJUcmVlSG9zdDsgLy8gVE9ETzogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFz
cyBHZW9tZXRyeUJpbmRpbmc7CkBAIC03Nyw2ICs3OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRp
bmdzKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorICAgIGNvbnN0IExh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FwYWJpbGl0aWVzOyB9CiAKICAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4g
bV9vd25lcjsgfQogICAgIGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyOyB9CkBAIC04NCwxNCArODcsMTcgQEAgcHVibGljOgogICAgIEdyYXBoaWNz
TGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAgICAg
Y29uc3QgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+
cm9vdExheWVyKCk7IH0KIAorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgeyByZXR1
cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwqIHJv
b3RMYXllckltcGwoKSBjb25zdCB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0K
KwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7Ci0gICAgYm9vbCBjb250ZXh0U3Vw
cG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQor
ICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmls
aXRpZXMudXNpbmdNYXBTdWI7IH0KIAogI2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogc2tp
YUNvbnRleHQoKSB7IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAotICAg
IGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXItPnZpZXdwb3J0
U2l6ZSgpOyB9CisgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgeyByZXR1cm4gbV9v
d25lckltcGwtPnZpZXdwb3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJl
dHVybiB2aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkg
eyByZXR1cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTQzLDIyICsxNDksMTYg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCi0g
ICAgYm9vbCBpc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0TG9z
dCgpOwogCiAgICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0VGV4
dHVyZUZvcm1hdCgpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBD
Q0xheWVyTGlzdDsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBt
b3ZlZCB0byB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgot
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290Q0NMYXllckltcGw7Ci0KICAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4pOwogICAgIGJvb2wgaW5pdGlhbGl6ZSgpOwogCkBAIC0xOTAsOCArMTkwLDExIEBAIHBy
aXZhdGU6CiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogICAgIHZvaWQgY2xl
YW51cFNoYXJlZE9iamVjdHMoKTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xh
eWVyVHJlZUhvc3RJbXBsCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzCiAgICAgQ0NMYXllclRy
ZWVIb3N0KiBtX293bmVyOworICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG1fb3duZXJJbXBsOwor
CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKICAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBtX3dpbmRvd01hdHJpeDsKQEAgLTIzMiw4ICsyMzUsNiBAQCBwcml2YXRlOgogICAg
IE93blB0cjxHckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzZTEwMmVjODY1Njk1ZjgzYmI3MDgxZTNiZmY2
MTkxYmJhZDllMmMzLi5hNzllYTEyYzRkNzRjMTkxZWM0ZDYwN2ViZmQ0OGFkNWUzN2RmODNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhv
c3QpCiAKICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0KTsKIAotICAgIG1fdGV4dHVyZUZv
cm1hdCA9IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0g
aG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAg
IG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIoKS0+b3JpZW50YXRpb24oKTsK
ICAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNhbXBsZWRUZXhl
bEZvcm1hdChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0
YTo6Y3JlYXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggOTdlNzQyY2Mx
ODI4Mjc4YzZiNTJlMjk2YjgwZGU5N2I0YWExODA1YS4uNTg2NDBlM2IxMjYwODQyOTZlZDNhN2U1
ZjJjYmYyZGIyY2E3YTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0z
MCwxMCArMzAsMTIgQEAKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJUcmFjZUV2
ZW50LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGxDQ1RocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1h
aW5UaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDYsMTAgKzQ4LDcgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+
IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0K
IAogQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwg
bV9jb250ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkK
KyAgICA6IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwg
bV9mcmFtZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50
ZXIoKSkpCkBAIC01OSwxNSArNTgsMjMgQEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhv
c3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MKIAogYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogewotICAgIG1fbGF5ZXJSZW5kZXJlciA9
IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgaWYgKGZhbHNlKSAvLyBUT0RPOiBtYWtlIHRo
cmVhZCBhIHJ1bnRpbWUgZmxhZyBpbiBDQ1NldHRpbmdzCisgICAgICAgIG1fcHJveHkgPSBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOworICAgIGVsc2UKKyAg
ICAgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNyZWF0
ZSh0aGlzKTsKKyNlbHNlCisgICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhy
ZWFkUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyNlbmRpZgorICAgIG1fcHJveHktPnN0YXJ0KCk7CisK
KyAgICAvLyBDcmVhdGUgdGhlIHJlbmRlcmVyLi4uCisgICAgaWYgKCFtX3Byb3h5LT5pbml0aWFs
aXplTGF5ZXJSZW5kZXJlcih0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8g
RklYTUU6IEluIHRoZSB0aHJlYWRlZCBjYXNlLCB0aGVzZSB2YWx1ZXMgd2lsbCBuZWVkIHRvIGJl
IGluaXRpYWxpemVkCi0gICAgLy8gYnkgc29tZXRoaW5nIG90aGVyIHRoYW4gbV9sYXllclJlbmRl
cmVyLgotICAgIG1fbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyUmVuZGVyZXItPm1heFRleHR1cmVT
aXplKCk7Ci0gICAgbV9iZXN0VGV4dHVyZUZvcm1hdCA9IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0
dXJlRm9ybWF0KG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpKTsKLSAgICBtX2NvbnRleHRTdXBw
b3J0c01hcFN1YiA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCk7Cisg
ICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24gY2FwYWJpbGl0aWVzIHRoYXQgd2UgZ290
IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCisgICAgaWYgKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBh
aW50aW5nICYmICFtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdBY2Nl
bGVyYXRlZFBhaW50aW5nKQorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9
IGZhbHNlOwogCiAgICAgbV9yb290TGF5ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CiAj
aWZuZGVmIE5ERUJVRwpAQCAtNzcsMTIgKzg0LDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6Omlu
aXRpYWxpemUoKQogCiAgICAgbV9yb290TGF5ZXItPmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkpOwogCi0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCi0gICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRo
aXMpOwotICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQoKSk7CisgICAgLy8gV2UgY2hhbmdl
ZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJveHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAg
IG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0jZW5kaWYKIAogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtOTAsMTAgKzkzLDE1IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0
aWFsaXplKCkKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCgpCiB7CiAgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOwot
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKICAgICBtX3Byb3h5LT5zdG9wKCk7CiAgICAg
bV9wcm94eS5jbGVhcigpOwotI2VuZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojphbmlt
YXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9
IHRydWU7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwor
ICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdp
bkNvbW1pdCgpCkBAIC0xMDUsNDcgKzExMyw1MSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0Q29tcGxldGUoKQogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorUGFzc093blB0
cjxDQ1RocmVhZD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsK
LSAgICBtX2FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQo
ZnJhbWVCZWdpblRpbWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG1f
Y2xpZW50LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7Cit9CisKK1Bhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpCit7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNE
KCk7CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJl
ZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQogewotICAgIC8vIEZJWE1FOiBv
bmx5IGNhbGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCi0gICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRl
KCk7CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQpCiB7Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXll
clJlbmRlcmVyKTsKLSAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVu
dCwgcmVuZGVyZXIpOworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY2xp
ZW50LCBtX3NldHRpbmdzKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9z
dDo6Y29udGV4dCgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoYm9vbCBzdWNjZXNzKQogewotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNvbnRl
eHQoKTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpw
aXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiB7Ci0jaWYgVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0
aGlzLgotI2Vsc2UKLSAgICBjb21wb3NpdGUoZmFsc2UpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+
Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKKyAgICBtX2NsaWVudC0+c2NoZWR1
bGVDb21wb3NpdGUoKTsKK30KICNlbmRpZgorCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRy
ZWVIb3N0Ojpjb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOworfQor
Citib29sIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVB
bmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Zmlu
aXNoQWxsUmVuZGVyaW5nKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAg
Ly8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+ZmluaXNoKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxSZW5kZXJpbmco
KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNv
bnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTE1Myw2ICsxNjUsMTEgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVj
dCkKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJlY3QoZGlydHlS
ZWN0KTsKIH0KIAorY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVI
b3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKQEAgLTE3NywxMSArMTk0LDggQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJv
b3RMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICBpZiAo
bGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5ncmFwaGljc0xheWVyKCktPmFkZENoaWxkKGxheWVyKTsKLSAgICAgICAgbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwot
ICAgIH0KLQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50
U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IElu
dFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTE5MiwxMDYgKzIwNiwyNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25z
dCBJbnRTaXplJiBjbwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxQ
b3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qt
PmdyYXBoaWNzTGF5ZXIoKS0+c2V0U2l6ZShjb250ZW50c1NpemUpOwogCi0gICAgaWYgKHZpc2li
bGVSZWN0Q2hhbmdlZCkgeworICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpCiAgICAgICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICAg
ICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmll
d3BvcnRDaGFuZ2VkKCk7Ci0gICAgfQogCiAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewot
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCF2aXNpYmxlKQotICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwotI2VuZGlmCisgICAgbV9wcm94
eS0+c2V0VmlzaWJsZShmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQordm9pZCBDQ0xheWVy
VHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIGZhbGwg
YmFjayB0byBzb2Z0d2FyZS4KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQg
PSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwotICAgIGlmICghY29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBY3R1YWxseSBjcmVhdGUgdGhlIHJl
bmRlcmVyLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIg
PSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLQotICAgIC8v
IElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFp
bnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKLSAgICAvLyBhbmQgdHJ5IGNyZWF0
aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KLSAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFp
bnRpbmcgJiYgIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRl
UGFpbnRpbmcgPSBmYWxzZTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiBsYXll
clJlbmRlcmVyOworICAgIG1fcHJveHktPmxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwogfQogCiAj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpkb0Nv
bXBvc2l0ZSgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVy
ZXIpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKIHsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdp
bGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAg
IC8vIGluIGNyZWF0aW5nIGEgbmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJl
cigpOwotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBv
c2l0b3IgY29udGV4dCBpcyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIt
PmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQot
ICAgICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnByZXNlbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0
b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250
ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBk
aWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwg
b25seSBiZQotICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBt
ZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMg
aGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAg
IC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBs
b29wIGl0ZXJhdGlvbgotICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWlu
LgotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3ND
b250ZXh0ID0gdHJ1ZTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5k
ZXJlcigpCi17Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJl
ciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAg
ICAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJS
ZWN1cnNpdmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRl
cmVyID0gbGF5ZXJSZW5kZXJlcjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNz
Q29udGV4dCh0cnVlKTsKKyAgICBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRo
cmVhZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CiB9CiAj
ZW5kaWYgLy8gIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAppbmRleCBmZGE3MjIwZjZhMmZmNTU5ZmQ2MGMxY2E5ZmZlNWQ2OWRjZWUzMjQxLi5i
ODU0OGY5ZmI0NmMwNDAzZDZkMjNjYTFjYWRhNzc4NTQ4NTNmZjgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaApAQCAtNzMsMjYgKzczLDQ5IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAg
ICBib29sIHNob3dQbGF0Zm9ybUxheWVyVHJlZTsKIH07CiAKLWNsYXNzIENDTGF5ZXJUcmVlSG9z
dCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4geworLy8gUHJvdmlkZXMgaW5m
b3JtYXRpb24gb24gYW4gSW1wbCdzIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUg
Q0NMYXllclRyZWVIb3N0CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7CisgICAg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpCisgICAgICAgIDogYmVzdFRleHR1cmVGb3JtYXQo
MCkKKyAgICAgICAgLCB1c2luZ01hcFN1YihmYWxzZSkKKyAgICAgICAgLCB1c2luZ0FjY2VsZXJh
dGVkUGFpbnRpbmcoZmFsc2UpCisgICAgICAgICwgbWF4VGV4dHVyZVNpemUoMCkgeyB9CisKKyAg
ICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdDsKKyAgICBib29sIHVzaW5nTWFwU3ViOworICAg
IGJvb2wgdXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOworICAgIGludCBtYXhUZXh0dXJlU2l6ZTsK
K307CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJU
cmVlSG9zdD4sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eUNsaWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9z
dCgpOwogCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Q2xpZW50IGltcGxlbWVudGF0
aW9uCiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKTsKLQorICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RocmVhZD4gY3Jl
YXRlQ29tcG9zaXRvclRocmVhZCgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgUGFz
c093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOwotCisgICAg
dmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7Cisj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVD
b21wb3NpdGUoKTsKKyNlbmRpZgogICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpbmc7IH0KICAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBt
X2FuaW1hdGluZyA9IGFuaW1hdGluZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJl
YWRlZCBzY2hlZHVsaW5nIG1vdmVzIGluc2lkZS4KIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVu
dCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KIAorI2lmICFVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisgICAgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworI2VuZGlmCisKICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGNvbXBvc2l0
ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBm
aW5pc2hBbGxSZW5kZXJpbmcoKTsKIApAQCAtMTAwLDYgKzEyMyw5IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsK
IAorICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKSBjb25zdDsKKyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAg
ICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXcoKTsKIApAQCAtMTE1LDIxICsxNDEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCBy
ZW5kZXJpbmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQg
Y29tcG9zaXRlKGJvb2wgZmluaXNoKTsKLQotICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0
KCk7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSBjb25zdCB7
IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KLSNlbmRpZgotCiAgICAgTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhvc3QoKSBjb25zdCB7IHJldHVy
biBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5nZXQoKTsgfQogCi0gICAgYm9vbCBjb250ZXh0
U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yjsg
fQotICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNp
emU7IH0KLSAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpIHsgcmV0dXJuIG1fYmVzdFRl
eHR1cmVGb3JtYXQ7IH0KLQogcHJvdGVjdGVkOgogICAgIENDTGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAKQEAgLTEzOCwxOSArMTUxLDYg
QEAgcHJpdmF0ZToKIAogICAgIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVh
dGVMYXllclJlbmRlcmVyKCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10
aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQot
ICAgIHZvaWQgZG9Db21wb3NpdGUoKTsKLSAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwot
Ci0gICAgYm9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotI2VuZGlmCi0KLSAgICBpbnQgbV9t
YXhUZXh0dXJlU2l6ZTsKLSAgICBHQzNEZW51bSBtX2Jlc3RUZXh0dXJlRm9ybWF0OwotICAgIGJv
b2wgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBib29sIG1fYW5pbWF0aW5nOwogCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBtX2NsaWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCmluZGV4IDcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5
MjRmZjVjZDIwNTg2OTliZWEuLjQyMWRmOGM5Mjk3NjU1Nzg5MmJjZGI2OTNiZmQ5ZDhlMTAyMjU2
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcApA
QCAtMjYsNiArMjYsMTEgQEAKIAogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5oIgogCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgorI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXpl
ci5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogCkBAIC0zOCw3
ICs0MywyMSBAQCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9z
dEltcGwpCiB7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29t
bWl0IiwgdGhpcywgMCk7CiAgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3Qt
PmZyYW1lTnVtYmVyKCkpOworICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydChob3N0LT52aWV3cG9y
dFNpemUoKSk7CisKKyAgICAvLyBJZiBjb21wb3NpdGluZyBpcyB0dXJuZWQgb2ZmIGR1cmluZyBw
YWludCwKKyAgICAvLyB0aGlzIGlzIHdoZXJlIHdlJ2xsIG5vdGljZSBpdC4KKyAgICBpZiAoIWhv
c3QtPnJvb3RMYXllcigpKSB7CisgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaG9zdC0+cm9vdExheWVyKCktPnBsYXRm
b3JtTGF5ZXIoKS0+bGF5ZXJSZW5kZXJlcigpICE9IGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCkp
CisgICAgICAgIGhvc3QtPnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVu
ZGVyZXJSZWN1cnNpdmUoaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKKyAgICBob3N0SW1w
bC0+c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMoaG9zdC0+
cm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgaG9zdEltcGwtPnJvb3RMYXllcigpKSk7CiB9
CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKaW5kZXgg
YmMzMThhNGE3MTQyMzJkMzE4NGQyZmVkNGFkODA5NTE3NTgzY2M5OS4uNmU2MzIxNTRjYzZkZWZi
MzE2ZWY4MWMxNWFkYzQzZjM1MDA4ZmM4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmgKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgQ0NMYXllclRyZWVIb3N0OwogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIAotLy8g
RklYTUU6IG1lcmdlIGluIFRyZWVTeW5jaHJvbml6ZXIgY29kZSBpbnRvIGhlcmUKIGNsYXNzIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKTsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKaW5kZXggNGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1Mzg2Njlh
ZS4uNGYwZmY4NTY4YjkzMTAwNjhjYmZiZGFkN2M1ZTQ2ZTVhOTRmYjBhYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTM4LDE4ICszOCwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXll
clRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwg
UGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKIHsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCByZW5k
ZXJlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbChjbGll
bnQsIHNldHRpbmdzKSk7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9z
dEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCitDQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVy
VHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NT
ZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwg
bV9mcmFtZU51bWJlcigwKQogICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9jb21taXRQ
ZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9y
ZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIApA
QCAtNjQsNzEgKzYyLDEwNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0
KCkKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSgpCiB7Ci0gICAg
bV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0gICAgc2V0TmVlZHNSZWRyYXcoKTsKIH0KIAotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK0dyYXBoaWNzQ29udGV4dDNEKiBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KCkKIHsKLSAgICAvLyBJZiBhIGNvbW1pdCBpcyBw
ZW5kaW5nLCBkbyBub3QgZHJhdy4gVGhpcyBpcyBhIHRlbXBvcmFyeSByZXN0cmljdGlvbiB0aGF0
Ci0gICAgLy8gaXMgbmVjZXNzYXJ5IGJlY2F1c2UgZHJhd0xheWVycyBpcyBjdXJyZW50bHkgYSBi
bG9ja2luZyBvcGVyYXRpb24gb24gdGhlIG1haW4gdGhyZWFkLgotICAgIGlmIChtX2NvbW1pdFBl
bmRpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyID8gbV9s
YXllclJlbmRlcmVyLT5jb250ZXh0KCkgOiAwOworfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmRyYXdMYXllcnMoKQorewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKG1fcmVkcmF3UGVuZGluZyk7Ci0g
ICAgbV9yZWRyYXdQZW5kaW5nID0gZmFsc2U7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7
CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+cm9vdExheWVyKCkpIHsKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKKyAgICAgICAgbV9sYXllclJlbmRl
cmVyLT5kcmF3TGF5ZXJzKCk7CisgICAgfQogCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc0FuZFByZXNlbnQiLCB0aGlzLCAwKTsKLSAg
ICAgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICAgICAgYm9vbCBjb250ZXh0
TG9zdDsKLSAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFkVGFz
ayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZCwgQWxs
b3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbnRleHRMb3N0KSkpOwotICAgICAgICBjb21wbGV0aW9uLndhaXQoKTsKKyAgICArK21fZnJh
bWVOdW1iZXI7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IFNlbmQgdGhlICJVcGRhdGVSZWN0IiBt
ZXNzYWdlIHVwIHRvIHRoZSBSZW5kZXJXaWRnZXQgW29yIG1vdmVwbHVnaW4gZXF1aXZhbGVudHMu
Li5dCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7Cisg
ICAgbV9sYXllclJlbmRlcmVyLT5maW5pc2goKTsKK30KIAotICAgICAgICAvLyBGSVhNRTogaGFu
ZGxlIGNvbnRleHQgbG9zdAotICAgICAgICBpZiAoY29udGV4dExvc3QpCi0gICAgICAgICAgICBG
QVRBTCgiTGF5ZXJSZW5kZXJlckNocm9taXVtSW1wbCBkb2VzIG5vdCBoYW5kbGUgY29udGV4dCBs
b3N0IHlldC4iKTsKLSAgICB9Citib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExv
c3QoKQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIHJldHVybiBtX2xheWVy
UmVuZGVyZXItPmlzQ29udGV4dExvc3QoKTsKK30KIAotICAgICsrbV9mcmFtZU51bWJlcjsKK2Nv
bnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdEltcGw6OmxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVy
ZXItPmNhcGFiaWxpdGllcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCgp
CiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlciAmJiAhaXND
b250ZXh0TG9zdCgpKTsKKyAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKK30KIAotICAg
IC8vIEZJWE1FOiBtb3ZlIHRoZSByZXF1ZXN0RnJhbWVBbmRDb21taXQgb3V0IGZyb20gaGVyZSBv
bmNlIHdlIGFkZCBmcmFtZXJhdGUgdGhyb3R0bGluZy9hbmltYXRpb24KLSAgICBkb3VibGUgZnJh
bWVCZWdpblRpbWUgPSBjdXJyZW50VGltZSgpOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7
Ci0gICAgbV9jbGllbnQtPnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZnJhbWVCZWdp
blRpbWUpOwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpyZWFkYmFjayh2b2lkKiBwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1
ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldE5lZWRzUmVkcmF3KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVy
KFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQogewotICAgIGlmIChtX3JlZHJhd1BlbmRp
bmcgfHwgbV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgbV9yb290TGF5ZXJJ
bXBsID0gbGF5ZXI7Cit9CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOwot
ICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX2xh
eWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCitib29sIEND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9z
dCogaW1wbEhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikgewor
ICAgICAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAgICAgICAgbV9s
YXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIGNv
bnRleHQpOworCisgICAgICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tl
ZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcK
KyAgICAgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisgICAgICAg
IGlmICghbV9sYXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nKSB7
CisgICAgICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworICAg
ICAgICAgICAgbV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
aW1wbEhhY2ssIGNvbnRleHQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
TGF5ZXJSZW5kZXJlciByZWNyZWF0aW9uLi4uIGluIHRoZSBmdXR1cmUsIGRvIGEgZnVsbCBkZWxl
dGUtYW5kLXJlY3JlYXRlLgorICAgICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBs
YXllclJlbmRlcmVyOworICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCBjb250ZXh0KTsKKworICAgICAg
ICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVk
IHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCisgICAgICAgIC8vIGFuZCB0
cnkgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGFnYWluLgorICAgICAgICBpZiAoIWxheWVyUmVuZGVy
ZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgICAgIG1fc2V0
dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgICAgICBsYXllclJlbmRl
cmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25l
cigpLCBjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllclJlbmRlcmVyKQor
ICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigp
LT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyUmVuZGVyZXIuZ2V0KCkpOworICAgICAg
ICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgIH0KKyAgICByZXR1cm4gISFt
X2xheWVyUmVuZGVyZXI7Cit9CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5y
b290TGF5ZXIoKSkgewotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKLSAg
ICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisvLyBGSVhNRTogbW92ZSBhbGwgdGhp
cyBjb2RlIHRvIExUSAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKQor
eworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBk
YXRlTGF5ZXJzKCk7Cit9CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBt
X2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIH0gZWxzZQotICAgICAgICAqY29udGV4dExvc3Qg
PSBmYWxzZTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQoreworICAgIGJv
b2wgY2hhbmdlZCA9IHZpZXdwb3J0U2l6ZSAhPSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBtX3ZpZXdw
b3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKKyAgICBpZiAoY2hhbmdlZCkKKyAgICAgICAgbV9sYXll
clJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5oCmluZGV4IGM0MTFjY2M3MzU1NGYxZGQzMmJjY2UyZTE1ZTQ4ZGJlY2Fj
NGE4OGUuLjlmNTc2YjBjN2RmMjY0MGRmMmRjNDA1ZGFlNmNkYmRhNjk3MmI5ZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDIwICsyNSwyMCBAQAogI2lmbmRl
ZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAK
LSNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNv
dW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVu
dDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworc3Ry
dWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CiAKIC8vIFByb3ZpZGVzIHNjaGVkdWxpbmcg
aW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCAgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKSA9IDA7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KCkgeyB9CkBAIC00OCwzMyArNDgs
NTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJ
bXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVl
SG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKKwogICAgIHZvaWQgZHJhd0xheWVycygpOwogCisgICAgdm9pZCBmaW5pc2hBbGxSZW5k
ZXJpbmcoKTsKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVt
YmVyOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOworICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXll
clRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAg
ICBib29sIGlzQ29udGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3Q7CisKKyAgICB2b2lkIHByZXNlbnQoKTsKKworICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290TGF5
ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wp
OwogCiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VG
cmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVt
YmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCisgICAgdm9pZCB1
cGRhdGVMYXllcnMoKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmll
d3BvcnRTaXplKTsKKyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+KTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqLCBib29sKiBjb250ZXh0TG9zdCk7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGludCBtX3Nv
dXJjZUZyYW1lTnVtYmVyOwogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCiBwcml2YXRlOgogICAg
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OwotICAgIGJvb2wgbV9jb21taXRQ
ZW5kaW5nOwogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJl
cjsKLSAgICBib29sIG1fcmVkcmF3UGVuZGluZzsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1f
cm9vdExheWVySW1wbDsKKyAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CisgICAgSW50U2l6ZSBt
X3ZpZXdwb3J0U2l6ZTsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFkOGExYjY0ZTJk
NWU1YWE4NWZjMjZmMGE2N2MzYzAxNTk0MzA2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxD
Q1RocmVhZFByb3h5LmNwcApAQCAtMCwwICsxLDI4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFk
UHJveHkuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNj
L0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVt
UHJveGllcyA9IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBD
Q0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCog
Y2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkoY2xpZW50KSk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGNs
aWVudCkKKyAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fY2xpZW50KGNsaWVu
dCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkg
eworICAgICAgICBjY1RocmVhZCA9IG1fY2xpZW50LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCku
bGVha1B0cigpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJl
YWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworICAgIH0KK30KKworCitDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5KCkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6On5DQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2NsaWVu
dCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KKworICAgIG51bVByb3hpZXMtLTsK
KyAgICBpZiAoIW51bVByb3hpZXMpIHsKKyAgICAgICAgZGVsZXRlIGNjVGhyZWFkOworICAgICAg
ICBjY1RocmVhZCA9IDA7CisgICAgfQorfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJl
Y3QmIHJlY3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxS
ZW5kZXJpbmcoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIENDTGF5
ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93
bmVySGFjaykKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2Ns
aWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7
CisKKyAgICAvLyBMZWFrIHRoZSBjb250ZXh0IHBvaW50ZXIgc28gd2UgY2FuIHRyYW5zZmVyIG93
bmVyc2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgorICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0UHRyID0gY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpOworICAgIEFTU0VSVChj
b250ZXh0UHRyLT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0
byBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQuIFRoZSByZXN1bHRzIG9mIHRoYXQg
Y2FsbAorICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgb2sgYW5kIGNhcHMgbG9jYWwgdmFyYWli
bGVzLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgYm9vbCBvazsKKyAg
ICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhv
d25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJm9rKSwgQWxsb3dDcm9zc1RocmVh
ZEFjY2VzcygmY2FwYWJpbGl0aWVzKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAg
aWYgKG9rKQorICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29w
eSA9IGNhcGFiaWxpdGllczsKKyAgICByZXR1cm4gb2s7Cit9CisKK2NvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpsYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRB
bmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIGNj
VGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9z
dEltcGxDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRy
YXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRWaXNp
YmxlT25DQ1RocmVhZCwgdmlzaWJsZSkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxD
Q1RocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBs
LgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGlt
cGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVk
LgorICAgIG1fY2xpZW50ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQi
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIC8vIFRPRE86IGNhbGwgYmVnaW5GcmFtZUFuZENvbW1pdCBvbiBtYWlu
IHRocmVhZAorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZy
YW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1fY2xp
ZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2Nv
bW1pdFBlbmRpbmcgPSBmYWxzZTsKKworICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI+IGNvbW1pdHRlciA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7
CisgICAgbV9jbGllbnQtPmJlZ2luQ29tbWl0KCk7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRv
IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpwZXJmb3JtQ29tbWl0CisgICAgQ0ND
b21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Y29t
bWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkpLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2Fp
dCgpOworCisgICAgY29tbWl0dGVyLmNsZWFyKCk7CisgICAgbV9jbGllbnQtPmNvbW1pdENvbXBs
ZXRlKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpjb21taXRP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21t
aXQoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1p
dCIsIHRoaXMsIDApOworICAgICAgICAvLy8geHh4IGdldCByaWQgb2YgdGhpcyBzdGF0aWMgY2Fz
dCBzb21laG93Li4uCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCA9IHN0YXRpY19jYXN0
PENDTGF5ZXJUcmVlSG9zdCo+KG1fY2xpZW50KTsKKyAgICAgICAgY29tbWl0dGVyLT5jb21taXQo
aG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsK
KyAgICBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGlmICht
X2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5
ZXJzKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRy
ZWVIb3N0SW1wbCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldFZpc2libGVPbkNDVGhyZWFkKGJvb2wgdmlz
aWJsZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQq
IGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2NsaWVudC0+
Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7
Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVM
YXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBi
b29sKiBvaywgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoYWRvcHRSZWYo
Y29udGV4dFB0cikpOworICAgICpvayA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVM
YXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgaWYgKCpvaykKKyAgICAgICAg
KmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVI
b3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44YTllZjk3M2ZlNGUwZDVjOTZkYjBhMTIyOGFjM2ZlYWIzZTc4MTk4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5X2gK
KyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAi
Y2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVl
SG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKKworY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbENDVGhyZWFkUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGNs
aWVudCk7CisKKyAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eSgp
OworCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IGltcGxlbWVudGF0aW9uCisgICAg
dmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlzU3Rh
cnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihD
Q0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJh
dygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhyZWFkCisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDTGF5
ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworCisgICAgLy8g
Q2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCisgICAgdm9p
ZCBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpOworICAgIHZvaWQgY29tbWl0T25DQ1Ro
cmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIqLCBDQ0NvbXBsZXRpb25FdmVudCopOworICAg
IHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVJbXBsT25D
Q1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdCosIEdyYXBoaWNzQ29udGV4dDNEKiwgQ0ND
b21wbGV0aW9uRXZlbnQqLCBib29sKiBvaywgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOwor
ICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBz
ZXRWaXNpYmxlT25DQ1RocmVhZChib29sKTsKKyAgICB2b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRP
bkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisKKyAgICAvLyBVc2VkIG9uIG1haW4tdGhy
ZWFkIG9ubHkuCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisKKyAgICAvLyBBY2Nlc3NlZCBv
biBtYWluIHRocmVhZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9jbGllbnQ7CisgICAg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWlu
VGhyZWFkQ29weTsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBv
biBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFp
blRocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjliOWYwMzAyNzk5ZTk3OWNmOTliYzNiN2Ri
NjViZGFkMmUwNGUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaCIKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgor
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVh
ZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFk
IHsKK3B1YmxpYzoKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5E
RUJVRworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRo
cmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9Cit9OworCitQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eT4gQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y3JlYXRl
KENDTGF5ZXJUcmVlSG9zdCogY2xpZW50KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NM
YXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eShjbGllbnQpKTsKK30KKworQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eShDQ0xheWVyVHJlZUhvc3QqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAg
ICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSIsIHRoaXMsIDAp
OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKKwordm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsTWFpblRocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJU
cmVlSG9zdEltcGwodGhpcyk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6fkNDTGF5ZXJUcmVlSG9z
dEltcGxNYWluVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9jbGllbnQpOyAvLyBt
YWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU2Nv
cGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIGlmICghZG9Db21wb3NpdGUoZmFsc2UpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhw
aXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb250
ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxU
aHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOwor
fQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJl
bmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVy
aW5nKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6aXNT
dGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVy
biBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGxNYWlu
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3du
ZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fY2xp
ZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsK
KworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICByZXR1
cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNr
LCBjb250ZXh0KTsKKyAgICB9Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKSBjb25zdAoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1
cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9y
Q29udGV4dCgpCit7CisgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKK30K
Kwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9j
b21taXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKKyNlbHNlCisgICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAg
ICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c2V0TmVl
ZHNSZWRyYXcoKQoreworICAgIC8vIFdlIGRvbid0IG9wdGltaXplIHRoaXMgY2FzZSBpbiB0aGUg
bWFpbiB0aHJlYWRlZCBjYXNlLgorICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c2V0VmlzaWJsZShib29s
IHZpc2libGUpCit7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgfQorICAgIG1f
Y2xpZW50ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7
CisjZWxzZQorICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFBy
b3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVu
ZGluZyA9IHRydWU7CisgICAgQ0NNYWluVGhyZWFkOjpwb3N0VGFzayhjcmVhdGVNYWluVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRl
SWZOZWVkZWQpKTsKKyNlbmRpZgorfQorCisvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVs
aW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQor
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlh
dGVseSgpCit7CisgICAgZG9Db21wb3NpdGUodHJ1ZSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRlSWZOZWVkZWQoKQoreworICAgIGlmICht
X2NvbW1pdFBlbmRpbmcpIHsKKyAgICAgICAgLy8gVXBkYXRlCisgICAgICAgIGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIG1fY2xpZW50LT5hbmltYXRlQW5k
TGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBk
YXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8gQ29tbWl0CisgICAgICAgIE93blB0cjxDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRlciA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVI
b3N0Q29tbWl0dGVyKCk7CisgICAgICAgIG1fY2xpZW50LT5iZWdpbkNvbW1pdCgpOworICAgICAg
ICB7CisgICAgICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgICAgICAgICAgY29tbWl0dGVy
LT5jb21taXQobV9jbGllbnQsIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgfQorICAg
ICAgICBjb21taXR0ZXIuY2xlYXIoKTsKKyAgICAgICAgbV9jbGllbnQtPmNvbW1pdENvbXBsZXRl
KCk7CisKKyAgICAgICAgLy8gRHJhdworICAgICAgICBkb0NvbXBvc2l0ZSh0cnVlKTsKKyAgICB9
Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6ZG9Db21wb3Np
dGUoYm9vbCBwcmVzZW50UmVzdWx0KQoreworICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0Nv
bnRleHQpIHsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9j
bGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICAgICAgQVNTRVJUKGNv
bnRleHQtPmhhc09uZVJlZigpKTsKKyAgICAgICAgYm9vbCBvayA9ICFtX2xheWVyVHJlZUhvc3RJ
bXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KTsKKyAgICAgICAgbV9jbGll
bnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJz
KCk7CisgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKSB7Cisg
ICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxs
IG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNh
dXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAg
ICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJl
dmVydGluZyBvdXIKKyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFk
LCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJl
ciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRp
b24KKyAgICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAg
ICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisK
KyAgICAgIGlmIChwcmVzZW50UmVzdWx0KQorICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PnByZXNlbnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjdjZmFiZTk2MDU3Y2NlMTBkMjUwOTNmYWZhOWNhYzRiNTExMTUyZGYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5LmgKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
X2gKKyNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eV9oCisKKyNpbmNs
dWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXll
clRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworCitjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBjcmVhdGUoQ0NMYXllclRyZWVI
b3N0Kik7CisgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSgp
OworCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IGltcGxlbWVudGF0aW9uCisgICAg
dmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50
UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlzU3Rh
cnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihD
Q0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJh
dygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1YWwgdm9p
ZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIENDVGhyZWFkCisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9u
cy4KKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlSW1t
ZWRpYXRlbHkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVl
SG9zdEltcGxNYWluVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisgICAgdm9pZCBjb21w
b3NpdGVJZk5lZWRlZCgpOworICAgIGJvb2wgZG9Db21wb3NpdGUoYm9vbCBwcmVzZW50UmVzdWx0
KTsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRy
ZWVIb3N0KiBtX2NsaWVudDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hl
Y2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAg
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisKKyAgICBi
b29sIG1fY29tbWl0UGVuZGluZzsKKyAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcAppbmRleCBhNjY5Mjg4NTY0NTk2ZDg3ODI2NzY2MWQzZjk0NjFlYmZiNjYy
ZTk4Li41MDExYjI0NGZmMzg0YTgyOGY2NTU2NDgyZDRiOGI0ZjllMjNhNzk0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKQEAgLTM2LDIwMCArMzYs
MzIgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1uYW1l
c3BhY2UgewotQ0NUaHJlYWQqIGNjVGhyZWFkOwotaW50IG51bVByb3hpZXMgPSAwOwotfQotCi1D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVy
VHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0g
ICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKLXsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlz
LCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG51bVByb3hpZXMrKzsKLSAg
ICBpZiAoIWNjVGhyZWFkKQotICAgICAgICBjY1RocmVhZCA9IGxheWVyVHJlZUhvc3QtPmNsaWVu
dCgpLT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkubGVha1B0cigpOwotfQotCi0KLXZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCi17Ci0gICAgLy8gQ3JlYXRlIExheWVyVHJl
ZUhvc3RJbXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBs
ZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRo
aXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVy
VHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdv
dCBjYWxsZWQuCi0KLSAgICBudW1Qcm94aWVzLS07Ci0gICAgaWYgKCFudW1Qcm94aWVzKSB7Ci0g
ICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKLSAgICAgICAgY2NUaHJlYWQgPSAwOwotICAgIH0KLX0K
LQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKLXsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1Ro
cmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdP
bkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkK
LXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhp
cywgMCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBTeW5jaHJvbm91c2x5
IGRlbGV0ZXMgdGhlIGltcGwuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAg
ICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3Nz
VGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0g
ICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwg
ZGVsZXRlZC4KLSAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwotfQotCi12b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCi17Ci0gICAgQVNT
RVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAg
IEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0g
ICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywg
JkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJl
Z2luVGltZSkpOwotfQotCiAjaWZuZGVmIE5ERUJVRwogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmlzTWFpblRocmVhZCgpCiB7CiAgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7CiB9
CiAKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi1ib29sIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09
IGNjVGhyZWFkLT50aHJlYWRJRCgpOwotfQotI2Vsc2UKIG5hbWVzcGFjZSB7CiBib29sIGZha2VJ
bXBsVGhyZWFkID0gZmFsc2U7CitzdGF0aWMgV1RGOjpUaHJlYWRJZGVudGlmaWVyIGltcGxUaHJl
YWRJRDsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgp
CiB7Ci0gICAgcmV0dXJuIGZha2VJbXBsVGhyZWFkOworICAgIHJldHVybiBmYWtlSW1wbFRocmVh
ZCB8fCBjdXJyZW50VGhyZWFkKCkgPT0gaW1wbFRocmVhZElEOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChib29sIHZhbHVlKQogewogICAgIGZha2VJ
bXBsVGhyZWFkID0gdmFsdWU7CiB9Ci0jZW5kaWYgLy8gVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQotCi0jZW5kaWYgLy8gIU5ERUJVRwotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKLXsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmICghbV9sYXllclRyZWVIb3N0KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1
ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKLSAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKLSAgICB9
Ci0KLSAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKLQotICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI+IGNvbW1pdHRlciA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+YmVnaW5Db21taXQoKTsK
LQotICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpwZXJm
b3JtQ29tbWl0Ci0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29tbWl0dGVy
LmdldCgpKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21w
bGV0aW9uLndhaXQoKTsKLQotICAgIGNvbW1pdHRlci5jbGVhcigpOwotCi0gICAgbV9sYXllclRy
ZWVIb3N0LT5jb21taXRDb21wbGV0ZSgpOwotfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIqIGNvbW1pdHRl
ciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIgdmFsdWUpCiB7Ci0g
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOwotICAgICAgICBjb21taXR0ZXItPmNv
bW1pdChtX2xheWVyVHJlZUhvc3QsIG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwotICAgIH0K
LSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNv
bW1pdENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3
TGF5ZXJzT25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJ
bXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQotewotICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+c2V0TmVlZHNSZWRyYXcoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxl
dGlvbikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0
SW1wbE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwot
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJl
ZUhvc3RJbXBsKHRoaXMpOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIGltcGxUaHJl
YWRJRCA9IHZhbHVlOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJU
cmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCi17
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVlSG9z
dENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKLSAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKLX0KKyNlbmRpZiAvLyAhTkRFQlVHCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmgKaW5kZXggZDAyMDdlNTYxNzYyYWMxZGRmOWRkODc4Mzc4ZDU0
NjM1NmM3ODdiYS4uNTA2NzgzMjk1OWZkMjc3MjJkZjEwOGIxODQ1YmQ3NmFlNzhjZDdhYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKQEAgLTI1LDY2ICsy
NSw3OSBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAogI2RlZmluZSBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHlfaAogCi0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQu
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIENDVGhyZWFkOwogY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CiBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXI7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK3N0cnVjdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOwogCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHlDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eUNsaWVudCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNv
bW1pdCgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKSA9IDA7CisgICAg
dmlydHVhbCBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCopID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyPiBjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpID0gMDsKKyNpZiAhVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0
ZSgpID0gMDsKKyNlbmRpZgorfTsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkpOwogcHVi
bGljOgotICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpOworICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpIHsgfQorCisgICAgdmlydHVhbCBib29sIGNv
bXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpID0gMDsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSA9IDA7IC8vIFRlbXBvcmFy
eSBoYWNrIHVudGlsIHRoZSBzY2hlZHVsaW5nIGludmVyc2lvbiBpcyBjb21wbGV0ZWQuCisKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCkgPSAwOwogCi0gICAgYm9vbCBpc1N0
YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3QgPSAwOwog
Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIHZvaWQgc2V0TmVlZHNS
ZWRyYXcoKTsKKyAgICAvLyBUaGUgb3duZXJIYWNrIGFyZ3VtZW50IGlzIHRvIGFsbG93IGludHJv
ZHVjaW5nIHRoZSBJbXBsUHJveHkgc3ViY2xhc3NlcworICAgIC8vIHdpdGhvdXQgYWxzbyB0cnlp
bmcgdG8gY2hhbmdlIExheWVyUmVuZGVyZXJDaHJvbWl1bSB0byBwb2ludCBhdAorICAgIC8vIEND
TGF5ZXJUcmVlSG9zdEltcGwuCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRl
cmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKSA9IDA7CiAKLSAgICB2b2lkIHN0YXJ0KCk7
IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCi0gICAgdm9pZCBzdG9w
KCk7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisgICAgdmly
dHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3QgPSAwOwogCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0t
IGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tP
bkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NU
aHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICAvLyBUZXN0aW5nIGhvb2sKKyAgICB2
aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCkgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIHVzaW5nIHRoZSBwcm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KIAogI2lmbmRlZiBOREVCVUcK
ICAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKICAgICBzdGF0aWMgYm9vbCBpc0ltcGxU
aHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZha2UgdGhy
ZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29ycmVjdCB1c2FnZS4KLSAgICBz
dGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlmCiAjZW5kaWYKIAogcHJvdGVj
dGVkOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhv
c3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29u
c3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVk
IG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBm
cmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2b2lkIGNv
bW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZl
bnQqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBpbml0SW1w
bE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFk
KCk7Ci0gICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25F
dmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wgbV9j
b21taXRQZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KLSAg
ICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQotICAgIC8vIFVzZWQgb24gdGhl
IENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRp
b24vc2h1dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVl
SG9zdEltcGw7CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCkgeyB9CisgICAgZnJpZW5k
IGNsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQ7CisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVh
ZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRp
ZmllciB2YWx1ZSk7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKaW5kZXgg
ZmFjNmU2NDNmMDVhMThiYmJhYWQ1N2IyOWJiYzAzYTYyODBlYWM4YS4uNGMzM2JhYTA3YWRkMzU3
NzM5ZGRiNTE3NjFlODQ3Yjc0ZTUxYzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2su
aApAQCAtMTU4LDYgKzE1OCw4OCBAQCBwcml2YXRlOgogICAgIFAzIG1fcGFyYW1ldGVyMzsKIH07
CiAKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlw
ZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5h
bWUgUDQsIHR5cGVuYW1lIE1QND4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNCA6IHB1YmxpYyBDQ01h
aW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCko
TVAxLCBNUDIsIE1QMywgTVA0KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrNDxULCBQMSwg
TVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFy
YW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFy
YW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMs
IFBhcmFtNCBwYXJhbWV0ZXI0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBN
YWluVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVy
MiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNYWlu
VGhyZWFkVGFzazQoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIx
LCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0
KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgeworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRp
Y19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0
ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0
ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFtZXRlcjQ7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQ
MiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwg
dHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorY2xhc3MgTWFpblRocmVh
ZFRhc2s1IDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSk7CisgICAgdHlwZWRl
ZiBNYWluVGhyZWFkVGFzazU8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwg
UDUsIE1QNT4gTWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NU
aHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0z
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1U
eXBlIFBhcmFtNDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
NT46OlBhcmFtVHlwZSBQYXJhbTU7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFk
VGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFt
ZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBNYWluVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFy
YW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNYWluVGhyZWFkVGFzazUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMs
IFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICAgICAgOiBDQ01haW5U
aHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJh
bWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1f
cGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsK
KyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFt
ZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1l
dGVyNSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBt
X3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsK
KyAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgUDUgbV9wYXJhbWV0ZXI1OworfTsKKwogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIFBhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWlu
VGhyZWFkVGFzaygKICAgICBUKiBjb25zdCBjYWxsZWUsCkBAIC0yMTUsNiArMjk3LDQ2IEBAIFBh
c3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKICAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QND4KK1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFk
VGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBN
UDIsIE1QMywgTVA0KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYg
cGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFy
YW1ldGVyNCkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2s0PFQsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQ
Mj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0Pjo6Y3JlYXRlKAorICAg
ICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNv
cHkocGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJh
bWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQp
KTsKKworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAx
LCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0
eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorUGFz
c093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQq
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQs
IE1QNSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRl
cjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQs
CisgICAgY29uc3QgUDUmIHBhcmFtZXRlcjUpCit7CisgICAgcmV0dXJuIE1haW5UaHJlYWRUYXNr
NTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUs
IE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVhdGUo
CisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAy
Pjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5
KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1l
dGVyNCksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSk7
CisKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gQ0NNYWluVGhyZWFk
VGFza19oCisjZW5kaWYgLy8gTWFpblRocmVhZFRhc2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApp
bmRleCA5MWM1OGU1ZDI1YjdiYjI4NmUyMTZjNGUwNjhjYmUxMDk1NzhmMTgzLi5kOGRlNGFiMDM0
Njk4ODc2OWZiZTI2NzRmZDMyMzYxMGM0NWQ3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApA
QCAtMTk4LDYgKzE5OCw0OCBAQCBwcml2YXRlOgogICAgIFA0IG1fcGFyYW1ldGVyNDsKIH07CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1l
IFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0
LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBDQ1RocmVh
ZFRhc2s1IDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZv
aWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIEND
VGhyZWFkVGFzazU8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1Q
NT4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJh
bTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJh
bVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4g
Y3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFy
YW01IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhy
ZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFy
YW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBDQ1RocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1l
dGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1l
dGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFu
Y2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShw
YXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAs
IG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0
ZXI0KQorICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQorICAgIHsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNf
Y2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVy
MiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1ldGVyNSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAg
UDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFtZXRl
cjQ7CisgICAgUDUgbV9wYXJhbWV0ZXI1OworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIFBh
c3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKICAgICBUKiBjb25z
dCBjYWxsZWUsCkBAIC0yNzQsNiArMzE2LDI3IEBAIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+
IGNyZWF0ZUNDVGhyZWFkVGFzaygKIAogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQ
MywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwg
dHlwZW5hbWUgTVA1PgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRU
YXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1Q
MiwgTVAzLCBNUDQsIE1QNSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3Qg
UDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQm
IHBhcmFtZXRlcjQsCisgICAgY29uc3QgUDUmIHBhcmFtZXRlcjUpCit7CisgICAgcmV0dXJuIEND
VGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1
Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpj
b3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFy
YW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEND
VGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcAppbmRleCAxYzVmODc3MjUyNjZiMDg4ZjY4NjY3NDZjOGQzYTFmOTYzYjU3
N2MyLi5kOTk0M2U3MTNhMjBhNGQ3YjA5MDQxYTRlY2NmNzdkOTBiMzNiMzZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAgcHVibGljOgogICAgIE1PQ0tfTUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBh
MSwgaW50IGEyKSk7CiAgICAgTU9DS19NRVRIT0QzKG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQg
YTIsIGludCBhMykpOwogICAgIE1PQ0tfTUVUSE9ENChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50
IGEyLCBpbnQgYTMsIGludCBhNCkpOworICAgIE1PQ0tfTUVUSE9ENShtZXRob2Q1LCB2b2lkKGlu
dCBhMSwgaW50IGEyLCBpbnQgYTMsIGludCBhNCwgaW50IGE1KSk7CiB9OwogCiBURVNUKENDVGhy
ZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKQEAgLTUxLDEyICs1MiwxNCBAQCBURVNUKEND
VGhyZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBt
ZXRob2QyKDksIDgpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QzKDks
IDgsIDcpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q0KDksIDgsIDcs
IDYpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q1KDksIDgsIDcsIDYs
IDUpKS5UaW1lcygxKTsKIAogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1l
dGhvZDApLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1v
Y2s6Om1ldGhvZDEsIDkpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygm
bW9jaywgJk1vY2s6Om1ldGhvZDIsIDksIDgpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUND
VGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5wZXJmb3JtVGFzaygp
OwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQsIDksIDgsIDcs
IDYpLT5wZXJmb3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6
Om1ldGhvZDUsIDksIDgsIDcsIDYsIDUpLT5wZXJmb3JtVGFzaygpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105197</attachid>
            <date>2011-08-25 09:00:05 -0700</date>
            <delta_ts>2011-08-25 16:11:43 -0700</delta_ts>
            <desc>All features work as advertised.</desc>
            <filename>bug-66807-20110825090004.patch</filename>
            <type>text/plain</type>
            <size>99922</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhZDJmMjNkNjU3N2I1YTMx
MDUyMmVkNmRjMzJiNDM5OGFkOTgxMDYxLi4zYzVhN2ExZmEzZTIxNDQ2NjdlOWJjMGFhMjI0ZDJi
NGU5OTU1ZTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMjMgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNl
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXll
clJlbmRlcmVyIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6U2NvcGVk
U2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTZXRJbXBsVGhyZWFkOjp+
U2NvcGVkU2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJ
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaDoKKwogMjAxMS0wOC0yNCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEpTSFRNTEltYWdlRWxlbWVudCAoYW5kIGFzc29jaWF0ZWQg
Tm9kZSkgaXMgYWJhbmRvbmVkIHdoZW4gaW1hZ2UgbG9hZCBpcyBjYW5jZWxlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDlkN2IwY2MwZWMzYTkzMGY2NmI5OWY1MzcwMzFlMjBjMjUzOTgyMzcuLjQwOWY3
ZjQwNTczYTFmZjRlNzUzYzg2MDhjZDIzMmI1ZDI1OWRlYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1MzEsMTAgKzM1MzEsMTIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWFpblRocmVhZC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDU5YzJjY2ExZDkyY2QzYWVmNjNhNDcwMWUwNWJkMWZiYWFjYjg0ZTcuLjdlY2M1ZDRhMzhl
MGE3NTk0MmFkNjIyM2UxYTlmNTZhYzIyZDFmMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTEyMCwxNiArMTIwLDE2IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21p
dW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNy
ZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKLSNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQogICAgIGlmIChob3N0LT5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgeworI2lmIDAgLy8gQWNjZWxlcmF0ZWRQYWlu
dGluZyBpcyBicm9rZW4gYnkgdGhpcyBwYXRjaC4gV2lsbCBmaXggaW4gYSBmb2xsb3dvbiBwYXRj
aC4KICAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1
cmU6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmxh
eWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICNlbmRpZiAvLyBTS0lBCi0jZW5kaWYgLy8gIVRIUkVBREVEX0NPTVBPU0lUSU5HCiAK
LSAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRl
KENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+Y29udGV4dFN1cHBv
cnRzTWFwU3ViKCkpOworICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0
LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCAyM2M4NTU1ZjUwYmUxNmU4ZjhiZjMxOTFm
OGVjNTc4MTlkMmNjNWJjLi43MWJjMGI2YjlkYjY1NmJjNDYwZjRmODU2NTQ5NGZhNTdhYjUwYjhk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE4MSw3ICsxODEsNyBAQCBi
b29sIEltYWdlTGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBJbWFn
ZUxheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9z
dCogaG9zdCkKIHsKLSAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1hZ2VMYXllclRleHR1cmVVcGRh
dGVyOjpjcmVhdGUoaG9zdC0+Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkpOworICAgIG1fdGV4dHVy
ZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5sYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkudXNpbmdNYXBTdWIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDk1NjNlYWE1N2Y1NjczYzg1OTlkNGRiYWFjODhiOTJkOWM0OTQzNDguLmUw
NmJhMGQ4YjM0ZTBmNTM1MWM1NGE3NzIyMDNkNDMyOGE0NjMxOTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwCkBAIC05Niw2ICs5NiwyMCBAQCB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXMoKQogewogfQogCit2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXJSZWN1
cnNpdmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKK3sKKyAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGMgPSBjaGlsZHJlbigpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgYy5zaXplKCk7ICsraSkKKyAgICAgICAgY1tpXS0+c2V0TGF5ZXJSZW5k
ZXJlclJlY3Vyc2l2ZShyZW5kZXJlcik7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAg
IG1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKyAgICBp
ZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIHNldExheWVyUmVuZGVyZXIocmVuZGVyZXIp
OworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiByZW5kZXJlcikKIHsKICAgICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciBy
ZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFjM2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmZl
MmU0YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RMYXllcihi
b29sIGlzUm9vdExheWVyKSB7IG1faXNSb290TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQogICAgIGJv
b2wgaXNSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUm9vdExheWVyOyB9CiAKKyAgICB2
b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisK
ICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBu
ZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAgICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJv
bWl1bS4KICAgICAvLyBGSVhNRSwgcmVwbGFjZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGE2ZmIyNTgwM2FlNzA3MGYxMTVk
YzBjNDY1MDczYThlYzg3YTlhOTUuLmZkMDgxNzllYTg2OTUzMmJhYjI2Yjc0YjY3ODRjNjA1NDAx
OWY1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiAr
NDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRl
ICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFn
ZXIuaCIKQEAgLTQ0OSwxMyArNDUwLDEzIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0
ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIH0KICNlbmRpZgogCi1QYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVh
dGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJ
bXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7
CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWlu
dGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgp
KSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0o
b3duZXIsIGNvbnRleHQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5
ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25l
ckltcGwsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkp
CiAgICAgICAgIHJldHVybiAwOwogCkBAIC00NjMsOCArNDY0LDEwIEBAIFBhc3NSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVy
VHJlZUhvc3QqCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1fb3duZXJJ
bXBsKG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1f
b2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC00
ODMsMTQgKzQ4NiwxOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgp
CiAgICAgICAgIC8vIExpbWl0IHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGlu
IHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
bWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAqIDEwMjQgKiAxMDI0OwogICAgICAgICBtX3NraWFD
b250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRl
eHR1cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdBY2NlbGVyYXRl
ZFBhaW50aW5nID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4dGVuc2lv
bnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fY29u
dGV4dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21h
cF9zdWIiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpCisgICAgbV9jYXBhYmls
aXRpZXMudXNpbmdNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFw
X3N1YiIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YikKICAgICAgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogCisgICAgbV9j
YXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIG1fY2Fw
YWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1cmVG
b3JtYXQobV9jb250ZXh0LmdldCgpKTsKKwogICAgIGlmICghaW5pdGlhbGl6ZVNoYXJlZE9iamVj
dHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01NTMsMTMgKzU2MCw2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIC8vIFJlbmRlcldpZGdl
dC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7CiAK
LSAgICAvLyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5
IGJlY29tZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmlu
ZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIXJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1f
cm9vdENDTGF5ZXJJbXBsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB1
cGRhdGVMYXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAKQEAgLTU2OCwx
MiArNTY4LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAg
IGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMs
IDApOwotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV9yb290Q0NMYXllcklt
cGwuZ2V0KCkpOwotICAgIH0KLQotCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIt
PnNldE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzIC0gbV9jb250
ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CiAgICAgZHJhd0xh
eWVyc0ludGVybmFsKCk7CiAKQEAgLTcxOCw3ICs3MTIsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwot
ICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290Q0NMYXllckltcGwuZ2V0KCk7
CisgICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSByb290TGF5ZXJJbXBsKCk7CiAgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1
cmZhY2UoKSkKQEAgLTgyNiwyMCArODIwLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnByZXNlbnQoKQogICAgIG1faGVhZHNVcERpc3BsYXktPm9uUHJlc2VudCgpOwogfQogCi12b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+
ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vy
c2l2ZShjaGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQot
ICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0g
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJl
Y3Vyc2l2ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1
ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNT
RVJUKHJlY3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3
cG9ydEhlaWdodCgpKTsKQEAgLTkzNCw3ICs5MTQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIAog
TWFuYWdlZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJU
ZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYg
bV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zm
c2NyZWVuICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RMYXllckltcGwoKS0+cmVuZGVyU3VyZmFj
ZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCkBAIC0xMjkxLDcgKzEyNzEsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMs
IGluZGVudCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29sIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmlzQ29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9jb250ZXh0Lmdl
dCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAppbmRleCA5NTU4ZmExZTYwYTA0MDdhZjE5YTdjOGZiNTM2MTgyZDI4OGExM2M0Li5iMWYz
ZWIzNzIyMWIyZDg0NTNjNGIxZmRjNjY0NTc3ZTM5ZGRkZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJl
bmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNjL0NDSGVhZHNV
cERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgog
I2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xh
eWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw2ICs2NCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5
ZXJJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OyAvLyBUT0RPOiByZW1vdmUgcG9pbnRlcnMg
dG8gdGhpcwogY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbDsKIGNsYXNzIEdlb21ldHJ5QmluZGluZzsKQEAgLTcyLDExICs3NCwxMiBAQCBj
bGFzcyBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJh
d2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJl
bmRlcmVyQ2hyb21pdW0gOiBwdWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NM
YXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+KTsKIAogICAgIHZpcnR1YWwgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOwogCiAg
ICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVybiBtX293bmVyLT5z
ZXR0aW5ncygpOyB9CisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgY2FwYWJp
bGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KIAogICAgIENDTGF5ZXJU
cmVlSG9zdCogb3duZXIoKSB7IHJldHVybiBtX293bmVyOyB9CiAgICAgY29uc3QgQ0NMYXllclRy
ZWVIb3N0KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7IH0KQEAgLTg0LDE0ICs4Nywx
NyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgeyByZXR1cm4gbV9v
d25lci0+cm9vdExheWVyKCk7IH0KICAgICBjb25zdCBHcmFwaGljc0xheWVyKiByb290TGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogCisgICAgQ0NMYXllcklt
cGwqIHJvb3RMYXllckltcGwoKSB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0K
KyAgICBjb25zdCBDQ0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQorCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQoKTsKLSAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dFN1cHBvcnRzTWFwU3ViOyB9CisgICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIo
KSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YjsgfQogCiAjaWYgVVNF
KFNLSUEpCiAgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpIHsgcmV0dXJuIG1fc2tpYUNvbnRl
eHQuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkg
eyByZXR1cm4gbV9vd25lci0+dmlld3BvcnRTaXplKCk7IH0KKyAgICBjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVySW1wbC0+dmlld3BvcnRTaXplKCk7IH0KICAg
ICBpbnQgdmlld3BvcnRXaWR0aCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLndpZHRoKCk7IH0K
ICAgICBpbnQgdmlld3BvcnRIZWlnaHQoKSB7IHJldHVybiB2aWV3cG9ydFNpemUoKS5oZWlnaHQo
KTsgfQogCkBAIC0xNDMsMjMgKzE0OSwxNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgbGF5ZXJU
cmVlQXNUZXh0KCkgY29uc3Q7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgY29tcG9zaXRv
ciBjb250ZXh0IGhhcyBhbiBlcnJvci4KLSAgICBib29sIGlzQ29tcG9zaXRvckNvbnRleHRMb3N0
KCk7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CiAKICAgICB2b2lkIHJlbGVhc2VUZXh0dXJl
cygpOwogCi0gICAgdm9pZCBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0q
KTsKLQogICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAKICAgICB0eXBlZGVmIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJMaXN0OwogCiBwcml2YXRlOgotICAgIC8v
IEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBs
IHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RD
Q0xheWVySW1wbDsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3Qq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVw
ZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CkBAIC0xOTAsOCArMTkwLDExIEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpOwogICAgIHZvaWQgY2xlYW51cFNo
YXJlZE9iamVjdHMoKTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJl
ZUhvc3RJbXBsCisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzCiAgICAgQ0NMYXllclRyZWVIb3N0
KiBtX293bmVyOworICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG1fb3duZXJJbXBsOworCisgICAg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2NhcGFiaWxpdGllczsKIAogICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fcHJvamVjdGlvbk1hdHJpeDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3dpbmRvd01hdHJpeDsKQEAgLTIzMiw4ICsyMzUsNiBAQCBwcml2YXRlOgogICAgIE93blB0
cjxHckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CiAjZW5kaWYKIAotICAgIGJvb2wgbV9jb250ZXh0
U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBDQ1JlbmRlclN1cmZhY2UqIG1fZGVmYXVsdFJlbmRlclN1
cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJTb3J0ZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcAppbmRleCAzZTEwMmVjODY1Njk1ZjgzYmI3MDgxZTNiZmY2MTkxYmJh
ZDllMmMzLi5hNzllYTEyYzRkNzRjMTkxZWM0ZDYwN2ViZmQ0OGFkNWUzN2RmODNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIFRpbGVk
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAK
ICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0KTsKIAotICAgIG1fdGV4dHVyZUZvcm1hdCA9
IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4
dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIoKS0+b3JpZW50YXRpb24oKTsKICAgICBt
X3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1h
dChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3Jl
YXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggOTdlNzQyY2MxODI4Mjc4
YzZiNTJlMjk2YjgwZGU5N2I0YWExODA1YS4uNmZhZGVlMGJjNDhlNzY3ZWE4ZjM3YTQwMDVkYzhj
MmUwODg4YmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMCwxMCAr
MzAsMTIgQEAKICNpbmNsdWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAiVHJl
ZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9D
Q1RocmVhZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDEwICs0OCw3IEBAIFBh
c3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RDbGllbnQqIGNsaWVuCiB9CiAKIENDTGF5ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVI
b3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncykKLSAgICA6IG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dChmYWxzZSkKLSAgICAsIG1f
bWF4VGV4dHVyZVNpemUoMCkKLSAgICAsIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViKGZhbHNlKQot
ICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCisgICAgOiBtX2FuaW1hdGluZyhmYWxzZSkKICAgICAs
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fZnJhbWVOdW1iZXIoMCkKICAgICAsIG1fbm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0KE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6Y3JlYXRlKG1fY2xp
ZW50LT5jcmVhdGVSb290TGF5ZXJQYWludGVyKCkpKQpAQCAtNTksMTUgKzU4LDIzIEBAIENDTGF5
ZXJUcmVlSG9zdDo6Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50
LCBjb25zdCBDQ1NldHRpbmdzCiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkK
IHsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYg
KCFtX2xheWVyUmVuZGVyZXIpCisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIGlm
IChmYWxzZSkgLy8gVE9ETzogbWFrZSB0aHJlYWQgYSBydW50aW1lIGZsYWcgaW4gQ0NTZXR0aW5n
cworICAgICAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNy
ZWF0ZSh0aGlzKTsKKyAgICBlbHNlCisgICAgICAgIG1fcHJveHkgPSBDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpjcmVhdGUodGhpcyk7CisjZWxzZQorICAgIG1fcHJveHkgPSBD
Q0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpjcmVhdGUodGhpcyk7CisjZW5kaWYK
KyAgICBtX3Byb3h5LT5zdGFydCgpOworCisgICAgLy8gQ3JlYXRlIHRoZSByZW5kZXJlci4uLgor
ICAgIGlmICghbV9wcm94eS0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIodGhpcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhyZWFkZWQgY2FzZSwgdGhl
c2UgdmFsdWVzIHdpbGwgbmVlZCB0byBiZSBpbml0aWFsaXplZAotICAgIC8vIGJ5IHNvbWV0aGlu
ZyBvdGhlciB0aGFuIG1fbGF5ZXJSZW5kZXJlci4KLSAgICBtX21heFRleHR1cmVTaXplID0gbV9s
YXllclJlbmRlcmVyLT5tYXhUZXh0dXJlU2l6ZSgpOwotICAgIG1fYmVzdFRleHR1cmVGb3JtYXQg
PSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2xheWVyUmVuZGVyZXItPmNvbnRl
eHQoKSk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIgPSBtX2xheWVyUmVuZGVyZXItPmNv
bnRleHRTdXBwb3J0c01hcFN1YigpOworICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9u
IGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgorICAgIGlm
IChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyAmJiAhbV9wcm94eS0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZykKKyAgICAgICAgbV9zZXR0
aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKIAogICAgIG1fcm9vdExheWVyID0gR3Jh
cGhpY3NMYXllcjo6Y3JlYXRlKDApOwogI2lmbmRlZiBOREVCVUcKQEAgLTc3LDEyICs4NCw4IEBA
IGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIAogICAgIG1fcm9vdExheWVyLT5h
ZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpKTsKIAot
Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKLSAgICBBU1NFUlQobV9wcm94eS0+aXNTdGFy
dGVkKCkpOworICAgIC8vIFdlIGNoYW5nZWQgdGhlIHJvb3QgbGF5ZXIuIFRlbGwgdGhlIHByb3h5
IGEgY29tbWl0IGlzIG5lZWRlZC4KICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOwotI2VuZGlmCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkwLDYyICs5Myw3NyBAQCBi
b29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xh
eWVyVHJlZUhvc3QoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xh
eWVyVHJlZUhvc3QiLCB0aGlzLCAwKTsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAg
ICAgbV9wcm94eS0+c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsKLSNlbmRpZgogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXQoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogeworICAgIG1fYW5pbWF0
aW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGlt
ZSk7CisgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbW1pdENvbXBsZXRlKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVy
VHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKKyAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1i
ZXIoZnJhbWVOdW1iZXIoKSk7CisgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6
ZSgpKTsKKworICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4u
LgorICAgIGlmIChyb290TGF5ZXIoKSkgeworICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIHJ1bW9y
ZWQgdG8gYmUgcmVkdW5kYW50LiBJZiB3ZSBjYW4gZ2V0IHRoaW5ncyB3b3JraW5nLCByZW1vdmUg
aXQuCisgICAgICAgIGlmIChyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclJlbmRl
cmVyKCkgIT0gaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJvb3RMYXll
cigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoaG9zdEltcGwt
PmxheWVyUmVuZGVyZXIoKSk7CisKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVy
KCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOworICAgIH0gZWxzZQorICAgICAgICBob3N0SW1w
bC0+c2V0Um9vdExheWVyKDApOworCiAgICAgbV9mcmFtZU51bWJlcisrOwogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCitQ
YXNzT3duUHRyPENDVGhyZWFkPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0b3JUaHJl
YWQoKQogewotICAgIG1fYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+YW5pbWF0ZUFu
ZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKIH0KIAotUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBDQ0xheWVy
VHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogewotICAgIC8vIEZJWE1F
OiBvbmx5IGNhbGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCi0gICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29udGV4dDNEKCk7CiB9CiAKIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xp
ZW50KiBjbGllbnQpCiB7Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVy
ZXIobV9sYXllclJlbmRlcmVyKTsKLSAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3Jl
YXRlKGNsaWVudCwgcmVuZGVyZXIpOworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
cmVhdGUoY2xpZW50LCBtX3NldHRpbmdzKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5
ZXJUcmVlSG9zdDo6Y29udGV4dCgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVH
cmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewotICAgIHJldHVybiBtX2xheWVyUmVuZGVy
ZXItPmNvbnRleHQoKTsKKyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
c3VjY2Vzcyk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFj
ayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCisjaWYgIVVTRShUSFJFQURFRF9D
T01QT1NJVElORykKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiB7
Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGlt
cGxlbWVudCB0aGlzLgotI2Vsc2UKLSAgICBjb21wb3NpdGUoZmFsc2UpOwotICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKKyAgICBtX2NsaWVu
dC0+c2NoZWR1bGVDb21wb3NpdGUoKTsKK30KICNlbmRpZgorCitHcmFwaGljc0NvbnRleHQzRCog
Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4
dCgpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9p
ZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5j
b21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVl
SG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1f
bGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxS
ZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5
ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTE1Myw2ICsxNzEsMTEgQEAgdm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCkKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJl
Y3QoZGlydHlSZWN0KTsKIH0KIAorY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKQEAgLTE3NywxMSArMjAwLDggQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnNldFJvb3RMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5yZW1vdmVBbGxDaGlsZHJlbigpOwog
ICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsK
LSAgICBpZiAobGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPmFkZENoaWxkKGxheWVyKTsKLSAgICAgICAg
bGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIu
Z2V0KCkpOwotICAgIH0KLQogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQo
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTE5MiwxMDYgKzIxMiwyNiBAQCB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRT
aXplLCBjb25zdCBJbnRTaXplJiBjbwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5z
ZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CiAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+c2V0U2l6ZShjb250ZW50c1NpemUpOwogCi0gICAg
aWYgKHZpc2libGVSZWN0Q2hhbmdlZCkgeworICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpCiAg
ICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIo
KTsKLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0gICAgfQogCiAgICAgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNp
YmxlKQogewotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgaWYgKCF2aXNpYmxl
KQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwotI2VuZGlmCisg
ICAgbV9wcm94eS0+c2V0VmlzaWJsZShmYWxzZSk7CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQordm9p
ZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCiB7Ci0gICAgLy8gR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBj
YXNlIGZhbGwgYmFjayB0byBzb2Z0d2FyZS4KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwotICAg
IGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBY3R1YWxseSBjcmVh
dGUgdGhlIHJlbmRlcmVyLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsK
LQotICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxl
cmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKLSAgICAvLyBhbmQg
dHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KLSAgICBpZiAobV9zZXR0aW5ncy5hY2Nl
bGVyYXRlUGFpbnRpbmcgJiYgIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zZXR0aW5ncy5h
Y2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotICAgIH0KLQotICAgIHJl
dHVybiBsYXllclJlbmRlcmVyOworICAgIG1fcHJveHktPmxvc2VDb21wb3NpdG9yQ29udGV4dCgp
OwogfQogCiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLXZvaWQgQ0NMYXllclRyZWVI
b3N0Ojpkb0NvbXBvc2l0ZSgpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAg
bV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQog
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKIHsKLSAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlm
IChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJl
bmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVk
Ci0gICAgICAgIC8vIGluIGNyZWF0aW5nIGEgbmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2Nh
dGVSZW5kZXJlcigpOwotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYg
dGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVy
UmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3Np
dGUoKTsKLQotICAgICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVy
UmVuZGVyZXItPnByZXNlbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5p
c0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVy
IHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAg
ICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNz
YWdlIHdpbGwgb25seSBiZQotICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9u
IG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKLSAgICAgICAgLy8gcmVjb3Zlcnkg
YXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhl
Ci0gICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQg
bWVzc2FnZSBsb29wIGl0ZXJhdGlvbgotICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQg
eWV0IGFnYWluLgotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwot
ICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxs
b2NhdGVSZW5kZXJlcigpCi17Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5
ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVy
ZXIpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyUmVuZGVyZXItPnNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9s
YXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKKyAgICBzdGF0aWNfY2FzdDxDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5
KCk7CiB9CiAjZW5kaWYgLy8gIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAppbmRleCBmZGE3MjIwZjZhMmZmNTU5ZmQ2MGMxY2E5ZmZlNWQ2OWRj
ZWUzMjQxLi40NWM4NWQ1ZjBhOTA1MmQ4NTllZTRhODdiNDk3MDY0YzE5NGM3ODljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTczLDI2ICs3Miw0OSBA
QCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CiB9
OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBhbiBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFi
aWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QKK3N0cnVjdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkKKyAgICAgICAg
OiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAgICAgICAsIHVzaW5nTWFwU3ViKGZhbHNlKQorICAg
ICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyhmYWxzZSkKKyAgICAgICAgLCBtYXhUZXh0
dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OworICAgIGJv
b2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CisgICAg
aW50IG1heFRleHR1cmVTaXplOworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGlj
IFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29u
c3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAg
dmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29t
cGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7Ci0gICAg
dmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpOworICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8g
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LgorICAgIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1w
bCopOworICAgIFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsK
KyAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29u
dGV4dDNEKCk7CisgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXll
clRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisgICAgdm9pZCBkaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiAKKyAg
ICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIFdlYlZpZXcuCiAgICAgYm9vbCBhbmlt
YXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0QW5pbWF0
aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9IC8vIENhbiBi
ZSByZW1vdmVkIHdoZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxpbmcgbW92ZXMgaW5zaWRlLgogCiAg
ICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQog
CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZShib29s
IGZpbmlzaCk7CisjZW5kaWYKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAK
LSAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVj
dCYpOworICAgIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0Jik7CiAKICAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwogCkBAIC0xMDAsNiAr
MTIyLDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25z
dCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworICAgIHZvaWQgbG9zZUNv
bXBvc2l0b3JDb250ZXh0KCk7CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CiAgICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwogCkBAIC0xMTUsMjEgKzE0MCw4IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21l
IGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCi0gICAgdm9pZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOwotCi0gICAgdm9p
ZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKTsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQot
I2VuZGlmCi0KICAgICBOb25Db21wb3NpdGVkQ29udGVudEhvc3QqIG5vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmdldCgp
OyB9CiAKLSAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dFN1cHBvcnRzTWFwU3ViOyB9Ci0gICAgaW50IG1heFRleHR1cmVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQotICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9y
bWF0KCkgeyByZXR1cm4gbV9iZXN0VGV4dHVyZUZvcm1hdDsgfQotCiBwcm90ZWN0ZWQ6CiAgICAg
Q0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGluZ3Mm
KTsKIApAQCAtMTM4LDE5ICsxNTAsNiBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAgIC8vIFRlbXBv
cmFyeSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwotICAgIHZvaWQg
cmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dDsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7
Ci0jZW5kaWYKLQotICAgIGludCBtX21heFRleHR1cmVTaXplOwotICAgIEdDM0RlbnVtIG1fYmVz
dFRleHR1cmVGb3JtYXQ7Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKLQogICAg
IGJvb2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIw
NTg2OTliZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCi0gKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBh
c3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI6OmNyZWF0ZSgpCi17Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXIoKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQo
Q0NMYXllclRyZWVIb3N0KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKLXsK
LSAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+ZnJhbWVOdW1iZXIoKSk7
Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMzE4YTRhNzE0MjMyZDMxODRkMmZlZDRhZDgw
OTUxNzU4M2NjOTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaWZuZGVmIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCi0jZGVmaW5lIENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcl9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7Ci0KLS8vIEZJWE1F
OiBtZXJnZSBpbiBUcmVlU3luY2hyb25pemVyIGNvZGUgaW50byBoZXJlCi1jbGFzcyBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcik7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyPiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXIoKSB7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0
KiwgQ0NMYXllclRyZWVIb3N0SW1wbCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKCkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCA0ZTJkMWI4NDNjMTgzMmNmYWZhMTQzNTQ4NjJjYmZh
MTUzODY2OWFlLi40NDBjZWJiMmEwMGU3ZjBmMGQ5ZTMwZmExNmUzYjdiMTI3MjY4OWZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzgsMTggKzM4LDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCog
Y2xpZW50LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCitQYXNz
T3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRp
bmdzKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbChjbGll
bnQsIHJlbmRlcmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJ
bXBsKGNsaWVudCwgc2V0dGluZ3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXll
clRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6
OkNDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBj
b25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncykKICAgICA6IG1fc291cmNlRnJhbWVOdW1iZXIoLTEp
CiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBt
X2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2xheWVyUmVuZGVyZXIocmVuZGVyZXIpCi0g
ICAgLCBtX3JlZHJhd1BlbmRpbmcoZmFsc2UpCisgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQog
ewogfQogCkBAIC02NCw3MSArNjIsMTA4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVn
aW5Db21taXQoKQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCkK
IHsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKLSAgICBzZXROZWVkc1JlZHJhdygpOwog
fQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQorR3JhcGhpY3NDb250
ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQoKQogewotICAgIC8vIElmIGEgY29t
bWl0IGlzIHBlbmRpbmcsIGRvIG5vdCBkcmF3LiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHJlc3RyaWN0
aW9uIHRoYXQKLSAgICAvLyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBkcmF3TGF5ZXJzIGlzIGN1cnJl
bnRseSBhIGJsb2NraW5nIG9wZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgaWYgKG1f
Y29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2xheWVyUmVuZGVy
ZXIgPyBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSA6IDA7Cit9CiAKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCit7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmRyYXdMYXllcnMiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQobV9yZWRyYXdQZW5k
aW5nKTsKLSAgICBtX3JlZHJhd1BlbmRpbmcgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9sYXllclJl
bmRlcmVyKTsKKyAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkK
KyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7CiAKLSAgICB7Ci0gICAgICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIs
IHRoaXMsIDApOwotICAgICAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAg
ICBib29sIGNvbnRleHRMb3N0OwotICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0
ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25N
YWluVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29udGV4dExvc3QpKSk7Ci0gICAgICAgIGNvbXBsZXRpb24ud2FpdCgp
OworICAgICsrbV9mcmFtZU51bWJlcjsKK30KIAotICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUg
IlVwZGF0ZVJlY3QiIG1lc3NhZ2UgdXAgdG8gdGhlIFJlbmRlcldpZGdldCBbb3IgbW92ZXBsdWdp
biBlcXVpdmFsZW50cy4uLl0KK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVu
ZGVyaW5nKCkKK3sKKyAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOworfQogCi0gICAgICAg
IC8vIEZJWE1FOiBoYW5kbGUgY29udGV4dCBsb3N0Ci0gICAgICAgIGlmIChjb250ZXh0TG9zdCkK
LSAgICAgICAgICAgIEZBVEFMKCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhh
bmRsZSBjb250ZXh0IGxvc3QgeWV0LiIpOwotICAgIH0KK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1w
bDo6aXNDb250ZXh0TG9zdCgpCit7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAg
cmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+aXNDb250ZXh0TG9zdCgpOworfQogCi0gICAgKyttX2Zy
YW1lTnVtYmVyOworY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVI
b3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpwcmVzZW50KCkKIHsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9sYXllclJl
bmRlcmVyICYmICFpc0NvbnRleHRMb3N0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2Vu
dCgpOworfQogCi0gICAgLy8gRklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBv
dXQgZnJvbSBoZXJlIG9uY2Ugd2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgot
ICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9jb21taXRQ
ZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1Ro
cmVhZChmcmFtZUJlZ2luVGltZSk7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNr
KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2xheWVyUmVuZGVy
ZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9CiAKLXZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXcoKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7Ci0gICAgaWYg
KG1fcmVkcmF3UGVuZGluZyB8fCBtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKKyAg
ICBtX3Jvb3RMYXllckltcGwgPSBsYXllcjsKK30KIAotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fcmVkcmF3UGVu
ZGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQo
KTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7
CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxl
YXNlVGV4dHVyZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
T25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0
TG9zdCkKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
Q0NMYXllclRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXll
clJlbmRlcmVyKSB7CisgICAgICAgIGlmIChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZykK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBEaXNhYmxlZCBiZWNhdXNlIFNr
UGljdHVyZSByZXF1aXJlcyBHckNvbnRleHQqIHRvIGNyZWF0ZS4KKworICAgICAgICAvLyBGaXJz
dCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAgICAgICAgbV9sYXllclJlbmRlcmVyID0g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOwor
CisgICAgICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNj
ZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAgICAg
Ly8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisgICAgICAgIGlmICghbV9s
YXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nKSB7CisgICAgICAg
ICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworICAgICAgICAgICAg
bV9sYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ss
IHRoaXMsIGNvbnRleHQpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gTGF5
ZXJSZW5kZXJlciByZWNyZWF0aW9uLi4uIGluIHRoZSBmdXR1cmUsIGRvIGEgZnVsbCBkZWxldGUt
YW5kLXJlY3JlYXRlLgorICAgICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXll
clJlbmRlcmVyOworICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKKworICAg
ICAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJh
dGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCisgICAgICAgIC8vIGFu
ZCB0cnkgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGFnYWluLgorICAgICAgICBpZiAoIWxheWVyUmVu
ZGVyZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgICAgIG1f
c2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5v
d25lcigpLCB0aGlzLCBjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChsYXllclJl
bmRlcmVyKQorICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+cGxhdGZv
cm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyUmVuZGVyZXIuZ2V0KCkp
OworICAgICAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgIH0KKyAgICBy
ZXR1cm4gISFtX2xheWVyUmVuZGVyZXI7Cit9CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5v
d25lcigpLT5yb290TGF5ZXIoKSkgewotICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXll
cnMoKTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7CisvLyBGSVhNRTogbW92
ZSBhbGwgdGhpcyBjb2RlIHRvIExUSAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVM
YXllcnMoKQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dXBkYXRlTGF5ZXJzKCk7Cit9CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgKmNvbnRleHRMb3N0
ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIH0gZWxzZQotICAgICAgICAqY29u
dGV4dExvc3QgPSBmYWxzZTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKQor
eworICAgIGJvb2wgY2hhbmdlZCA9IHZpZXdwb3J0U2l6ZSAhPSBtX3ZpZXdwb3J0U2l6ZTsKKyAg
ICBtX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKKyAgICBpZiAoY2hhbmdlZCkKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKIH0KIAogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGM0MTFjY2M3MzU1NGYxZGQzMmJjY2UyZTE1
ZTQ4ZGJlY2FjNGE4OGUuLjlmNTc2YjBjN2RmMjY0MGRmMmRjNDA1ZGFlNmNkYmRhNjk3MmI5ZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI1LDIwICsyNSwyMCBA
QAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0
SW1wbF9oCiAKLSNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBs
ZXRpb25FdmVudDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CiAKIC8vIFByb3ZpZGVzIHNj
aGVkdWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAogY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCAgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKSA9IDA7CiAKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KCkgeyB9CkBAIC00
OCwzMyArNDgsNTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkND
TGF5ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogCisgICAgR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQoKTsKKwogICAgIHZvaWQgZHJhd0xheWVycygpOwogCisgICAgdm9pZCBmaW5p
c2hBbGxSZW5kZXJpbmcoKTsKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lTnVtYmVyOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7Ci0gICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+KTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21p
dW0qIGxheWVyUmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKyAg
ICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkgY29uc3Q7CisKKyAgICB2b2lkIHByZXNlbnQoKTsKKworICAgIHZvaWQgcmVhZGJhY2so
dm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdExh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CisgICAgdm9pZCBz
ZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworCisgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpOwogCiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VGcmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50
IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCisg
ICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50
U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBj
b25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXll
clRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+KTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqLCBib29sKiBjb250ZXh0TG9zdCk7CisgICAgQ0NMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAg
IGludCBtX3NvdXJjZUZyYW1lTnVtYmVyOwogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCiBwcml2
YXRlOgogICAgIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIG1fY2xpZW50OwotICAgIGJvb2wg
bV9jb21taXRQZW5kaW5nOwogICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5
ZXJSZW5kZXJlcjsKLSAgICBib29sIG1fcmVkcmF3UGVuZGluZzsKKyAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IG1fcm9vdExheWVySW1wbDsKKyAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CisgICAg
SW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKIH07CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjMw
M2E4OTlhODRkODNkNDY3MjEzOTgyMDY0YWM5OGQyMzRjOWRlYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGxDQ1RocmVhZFByb3h5LmNwcApAQCAtMCwwICsxLDI3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2lu
Y2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2su
aCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7
CitpbnQgbnVtUHJveGllcyA9IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5PiBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJU
cmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5
ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30KKworQ0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVuZGlu
ZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6Q0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIG51bVByb3hpZXMrKzsKKyAgICBpZiAoIWNjVGhyZWFkKSB7CisgICAgICAgIGNj
VGhyZWFkID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkubGVha1B0
cigpOworICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQoY2NU
aHJlYWQtPnRocmVhZElEKCkpOworICAgIH0KK30KKworCitDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5KCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6On5DQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhv
c3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07
CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAg
ICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxs
UmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBs
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBv
d25lckhhY2spCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9s
YXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGNvbnRleHQtPmhhc09u
ZVJlZigpKTsKKworICAgIC8vIExlYWsgdGhlIGNvbnRleHQgcG9pbnRlciBzbyB3ZSBjYW4gdHJh
bnNmZXIgb3duZXJzaGlwIG9mIGl0IHRvIHRoZSBvdGhlciBzaWRlLi4uCisgICAgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHRQdHIgPSBjb250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7CisgICAg
QVNTRVJUKGNvbnRleHRQdHItPmhhc09uZVJlZigpKTsKKworICAgIC8vIE1ha2UgYSBibG9ja2lu
ZyBjYWxsIHRvIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZC4gVGhlIHJlc3VsdHMg
b2YgdGhhdCBjYWxsCisgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBvayBhbmQgY2FwcyBsb2Nh
bCB2YXJhaWJsZXMuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBib29s
IG9rOworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNj
VGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9z
dEltcGxDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKG93bmVySGFjayksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygmb2spLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICBpZiAob2spCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5U
aHJlYWRDb3B5ID0gY2FwYWJpbGl0aWVzOworICAgIHJldHVybiBvazsKK30KKworY29uc3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKK3sKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7
CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1Ro
cmVhZCkpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc1JlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6
OnNldFZpc2libGVPbkNDVGhyZWFkLCB2aXNpYmxlKSk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KCkKK3sKKyAgICAvLyBDcmVhdGUgTGF5ZXJUcmVl
SG9zdEltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCit2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRl
cyB0aGUgaW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdElt
cGxDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKwor
ICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBs
IGRlbGV0ZWQuCisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKwordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIC8vIFRPRE86IGNhbGwgYmVnaW5GcmFtZUFu
ZENvbW1pdCBvbiBtYWluIHRocmVhZAorfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRo
aXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOworICAgIH0KKworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworCisgICAg
Ly8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6cGVy
Zm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgp
OworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Iiwg
dGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVI
b3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBs
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OnNldFZpc2libGVPbkNDVGhyZWFkKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBtX2xh
eWVyVHJlZUhvc3RJbXBsKTsKKyAgICAvLyBUT0RPOiBzaG91bGQgdGhpcyBwYXNzIHRocm91Z2gg
dmlhIHRoZSBjb21taXQ/CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZSh2aXNp
YmxlKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdGlh
bGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRy
ZWVIb3N0SW1wbCh0aGlzKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJP
bkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrLCBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dFB0ciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIG9rLCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJl
ck9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChhZG9wdFJlZihjb250ZXh0UHRyKSk7
CisgICAgKm9rID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
b3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICBpZiAoKm9rKQorICAgICAgICAqY2FwYWJpbGl0aWVz
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFy
KCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxDQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMz
NGQ4YjRlNjlkNDMzMGY1MWU5MDMyZWNmNjRkNmE1NjBjY2U4MDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsQ0NUaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRp
b25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NU
aHJlYWRQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHksIENDTGF5ZXJUcmVl
SG9zdEltcGxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworCisgICAgdmlydHVh
bCB+Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgYm9vbCBjb21wb3Np
dGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFs
bFJlbmRlcmluZygpOworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25l
ckhhY2spOworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29t
cG9zaXRvckNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0VmlzaWJsZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc3RvcCgpOworCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNh
bGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJl
YWQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJl
YWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKKworICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJl
YWQKKyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
KworICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1p
dE9uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0aWFs
aXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGluaXRpYWxp
emVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRl
eHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogb2ssIExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwor
ICAgIHZvaWQgc2V0VmlzaWJsZU9uQ0NUaHJlYWQoYm9vbCk7CisgICAgdm9pZCBsYXllclRyZWVI
b3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBv
biBtYWluLXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8g
QWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5
ZXJUcmVlSG9zdDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJl
YWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0
ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1w
bDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MjU1NzQ3MzU4
MTZkNTMwM2E2YzdkMzFmN2I2ZjliYjdiNTdjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
TWFpblRocmVhZFByb3h5LmNwcApAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
b3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQor
ICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRo
cmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KK307CisKK1Bhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRo
cmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQoreworICAg
IHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eShs
YXllclRyZWVIb3N0KSk7Cit9CisKK0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KQorICAgIDogbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBt
X2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQo
ZmFsc2UpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFk
UHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXll
clRyZWVIb3N0SW1wbCh0aGlzKTsKK30KKworQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkoKQoreworICAgIFRSQUNF
X0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVI
b3N0SW1wbE1haW5UaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhv
c3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCit9CisKK2Jvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIGlmICghZG9Db21wb3NpdGUoZmFs
c2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5y
ZWFkYmFjayhwaXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlz
Q29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFBy
b3h5Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGV4dCgpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNo
QWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDTGF5ZXJUcmVlSG9z
dEltcGxNYWluVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0
LT5oYXNPbmVSZWYoKSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpsYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOworI2Vsc2UKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2Nv
bW1pdFBlbmRpbmcgPSB0cnVlOworICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFp
blRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNv
bXBvc2l0ZUlmTmVlZGVkKSk7CisjZW5kaWYKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
TWFpblRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgLy8gV2UgZG9uJ3Qgb3B0
aW1pemUgdGhpcyBjYXNlIGluIHRoZSBtYWluIHRocmVhZGVkIGNhc2UuCisgICAgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZSh2aXNpYmxlKTsK
K30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzdG9wKCkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3Rv
cCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgeworICAgICAg
ICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwu
Y2xlYXIoKTsKKyAgICB9CisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKwordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQo
KQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGlu
ZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAg
bV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vsc2UKKyAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRB
bmRSZWRyYXciLCB0aGlzLCAwKTsKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOworICAgIEND
TWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlmTmVlZGVkKSk7CisjZW5kaWYK
K30KKworLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJl
IHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbE1haW5UaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQoreworICAgIC8vIENv
bXBvc2l0ZUlmTmVlZGVkIHdpbGwgbm90IG9jY3VyIGlmICFtX2NvbW1pdFBlbmRpbmcuIFNvLCBz
ZXQgdGhlIGJpdCBzbworICAgIC8vIGl0IHN1Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdvIGF3YXkg
b25jZSB0aGUgcHJveGllcyBhc3N1bWUgZnVsbAorICAgIC8vIHNjaGVkdWxpbmcgcmVzcG9uc2li
aWxpdHkuCisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0ZUlmTmVl
ZGVkKCk7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6Y29t
cG9zaXRlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpIHsKKyAgICAgICAg
Ly8gVXBkYXRlCisgICAgICAgIGRvdWJsZSBmcmFtZUJlZ2luVGltZSA9IGN1cnJlbnRUaW1lKCk7
CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGlt
ZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnVwZGF0ZUxheWVycygpOworCisgICAg
ICAgIC8vIENvbW1pdAorICAgICAgICB7CisgICAgICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwor
ICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBs
LmdldCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRl
KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3CisgICAgICAgIGRvQ29tcG9zaXRlKHRy
dWUpOworICAgIH0KK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5
Ojpkb0NvbXBvc2l0ZShib29sIHByZXNlbnRSZXN1bHQpCit7CisgICAgaWYgKG1fcmVjcmVhdGlu
Z0dyYXBoaWNzQ29udGV4dCkgeworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
KyAgICAgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsKKyAgICAgICAgYm9vbCBvayA9
ICFtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0
KTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChv
ayk7CisgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IGZhbHNlOworICAgICAg
ICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgeworICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmlzQ29udGV4dExvc3QoKSkgeworICAgICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRo
ZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcworICAgICAg
ICAgIC8vIGRpZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6T25FcnJvck1lc3Nh
Z2Ugd2lsbCBvbmx5IGJlCisgICAgICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlv
biBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCisgICAgICAgICAgLy8gcmVjb3Zl
cnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20g
dGhlCisgICAgICAgICAgLy8gcmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0aGUg
bmV4dCBtZXNzYWdlIGxvb3AgaXRlcmF0aW9uCisgICAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSBy
ZXBhaW50IHlldCBhZ2Fpbi4KKyAgICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQg
PSB0cnVlOworICAgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgfQorCisgICAgICBpZiAocHJlc2VudFJlc3VsdCkKKyAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgfQorCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxNYWluVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MmIxY2NmZDE0YzgyM2ViNjQ0YjVk
YTgzYTQ4ODcxZWI0OGE2MjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQ
cm94eS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eV9oCisjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcjsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSA6
IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHksIENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVl
SG9zdEltcGxNYWluVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFj
ayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygp
OworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAg
IHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRl
eHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJs
ZShib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3Rv
cCgpOworCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1Ro
cmVhZAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKworICAg
IC8vIFNwZWNpYWwgY2FzZSBmdW5jdGlvbnMuCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KENDTGF5ZXJU
cmVlSG9zdCopOworICAgIHZvaWQgY29tcG9zaXRlSWZOZWVkZWQoKTsKKyAgICBib29sIGRvQ29t
cG9zaXRlKGJvb2wgcHJlc2VudFJlc3VsdCk7CisKKyAgICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRo
cmVhZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OworCisgICAg
Ly8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmlu
ZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gbV9sYXllclRyZWVIb3N0SW1wbDsKKworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAg
IGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0OworfTsKKworfQorCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCmluZGV4IGE2Njky
ODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2NjJlOTguLjUwMTFiMjQ0ZmYzODRhODI4ZjY1
NTY0ODJkNGI4YjRmOWUyM2E3OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5LmNwcApAQCAtMzYsMjAwICszNiwzMiBAQCB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLW5hbWVzcGFjZSB7Ci1DQ1RocmVhZCogY2NUaHJl
YWQ7Ci1pbnQgbnVtUHJveGllcyA9IDA7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkK
LSAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKLSAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXll
clRyZWVIb3N0KQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7Ci0gICAgbnVtUHJveGllcysrOwotICAgIGlmICghY2NUaHJlYWQpCi0gICAgICAg
IGNjVGhyZWFkID0gbGF5ZXJUcmVlSG9zdC0+Y2xpZW50KCktPmNyZWF0ZUNvbXBvc2l0b3JUaHJl
YWQoKS5sZWFrUHRyKCk7Ci19Ci0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0
YXJ0KCkKLXsKLSAgICAvLyBDcmVhdGUgTGF5ZXJUcmVlSG9zdEltcGwuCi0gICAgQ0NDb21wbGV0
aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9u
LndhaXQoKTsKLX0KLQotQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0
SW1wbFByb3h5KCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJU
cmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KLQotICAgIG51bVByb3hp
ZXMtLTsKLSAgICBpZiAoIW51bVByb3hpZXMpIHsKLSAgICAgICAgZGVsZXRlIGNjVGhyZWFkOwot
ICAgICAgICBjY1RocmVhZCA9IDA7Ci0gICAgfQotfQotCi1ib29sIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2Nv
bW1pdFBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7Ci0g
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6c2V0TmVlZHNSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwotICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGUgaW1wbC4KLSAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6bGF5ZXJUcmVl
SG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24p
KSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci0KLSAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9z
dEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgotICAgIG1fbGF5ZXJUcmVl
SG9zdCA9IDA7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkKLXsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBjY1RocmVhZC0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXll
cnNPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKLXsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRD
b21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
LSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgQ0NNYWluVGhyZWFkOjpwb3N0
VGFzayhjcmVhdGVNYWluVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQsIGZyYW1lQmVnaW5UaW1lKSk7Ci19Ci0KICNpZm5kZWYg
TkRFQlVHCiBib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNNYWluVGhyZWFkKCkKIHsK
ICAgICByZXR1cm4gOjppc01haW5UaHJlYWQoKTsKIH0KIAotI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQot
ewotICAgIHJldHVybiBjdXJyZW50VGhyZWFkKCkgPT0gY2NUaHJlYWQtPnRocmVhZElEKCk7Ci19
Ci0jZWxzZQogbmFtZXNwYWNlIHsKIGJvb2wgZmFrZUltcGxUaHJlYWQgPSBmYWxzZTsKK3N0YXRp
YyBXVEY6OlRocmVhZElkZW50aWZpZXIgaW1wbFRocmVhZElEOwogfQogCiBib29sIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKIHsKLSAgICByZXR1cm4gZmFrZUltcGxU
aHJlYWQ7CisgICAgcmV0dXJuIGZha2VJbXBsVGhyZWFkIHx8IGN1cnJlbnRUaHJlYWQoKSA9PSBp
bXBsVGhyZWFkSUQ7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBs
VGhyZWFkKGJvb2wgdmFsdWUpCiB7CiAgICAgZmFrZUltcGxUaHJlYWQgPSB2YWx1ZTsKIH0KLSNl
bmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyAhTkRFQlVHCi0K
LXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
aWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMs
IDApOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0
ZUFuZExheW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAgIG1fY29tbWl0UGVuZGluZyA9
IGZhbHNlOwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY29tbWl0dGVy
ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7Ci0gICAg
bV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAgLy8gQmxvY2tpbmcgY2FsbCB0
byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21taXQKLSAgICBDQ0NvbXBsZXRp
b25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVh
ZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkpLCBBbGxvd0Nyb3NzVGhyZWFk
QWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgY29t
bWl0dGVyLmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7
Ci19CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbikKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKFdU
Rjo6VGhyZWFkSWRlbnRpZmllciB2YWx1ZSkKIHsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgp
OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Iiwg
dGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9s
YXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKLXsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXll
cnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1Jl
ZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbCA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7Ci0gICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7CisgICAgaW1wbFRocmVhZElEID0gdmFsdWU7CiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMs
IDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1w
bC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotfQorI2VuZGlmIC8vICFOREVC
VUcKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAppbmRl
eCBkMDIwN2U1NjE3NjJhYzFkZGY5ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4wOWJjZTNiNDNlNjE4
ZjFmYzQ5MzEwNzBmOWM1NjJmOWFmNTMzMWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkuaApAQCAtMjUsNjYgKzI1LDYzIEBACiAjaWZuZGVmIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eV9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCiAK
LSNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NUaHJlYWQ7CiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDNEOworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7
CiAKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50IHsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKIHB1YmxpYzoKLSAg
ICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKKyAgICB2aXJ0dWFsIH5DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKSB7IH0KIAotICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYpID0gMDsKIAotICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
LSAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpID0gMDsgLy8gVGVtcG9yYXJ5IGhhY2sgdW50aWwgdGhlIHNjaGVkdWxpbmcg
aW52ZXJzaW9uIGlzIGNvbXBsZXRlZC4KIAotICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8gTXVzdCBi
ZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoQWxsUmVuZGVyaW5nKCkgPSAwOwogCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50
IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rh
c2tPbkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFy
dGVkKCkgY29uc3QgPSAwOworCisgICAgLy8gVGhlIG93bmVySGFjayBhcmd1bWVudCBpcyB0byBh
bGxvdyBpbnRyb2R1Y2luZyB0aGUgSW1wbFByb3h5IHN1YmNsYXNzZXMKKyAgICAvLyB3aXRob3V0
IGFsc28gdHJ5aW5nIHRvIGNoYW5nZSBMYXllclJlbmRlcmVyQ2hyb21pdW0gdG8gcG9pbnQgYXQK
KyAgICAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsLgorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworCisgICAgdmly
dHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3QgPSAwOworCisgICAgLy8gVGVzdGluZyBob29rCisgICAgdmlydHVhbCB2
b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRy
YXcoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShib29sKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2lu
ZyB0aGUgcHJveHkuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7IC8vIE11c3QgYmUgY2Fs
bGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc3Rh
dGljIGJvb2wgaXNNYWluVGhyZWFkKCk7CiAgICAgc3RhdGljIGJvb2wgaXNJbXBsVGhyZWFkKCk7
Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAvLyBGYWtlIHRocmVhZGVkIGNv
bXBvc2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJlY3QgdXNhZ2UuCi0gICAgc3RhdGljIHZv
aWQgc2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgogI2VuZGlmCiAKIHByb3RlY3RlZDoKLSAg
ICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7Ci0g
ICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJl
ZUhvc3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRlOgotICAgIC8vIENhbGxlZCBvbiBDQ01h
aW5UaHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdp
blRpbWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCi0gICAgdm9pZCBjb21taXRPbkND
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7Ci0g
ICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwotICAgIHZvaWQgaW5pdEltcGxPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwotICAg
IHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
LQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KLSAgICBib29sIG1fY29tbWl0UGVu
ZGluZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCi0gICAgQ0NMYXll
clRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVh
ZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRk
b3duLgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBs
OworICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpIHsgfQorICAgIGZyaWVuZCBjbGFzcyBT
Y29wZWRTZXRJbXBsVGhyZWFkOworICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQoYm9vbCk7
CisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIgdmFs
dWUpOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IGZhYzZlNjQz
ZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2MjgwZWFjOGEuLjRjMzNiYWEwN2FkZDM1NzczOWRkYjUx
NzYxZTg0N2I3NGU1MWMzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTE1
OCw2ICsxNTgsODggQEAgcHJpdmF0ZToKICAgICBQMyBtX3BhcmFtZXRlcjM7CiB9OwogCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0
eXBlbmFtZSBNUDQ+CitjbGFzcyBNYWluVGhyZWFkVGFzazQgOiBwdWJsaWMgQ0NNYWluVGhyZWFk
OjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAy
LCBNUDMsIE1QNCk7CisgICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazQ8VCwgUDEsIE1QMSwgUDIs
IE1QMiwgUDMsIE1QMywgUDQsIE1QND4gTWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQ
YXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQ
YXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5U
aHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQg
cGFyYW1ldGVyNCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVh
ZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFt
ZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRh
c2s0KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICAg
ICAgOiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0
aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFy
YW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQor
ICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxU
Kj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9w
YXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2Qg
bV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAg
ICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVu
YW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1l
IE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNSA6
IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAo
VDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgTWFpblRo
cmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+
IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJh
bTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJh
bVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBs
PiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQ
YXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQ
YXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFp
blRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIs
IHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgTWFpblRocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEg
cGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQg
cGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpU
YXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjQocGFyYW1ldGVyNCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAg
ICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBt
X3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0
ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQg
bV9wYXJhbWV0ZXI0OworICAgIFA1IG1fcGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRh
c2soCiAgICAgVCogY29uc3QgY2FsbGVlLApAQCAtMjE1LDYgKzI5Nyw0NiBAQCBQYXNzT3duUHRy
PENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBN
UDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+
CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisg
ICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMs
IE1QNCksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRl
cjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQp
Cit7CisgICAgcmV0dXJuIE1haW5UaHJlYWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBl
LCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAgY2Fs
bGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFt
ZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyks
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5h
bWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUg
UDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8
Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBj
YWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAor
ICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAg
IGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNv
bnN0IFA1JiBwYXJhbWV0ZXI1KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazU8VCwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46
OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAg
ICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHko
cGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0
ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAor
ICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENDTWFpblRocmVhZFRhc2tfaAor
I2VuZGlmIC8vIE1haW5UaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKaW5kZXggOTFj
NThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4My4uZDhkZTRhYjAzNDY5ODg3Njlm
YmUyNjc0ZmQzMjM2MTBjNDVkNzIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKQEAgLTE5OCw2
ICsxOTgsNDggQEAgcHJpdmF0ZToKICAgICBQNCBtX3BhcmFtZXRlcjQ7CiB9OwogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlw
ZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5h
bWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorY2xhc3MgQ0NUaHJlYWRUYXNrNSA6
IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoq
TWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRh
c2s1PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IENDVGhy
ZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENy
b3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0
eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBh
cmFtNTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShU
KiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJh
bWV0ZXI1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFRhc2tJ
bXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMs
IHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NUaHJl
YWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBh
cmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAg
ICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFt
ZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+
KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFy
YW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFy
YW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAg
IFA1IG1fcGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRy
PENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVl
LApAQCAtMjc0LDYgKzMxNiwyNyBAQCBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVD
Q1RocmVhZFRhc2soCiAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVu
YW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1l
IE1QNT4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAg
ICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMywg
TVA0LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJh
bWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0
ZXI0LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQoreworICAgIHJldHVybiBDQ1RocmVhZFRh
c2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlw
ZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0
ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFk
Q29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNv
cHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJh
bWV0ZXI0KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUp
KTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDQ1RocmVhZFRh
c2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IGI4
N2ZkZDBjZTQzODM4NjE4MTkyNjUzODZhNmQ0ZWQ5MzhlZmU5OTAuLmRiYjc5MzcyZjRiNjIyMmI1
OWRjMTI0NWFlMjNjMmY1NTg1ZThlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKQEAgLTI1MzMsOSArMjUzMyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNl
dFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CiAKICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgaWYgKG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKQotICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChk
YW1hZ2VkUmVjdCk7Ci0gICAgZWxzZQorICAgIGlmICghbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVj
dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJl
YWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFz
a1Rlc3QuY3BwCmluZGV4IDFjNWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5NjNiNTc3YzIu
LmQ5OTQzZTcxM2EyMGE0ZDdiMDkwNDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtNDEsNiAr
NDEsNyBAQCBwdWJsaWM6CiAgICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBp
bnQgYTIpKTsKICAgICBNT0NLX01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwg
aW50IGEzKSk7CiAgICAgTU9DS19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIs
IGludCBhMywgaW50IGE0KSk7CisgICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZvaWQoaW50IGEx
LCBpbnQgYTIsIGludCBhMywgaW50IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1QoQ0NUaHJlYWRU
YXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRFU1QoQ0NUaHJl
YWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhv
ZDIoOSwgOCkpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwg
NykpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywgNikp
LlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwgNywgNiwgNSkp
LlRpbWVzKDEpOwogCiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9k
MCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6
bWV0aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2Nr
LCAmTW9jazo6bWV0aG9kMiwgOSwgOCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJl
YWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7CiAg
ICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNikt
PnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0
aG9kNSwgOSwgOCwgNywgNiwgNSktPnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105271</attachid>
            <date>2011-08-25 16:11:47 -0700</date>
            <delta_ts>2011-08-26 11:27:24 -0700</delta_ts>
            <desc>Incorporate feedback. Awesome names care-of Enne.</desc>
            <filename>bug-66807-20110825161146.patch</filename>
            <type>text/plain</type>
            <size>111580</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM3ODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxMjQ4ZTA5MWE0MzQwMmU0
NjBmMjEyZTg5YzlhMmUxNzk5MzgwNTY1Li4xMmMzZWEwZmJkMzI4YWY2ZGIzM2VmYzZhZDdkN2Ew
OGE5Y2EwYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYgQEAKKzIwMTEtMDgtMjMgIE5hdCBE
dWNhICA8bmR1Y2FAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNl
IENDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXll
clJlbmRlcmVyIHRvIENDTGF5ZXJUcmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOjpMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVI
b3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6cHJlc2VudCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbENDVGhyZWFkUHJveHkuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojp+Q0NMYXllclRyZWVIb3N0SW1wbEND
VGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhy
ZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpw
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5Ojpy
ZXF1ZXN0RnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0SW1wbENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxDQ1Ro
cmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbENDVGhyZWFkUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmguCisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsQ0NUaHJlYWRQcm94eTo6aG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6U2NvcGVk
U2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRTZXRJbXBsVGhyZWFkOjp+
U2NvcGVkU2V0SW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJ
bXBsTWFpblRocmVhZFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5KToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJv
eHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbE1haW5U
aHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVh
ZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxNYWluVGhyZWFkUHJveHk6
OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bE1haW5UaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJ
bXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaDoKKwogMjAxMS0wOC0yNSAgU2hlcmlmZiBCb3QgIDx3ZWJr
aXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBv
dXQgcjkzNzcxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDE0YmUxYTk4MTM1NjUwMjIyYmEyZWViYzRl
NmVlN2QzMmMzNjE5YWEuLjhmZDUxZDFhMjFkYmJkNDIzMmU0N2NmY2RlYzA1NDQ3OGNkZmM3YzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MzEsMjAgKzM1MzEsMjIgQEAKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3Vy
ZmFjZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250
ZW50TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTljMmNjYTFkOTJjZDNhZWY2M2E0NzAxZTA1YmQx
ZmJhYWNiODRlNy4uZGI1ZTAzNDZmNmI3NTJjZmNjYjViNGU0YzY5NTNlNWI3ZDQ5MGIyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTIwLDE2ICsxMjAsMTggQEAg
Ym9vbCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRy
ZWVIb3N0KiBob3N0KQogewotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNF
KFNLSUEpCisgICAgLy8gTm90ZSB0aGF0IGhvc3QtPnNraWFDb250ZXh0KCkgd2lsbCBjcmFzaCBp
ZiBjYWxsZWQgd2hpbGUgaW4gdGhyZWFkZWQKKyAgICAvLyBtb2RlLiBUaGlzIHRodXMgZGVwZW5k
cyBvbiBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUgdHVybmluZyBvZmYKKyAgICAvLyBhY2Nl
bGVyYXRlUGFpbnRpbmcgdG8gcHJldmVudCB0aGlzIGZyb20gY3Jhc2hpbmcuCiAgICAgaWYgKGhv
c3QtPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVw
ZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVy
UGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5sYXllclJlbmRlcmVyKCktPnNraWFDb250
ZXh0KCkpOworICAgICAgICBHckNvbnRleHQqIGNvbnRleHQgPSBjb25zdF9jYXN0PENDTGF5ZXJU
cmVlSG9zdCo+KGhvc3QpLT5za2lhQ29udGV4dCgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVy
ID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50
ZXI6OmNyZWF0ZShtX293bmVyKSwgY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCi0gICAgbV90
ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50
TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1
YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6
Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhlYzU3ODE5
ZDJjYzViYy4uNzFiYzBiNmI5ZGI2NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9vbCBJbWFn
ZUxheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNo
cm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3Qp
CiB7Ci0gICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3Jl
YXRlKGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVy
ID0gSW1hZ2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApp
bmRleCA5NTYzZWFhNTdmNTY3M2M4NTk5ZDRkYmFhYzg4YjkyZDljNDk0MzQ4Li5lZWVhYmIyMTBh
YTFiMzI1ODljNjcxYjhjMzcxMTE0NDkyYjAzMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApA
QCAtOTYsNiArOTYsMTkgQEAgdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkK
IHsKIH0KIAordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjaGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zZXRM
YXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkK
KyAgICAgICAgbWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIp
OworICAgIGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnNldExh
eWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworCisgICAgc2V0TGF5ZXJSZW5kZXJlcihy
ZW5kZXJlcik7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXll
clJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5n
IGxheWVyIHJlbmRlcmVycyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKaW5kZXggNThlZDFiMDQwOTZkYWMzZTFiZjZlNzc5NmFmNTkwNmI4Mzg4
Y2M4NS4uZmUyZTRjNzEzNzNiZTUyNWQ1OGM2M2I3Y2UwYTgxZWE4ZTFlNWM4NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaApAQCAtMTUzLDYgKzE1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUm9v
dExheWVyKGJvb2wgaXNSb290TGF5ZXIpIHsgbV9pc1Jvb3RMYXllciA9IGlzUm9vdExheWVyOyB9
CiAgICAgYm9vbCBpc1Jvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSb290TGF5ZXI7IH0K
IAorICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21p
dW0qKTsKKwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBp
ZiB0aGV5IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5k
ZXJlckNocm9taXVtLgogICAgIC8vIEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVIb3N0
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggYzIxNDZmY2UyMmIz
M2I3YzMwODZlYzg4MDIwYTVhZjg4ZTJhYzNlYS4uZGMwZDA1ZjZmMWViYTY0NmRjY2IyMWE5NjNi
MzVhNDljMTI0ODMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBA
IC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgog
I2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1
cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFuYWdlci5oIgpAQCAtNDQ5LDEzICs0NTAsMTMgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNB
Y2NlbGVyYXRlZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogfQogI2VuZGlm
CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJU
cmVlSG9zdEltcGwqIG93bmVySW1wbCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCkKIHsKICNpZiBVU0UoU0tJQSkKICAgICBpZiAob3duZXItPnNldHRpbmdzKCkuYWNjZWxl
cmF0ZVBhaW50aW5nICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRl
eHQuZ2V0KCkpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIFJlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJD
aHJvbWl1bShvd25lciwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3du
ZXIsIG93bmVySW1wbCwgY29udGV4dCkpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmluaXRp
YWxpemUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ2Myw4ICs0NjQsMTAgQEAgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRl
KENDTGF5ZXJUcmVlSG9zdCoKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRl
cmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiBvd25lciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1wbCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwg
bV9vd25lckltcGwob3duZXJJbXBsKQogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQog
ICAgICwgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4
dCkKQEAgLTQ4MywxNCArNDg2LDE4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0
aWFsaXplKCkKICAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4
dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KICAgICAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CiAgICAgICAg
IG1fc2tpYUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3Vu
dCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0Fj
Y2VsZXJhdGVkUGFpbnRpbmcgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgV2ViQ29yZTo6
RXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0g
ICAgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hS
T01JVU1fbWFwX3N1YiIpOwotICAgIGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKKyAgICBt
X2NhcGFiaWxpdGllcy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJP
TUlVTV9tYXBfc3ViIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQogICAg
ICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAK
KyAgICBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSA9IG1heFRleHR1cmVTaXplKCk7Cisg
ICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0
VGV4dHVyZUZvcm1hdChtX2NvbnRleHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hh
cmVkT2JqZWN0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywxMyArNTYwLDYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVu
ZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGlt
ZSgpKTsKIAotICAgIC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4g
VGhpcyBtYXkgYmVjb21lIG51bGwgaWYKLSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBv
ZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAg
ICAgICAgbV9yb290Q0NMYXllckltcGwuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIHVwZGF0ZUxheWVycyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApA
QCAtNTY4LDEyICs1NjgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCiAgICAgaWYgKCFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVz
IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSk7Ci0gICAgfQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJl
TWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMg
LSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAg
ICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKIApAQCAtNzE4LDcgKzcxMiw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhp
cywgMCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1w
bC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwo
KTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+
cmVuZGVyU3VyZmFjZSgpKQpAQCAtODI2LDIwICs4MjAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6cHJlc2VudCgpCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25QcmVzZW50KCk7CiB9
CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KExheWVyQ2hyb21pdW0qIGxheWVyKQotewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBzZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKGNoaWxkcmVuW2ldLmdldCgpKTsKLQotICAgIGlmIChsYXllci0+bWFza0xh
eWVyKCkpCi0gICAgICAgIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobGF5ZXItPm1hc2tMYXll
cigpKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICBzZXRMYXllclJl
bmRlcmVyUmVjdXJzaXZlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7Ci0KLSAgICBsYXllci0+c2V0
TGF5ZXJSZW5kZXJlcih0aGlzKTsKLX0KLQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omdl
dEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBBU1NFUlQocmVjdC5tYXhYKCkgPD0gdmlld3BvcnRXaWR0aCgpICYmIHJlY3QubWF4WSgp
IDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpAQCAtOTM0LDcgKzkxNCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxh
eWVyKQogCiBNYW5hZ2VkVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3Jl
ZW5MYXllclRleHR1cmUoKQogewotICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNj
cmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1wbCA/IG1fcm9vdENDTGF5ZXJJbXBsLT5yZW5kZXJTdXJm
YWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21w
b3NpdGVPZmZzY3JlZW4gJiYgcm9vdExheWVySW1wbCgpID8gcm9vdExheWVySW1wbCgpLT5yZW5k
ZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCkKQEAgLTEyOTEsNyAr
MTI3MSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMo
VGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQsIGNvbnN0CiAgICAgICAgIGR1bXBSZW5kZXJTdXJm
YWNlcyh0cywgaW5kZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKLWJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpCitib29sIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCgpCiB7CiAgICAgcmV0dXJuIChtX2Nv
bnRleHQuZ2V0KCktPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCmluZGV4IDk1NThmYTFlNjBhMDQwN2FmMTlhN2M4ZmI1MzYxODJkMjg4YTEz
YzQuLmRlMWJmYzdiM2M0MWI0OTNkYTY0MjBiMGE1OTM4OGVkOTI1NTAyMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2Mv
Q0NIZWFkc1VwRGlzcGxheS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYzLDcgKzY0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xh
c3MgQ0NMYXllckltcGw7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CitjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7IC8vIFRPRE86IHJlbW92ZSBwb2ludGVycyB0byB0aGlzCiBjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CkBAIC03MiwxMSArNzMsMTIgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0OwogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5k
ZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGlj
IFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0
KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJU
cmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAKICAgICB2aXJ0
dWFsIH5MYXllclJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNl
dHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorICAgIGNvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJu
IG1fY2FwYWJpbGl0aWVzOyB9CiAKICAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1
cm4gbV9vd25lcjsgfQogICAgIGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7
IHJldHVybiBtX293bmVyOyB9CkBAIC04NCwxNCArODYsMTcgQEAgcHVibGljOgogICAgIEdyYXBo
aWNzTGF5ZXIqIHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAg
ICAgY29uc3QgR3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25l
ci0+cm9vdExheWVyKCk7IH0KIAorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgeyBy
ZXR1cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwq
IHJvb3RMYXllckltcGwoKSBjb25zdCB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7
IH0KKwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7Ci0gICAgYm9vbCBjb250ZXh0
U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yjsg
fQorICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jYXBh
YmlsaXRpZXMudXNpbmdNYXBTdWI7IH0KIAogI2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCog
c2tpYUNvbnRleHQoKSB7IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAot
ICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXItPnZpZXdw
b3J0U2l6ZSgpOyB9CisgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgeyByZXR1cm4g
bV9vd25lckltcGwtPnZpZXdwb3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7
IHJldHVybiB2aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0
KCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTQzLDIzICsxNDgs
MTcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0g
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3Iu
Ci0gICAgYm9vbCBpc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0
TG9zdCgpOwogCiAgICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0
VGV4dHVyZUZvcm1hdCgpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21p
dW0+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiBDQ0xheWVyTGlzdDsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBi
ZSBtb3ZlZCB0byB0aGUgQ0NMYXllclRyZWVIb3N0SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3Rz
LgotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290Q0NMYXllckltcGw7Ci0KLSAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4pOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBD
Q0xheWVyVHJlZUhvc3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAg
IGJvb2wgaW5pdGlhbGl6ZSgpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1
bSopOwpAQCAtMTkwLDkgKzE4OSwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZVNo
YXJlZE9iamVjdHMoKTsKICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKLSAgICAv
LyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgIC8vIEZJWE1F
OiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX293
bmVyOwogCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7CisKKyAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
d2luZG93TWF0cml4OwogCkBAIC0yMzIsOCArMjM1LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
R3JDb250ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4dFN1
cHBvcnRzTWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5
ZTJjMy4uYTc5ZWExMmM0ZDc0YzE5MWVjNGQ2MDdlYmZkNDhhZDVlMzdkZjgzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUaWxlZExh
eWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogCiAg
ICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoaG9zdCk7CiAKLSAgICBtX3RleHR1cmVGb3JtYXQgPSBo
b3N0LT5iZXN0VGV4dHVyZUZvcm1hdCgpOworICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKICAgICBtX3RleHR1
cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9z
YW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQo
bV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0
ZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCBhODY2YTE3OWE3MDk5
NTVlZGNmNThjODBkNzEyOTRlZWEwMjU5Mjc0Li4wZTc1NzI0ODc0NmZmNmUyNGYzMWVkMDkxN2Zk
N2ZkNDhhMzA0ODg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTAsNyArNTAsNyBAQCBDQ0Nh
bnZhc0xheWVySW1wbDo6fkNDQ2FudmFzTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ0NhbnZhc0xheWVy
SW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NDYW52YXNMYXllckltcGw6OlBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPmNhbnZhc0xheWVyUHJvZ3JhbSgpOwog
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5kZXggOTdlNzQyY2MxODI4Mjc4YzZiNTJlMjk2YjgwZGU5
N2I0YWExODA1YS4uYjFmMTY5YTg0ZmMzN2JlODkyMjM3MWMwNzhkNzYzZTg3OGE4NDI5YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0zMCwxMCArMzAsMTIgQEAKICNpbmNs
dWRlICJMYXllclBhaW50ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgotI2luY2x1ZGUg
IlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJj
Yy9DQ1RocmVhZFByb3h5LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMTAgKzQ4
LDcgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
KENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0KIAogQ0NMYXllclRyZWVIb3N0OjpDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGlu
Z3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQot
ICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIo
ZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAgICA6IG1fYW5pbWF0aW5nKGZhbHNl
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwg
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVh
dGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSkpCkBAIC01OSwxNSArNTgsMTkg
QEAgQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MKIAogYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRp
YWxpemUoKQogewotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsK
LSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKKyAgICBpZiAobV9zZXR0aW5ncy5lbmFibGVDb21w
b3NpdG9yVGhyZWFkKSB7CisgICAgICAgIC8vIEFjY2VsZXJhdGVkIFBhaW50aW5nIGlzIG5vdCBz
dXBwb3J0ZWQgaW4gdGhyZWFkZWQgbW9kZS4gVHVybiBpdCBvZmYuCisgICAgICAgIG1fc2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIG1fcHJveHkgPSBDQ1RocmVh
ZFByb3h5OjpjcmVhdGUodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcHJveHkgPSBDQ1Np
bmdsZVRocmVhZFByb3h5OjpjcmVhdGUodGhpcyk7CisgICAgbV9wcm94eS0+c3RhcnQoKTsKKwor
ICAgIGlmICghbV9wcm94eS0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIodGhpcykpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhyZWFkZWQgY2FzZSwgdGhl
c2UgdmFsdWVzIHdpbGwgbmVlZCB0byBiZSBpbml0aWFsaXplZAotICAgIC8vIGJ5IHNvbWV0aGlu
ZyBvdGhlciB0aGFuIG1fbGF5ZXJSZW5kZXJlci4KLSAgICBtX21heFRleHR1cmVTaXplID0gbV9s
YXllclJlbmRlcmVyLT5tYXhUZXh0dXJlU2l6ZSgpOwotICAgIG1fYmVzdFRleHR1cmVGb3JtYXQg
PSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2xheWVyUmVuZGVyZXItPmNvbnRl
eHQoKSk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIgPSBtX2xheWVyUmVuZGVyZXItPmNv
bnRleHRTdXBwb3J0c01hcFN1YigpOworICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9u
IGNhcGFiaWxpdGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgorICAgIG1f
c2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAogICAgIG1fcm9vdExheWVyID0g
R3JhcGhpY3NMYXllcjo6Y3JlYXRlKDApOwogI2lmbmRlZiBOREVCVUcKQEAgLTc3LDEyICs4MCw4
IEBAIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIAogICAgIG1fcm9vdExheWVy
LT5hZGRDaGlsZChtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpKTsK
IAotCi0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKLSAgICBBU1NFUlQobV9wcm94eS0+aXNT
dGFydGVkKCkpOworICAgIC8vIFdlIGNoYW5nZWQgdGhlIHJvb3QgbGF5ZXIuIFRlbGwgdGhlIHBy
b3h5IGEgY29tbWl0IGlzIG5lZWRlZC4KICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpOwotI2VuZGlmCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkwLDYyICs4OSw3NyBA
QCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiBDQ0xheWVyVHJlZUhvc3Q6On5D
Q0xheWVyVHJlZUhvc3QoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5D
Q0xheWVyVHJlZUhvc3QiLCB0aGlzLCAwKTsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CiAgICAgbV9wcm94eS0+c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsKLSNlbmRpZgogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXQoKQordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogeworICAgIG1fYW5p
bWF0aW5nID0gdHJ1ZTsKKyAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2lu
VGltZSk7CisgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmNvbW1pdENvbXBsZXRlKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xh
eWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBs
VGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvIiwg
dGhpcywgMCk7CisgICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGZyYW1lTnVtYmVy
KCkpOworICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CisKKyAgICAv
LyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9v
dExheWVyKCkpIHsKKyAgICAgICAgLy8gVE9ETzogdGhpcyBpcyBydW1vcmVkIHRvIGJlIHJlZHVu
ZGFudC4gSWYgd2UgY2FuIGdldCB0aGluZ3Mgd29ya2luZywgcmVtb3ZlIGl0LgorICAgICAgICBp
ZiAocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKS0+bGF5ZXJSZW5kZXJlcigpICE9IGhvc3RJ
bXBsLT5sYXllclJlbmRlcmVyKCkpCisgICAgICAgICAgICByb290TGF5ZXIoKS0+cGxhdGZvcm1M
YXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGhvc3RJbXBsLT5sYXllclJlbmRlcmVy
KCkpOworCisgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBob3N0SW1wbC0+
cm9vdExheWVyKCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXll
cigwKTsKKwogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorUGFzc093blB0cjxDQ1Ro
cmVhZD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsKLSAgICBt
X2FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50
LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0
ZXIoKQorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gQ0NMYXllclRyZWVIb3N0OjpjcmVh
dGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhNRTogb25seSBjYWxsZWQg
aW4gdGhyZWFkaW5nIGNhc2UsIGZpeCB3aGVuIHBvc3NpYmxlLgotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwog
fQogCiBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQog
ewotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKG1fbGF5ZXJSZW5k
ZXJlcik7Ci0gICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJl
bmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwg
bV9zZXR0aW5ncyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNv
bnRleHQoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KGJvb2wgc3VjY2VzcykKIHsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7
CisgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotI2lmIFVTRShUSFJF
QURFRF9DT01QT1NJVElORykKLSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4K
LSNlbHNlCi0gICAgY29tcG9zaXRlKGZhbHNlKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmdldEZy
YW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29t
cG9zaXRlKCk7Cit9CiAjZW5kaWYKKworR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9z
dDo6Y29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbnRleHQoKTsKK30KKworYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29tcG9zaXRlQW5kUmVh
ZGJhY2socGl4ZWxzLCByZWN0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFs
bFJlbmRlcmluZygpCiB7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJ
WE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzLgotI2Vsc2UKLSAgICBtX2xheWVyUmVuZGVyZXIt
PmZpbmlzaCgpOwotI2VuZGlmCisgICAgbV9wcm94eS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJ
bnRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0xNTMsNiArMTY3LDExIEBAIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7
CiB9CiAKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdDo6
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJveHkt
PmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCkBAIC0xNzcsMTIgKzE5NiwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExh
eWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5ncmFwaGljc0xheWVyKCktPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9ub25Db21w
b3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgIGlmIChsYXll
cikgeworICAgIGlmIChsYXllcikKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qt
PmdyYXBoaWNzTGF5ZXIoKS0+YWRkQ2hpbGQobGF5ZXIpOwotICAgICAgICBsYXllci0+cGxhdGZv
cm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7Ci0gICAg
fQorfQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIENDTGF5ZXJUcmVlSG9zdDo6c2tpYUNv
bnRleHQoKQoreworICAgIEFTU0VSVChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyk7Cisg
ICAgcmV0dXJuIG1fcHJveHktPnNraWFDb250ZXh0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
CiB7CkBAIC0xOTIsMTA2ICsyMTYsMjYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdw
b3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY28KICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRp
b24pOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnNl
dFNpemUoY29udGVudHNTaXplKTsKIAotICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpIHsKKyAg
ICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwotICAg
IH0KIAogICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQotICAgIGlmICghdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5y
ZWxlYXNlVGV4dHVyZXMoKTsKLSNlbmRpZgorICAgIG1fcHJveHktPnNldFZpc2libGUoZmFsc2Up
OwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGVMYXllclJlbmRlcmVyKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9z
aXRvckNvbnRleHQoKQogewotICAgIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQg
ZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2FzZSBmYWxsIGJhY2sgdG8gc29mdHdhcmUuCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxh
eWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgLy8gQWN0dWFsbHkgY3JlYXRlIHRoZSByZW5kZXJlci4KLSAgICBSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0KLSAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQs
IGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2Vs
ZXJhdGVkIHBhaW50aW5nCi0gICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdh
aW4uCi0gICAgaWYgKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFsYXllclJlbmRl
cmVyKSB7Ci0gICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7Ci0g
ICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlz
LCBjb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcjsKKyAgICBtX3By
b3h5LT5sb3NlQ29tcG9zaXRvckNvbnRleHQoKTsKIH0KIAogI2lmICFVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9Db21wb3NpdGUoKQotewotI2lmbmRl
ZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7Ci0jZW5kaWYKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBtX2xheWVyUmVu
ZGVyZXItPnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygp
OwotI2lmbmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxU
aHJlYWQoZmFsc2UpOwotI2VuZGlmCi19Ci0KIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3Np
dGUoYm9vbCBmaW5pc2gpCiB7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29t
cG9zaXRlIiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0
KSB7Ci0gICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50
IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5l
dyBjb250ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgbV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgYWxy
ZWFkeSBsb3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0
TG9zdCgpKSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8gUHV0IHJlc3Vs
dCBvbnNjcmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0gICAgfQot
Ci0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewot
ICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwg
bm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNl
IEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAgICAgICAgLy8g
Y2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRp
bmcgb3VyCi0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRl
dGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVh
dGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KLSAgICAg
ICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAgbV9yZWNyZWF0
aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNv
bnRleHQoKQotewotICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Ci19Ci0K
LXZvaWQgQ0NMYXllclRyZWVIb3N0OjpyZWFsbG9jYXRlUmVuZGVyZXIoKQotewotICAgIFJlZlB0
cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRl
cmVyKCk7Ci0gICAgaWYgKCFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRS
ZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBsYXllclJlbmRlcmVyLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKG1fcm9vdExheWVy
LT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7
Ci0KLSAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7CisgICAg
c3RhdGljX2Nhc3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21wb3Np
dGVJbW1lZGlhdGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZmRhNzIyMGY2YTJmZjU1OWZkNjBj
MWNhOWZmZTVkNjlkY2VlMzI0MS4uNTI1YjY4YzdkOTEwYmY2YzUzY2FlNTg4NjlhZGRhNjVlNjE1
ZmU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDEzICsyNywxNiBAQAog
CiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogI2luY2x1
ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJ
bXBsOwpAQCAtNjQsMzUgKzY3LDYwIEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRp
bmdzKCkKICAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAg
ICAgLCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBv
c2l0b3JUaHJlYWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQog
ICAgICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9v
bCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAg
Ym9vbCBlbmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAg
ICAgYm9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1h
dGlvbiBvbiBhbiBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xh
eWVyVHJlZUhvc3QKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkKKyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQor
ICAgICAgICAsIHVzaW5nTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQ
YWludGluZyhmYWxzZSkKKyAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdD
M0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9v
bCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsK
KwogY2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVI
b3N0PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBj
cmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZp
cnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21t
aXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwg
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAg
IC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lkIGNvbW1pdFRvKEND
TGF5ZXJUcmVlSG9zdEltcGwqKTsKKyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21w
b3NpdG9yVGhyZWFkKCk7CisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCop
OworICAgIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKKyNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KTsKKyNlbmRpZgogCisgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBXZWJWaWV3
LgogICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KICAg
ICB2b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX2FuaW1hdGluZyA9IGFuaW1h
dGluZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJlYWRlZCBzY2hlZHVsaW5nIG1v
dmVzIGluc2lkZS4KIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KCkgeyByZXR1
cm4gbV9jbGllbnQ7IH0KIAorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdm9p
ZCBjb21wb3NpdGUoYm9vbCBmaW5pc2gpOworI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhl
bHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKIApAQCAtMTAwLDYgKzEyOCw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJv
b3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAorICAgIGNvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsK
KyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApAQCAtMTA5LDI3
ICsxNDAsMjAgQEAgcHVibGljOgogCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NldHRpbmdzOyB9CiAKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sg
dG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAg
Ly8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShT
S0lBKQorICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgorCiAgICAgdm9pZCBz
ZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNv
bnRlbnRzU2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKIAogICAgIGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9
CiAKICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBm
b3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQotICAgIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKLQotICAgIHZvaWQg
bG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxh
eWVyUmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KLSNl
bmRpZgotCiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVu
dEhvc3QoKSBjb25zdCB7IHJldHVybiBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5nZXQoKTsg
fQogCi0gICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHRTdXBwb3J0c01hcFN1YjsgfQotICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KLSAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1h
dCgpIHsgcmV0dXJuIG1fYmVzdFRleHR1cmVGb3JtYXQ7IH0KLQogcHJvdGVjdGVkOgogICAgIEND
TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7
CiAKQEAgLTEzOCwyNiArMTYyLDEzIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwogCi0gICAgLy8gVGVtcG9y
YXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGRvQ29tcG9zaXRlKCk7Ci0gICAgdm9pZCBy
ZWFsbG9jYXRlUmVuZGVyZXIoKTsKLQotICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0OwotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsK
LSNlbmRpZgotCi0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGVudW0gbV9iZXN0
VGV4dHVyZUZvcm1hdDsKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAg
Ym9vbCBtX2FuaW1hdGluZzsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7
CiAKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk+IG1fcHJveHk7CisgICAgT3duUHRyPENDUHJveHk+IG1fcHJveHk7CiAKICAgICBP
d25QdHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RDb21taXR0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzJkZDcxNGJlN2UzODRjOGVmOWUxMDkyNGZmNWNkMjA1ODY5OWJlYS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgiCi0K
LSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc093blB0cjxDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y3JlYXRlKCkKLXsK
LSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpKTsKLX0K
LQotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNvbW1pdChDQ0xheWVyVHJlZUhvc3Qq
IGhvc3QsIENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQotewotICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihob3N0LT5mcmFtZU51bWJlcigpKTsKLX0KLQotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYmMzMThhNGE3MTQyMzJkMzE4NGQyZmVkNGFkODA5NTE3NTgzY2M5OS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
aAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyX2gKLSNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyX2gKLQotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NMYXllclRyZWVIb3N0
OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKLQotLy8gRklYTUU6IG1lcmdlIGluIFRyZWVT
eW5jaHJvbml6ZXIgY29kZSBpbnRvIGhlcmUKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKTsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+
IGNyZWF0ZSgpOwotICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQot
Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdChDQ0xheWVyVHJlZUhvc3QqLCBDQ0xheWVyVHJlZUhv
c3RJbXBsKik7Ci0KLXByb3RlY3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7
IH0KLX07Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCmluZGV4IDRlMmQxYjg0M2MxODMyY2ZhZmExNDM1NDg2MmNiZmExNTM4NjY5YWUuLmNmZjkw
OWMxMGJhODI3NDdlOTBiNzdlMzI3NTQ1MDFhMTI5NWUyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zOCwxOCArMzgsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9z
dEltcGw6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK1Bhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVyZXIpKTsK
KyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoY2xpZW50LCBzZXR0
aW5ncykpOwogfQogCi1DQ0xheWVyVHJlZUhvc3RJbXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IHJlbmRlcmVyKQorQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3Mm
IHNldHRpbmdzKQogICAgIDogbV9zb3VyY2VGcmFtZU51bWJlcigtMSkKICAgICAsIG1fZnJhbWVO
dW1iZXIoMCkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fY29tbWl0UGVuZGluZyhm
YWxzZSkKLSAgICAsIG1fbGF5ZXJSZW5kZXJlcihyZW5kZXJlcikKLSAgICAsIG1fcmVkcmF3UGVu
ZGluZyhmYWxzZSkKKyAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCiB7CiB9CiAKQEAgLTY0LDcx
ICs2MiwxMTMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogewotICAgIG1fY29tbWl0
UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRy
ZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywg
ZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAotICAgIC8v
IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcg
b3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQot
ICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5k
ZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3
TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOwotICAgIG1fcmVk
cmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIGlm
IChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKQorICAgICAgICBtX2xheWVy
UmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAg
ICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29udGV4dExv
c3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgKyttX2ZyYW1l
TnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVz
c2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4u
XQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAg
IG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IGhhbmRs
ZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRMb3N0KQotICAgICAgICAgICAgRkFU
QUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9z
dCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0
KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9sYXllclJl
bmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICArK21fZnJhbWVOdW1iZXI7Citjb25z
dCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVy
LT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXNlbnQoKQog
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Cit9CiAKLSAgICAv
LyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25j
ZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCi0gICAgZG91YmxlIGZyYW1l
QmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwot
ICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5U
aW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZm
ZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXROZWVkc1JlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKLSAgICBpZiAobV9yZWRyYXdQZW5kaW5n
IHx8IG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVySW1w
bCA9IGxheWVyOworfQogCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNl
dE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9yZWRyYXdQZW5kaW5nID0gdHJ1ZTsKLSAg
ICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwordm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAobV9sYXll
clJlbmRlcmVyICYmICF2aXNpYmxlKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VU
ZXh0dXJlcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1h
aW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRleHRMb3N0
KQorI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpza2lhQ29u
dGV4dCgpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9sYXll
clJlbmRlcmVyLT5za2lhQ29udGV4dCgpOworfQorI2VuZGlmCiAKLSAgICBpZiAobV9sYXllclJl
bmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkgewotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PmRyYXdMYXllcnMoKTsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Citib29s
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogaW1wbEhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCit7
CisgICAgLy8gSWYgbV9sYXllclJlbmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3Zlcmlu
ZyBmcm9tIGEgbG9zdCBjb250ZXh0CisgICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xh
eWVyUmVuZGVyZXI7CisKKyAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24K
KyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOworICAgIGlm
ICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAgIGVsc2UK
KyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1f
bGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisKKworICAgIC8vIElmIGNy
ZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcs
IGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRo
ZSByZW5kZXJlciBhZ2Fpbi4KKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5h
Y2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKKyAgICAgICAg
ICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFj
aywgdGhpcywgY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVy
KCksIHRoaXMsIGNvbnRleHQpOworICAgIH0KIAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOwotICAgICAgICAqY29udGV4dExv
c3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7Ci0gICAgfSBlbHNlCi0gICAgICAgICpj
b250ZXh0TG9zdCA9IGZhbHNlOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworICAgIC8vIElm
IHJlY3JlYXRpbmcgcmVuZGVyZXIsIHVwZGF0ZSB0aGUgbGF5ZXJzIHRvIHBvaW50IGF0IHRoZSBu
ZXcgcmVuZGVyZXIKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVu
ZGVyZXItPnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1
cnNpdmUobGF5ZXJSZW5kZXJlci5nZXQoKSk7CisKKyAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXll
clJlbmRlcmVyOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXI7Cit9CisKKy8vIEZJWE1FOiBt
b3ZlIGFsbCB0aGlzIGNvZGUgdG8gQ0NMYXllclRyZWVIb3N0Cit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnVwZGF0ZUxheWVycygpCit7CisgICAgaWYgKG1fcm9vdExheWVySW1wbCAmJiBtX2xh
eWVyUmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Cit9
CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYg
dmlld3BvcnRTaXplKQoreworICAgIGJvb2wgY2hhbmdlZCA9IHZpZXdwb3J0U2l6ZSAhPSBtX3Zp
ZXdwb3J0U2l6ZTsKKyAgICBtX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKKyAgICBpZiAo
Y2hhbmdlZCkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGM0MTFjY2M3MzU1
NGYxZGQzMmJjY2UyZTE1ZTQ4ZGJlY2FjNGE4OGUuLjAxNTg3ZGQ2MzBhNzQxODRjYWNhNzNkNzBm
N2NiMDI4YjAyMDliODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAg
LTI1LDIwICsyNSwyNCBAQAogI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKICNkZWZpbmUg
Q0NMYXllclRyZWVIb3N0SW1wbF9oCiAKLSNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworI2lmIFVTRShTS0lBKQorY2xhc3Mg
R3JDb250ZXh0OworI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDb21w
bGV0aW9uRXZlbnQ7CitjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIExheWVyUmVuZGVyZXJDaHJv
bWl1bTsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOwogCiAvLyBQcm92aWRlcyBz
Y2hlZHVsaW5nIGluZnJhc3RydWN0dXJlIGZvciBhIENDTGF5ZXJUcmVlSG9zdEltcGwKIGNsYXNz
IENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQg
cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVx
dWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkgPSAwOwogCiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCgpIHsgfQpAQCAt
NDgsMzMgKzUyLDU4IEBAIHByb3RlY3RlZDoKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOwogcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5D
Q0xheWVyVHJlZUhvc3RJbXBsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKIAorICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCk7CisKICAgICB2b2lkIGRyYXdMYXllcnMoKTsKIAorICAgIHZvaWQgZmlu
aXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
bV9mcmFtZU51bWJlcjsgfQogCi0gICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwotICAgIHZvaWQg
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRl
cmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPik7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKCkgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Cisg
ICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpIGNvbnN0OworCisgICAgdm9pZCBwcmVzZW50KCk7CisKKyAgICB2b2lkIHJlYWRiYWNr
KHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYpOworCisgICAgQ0NMYXllckltcGwqIHJvb3RM
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQoKTsgfQorICAgIHZvaWQg
c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKKworICAgIHZvaWQgc2V0Vmlz
aWJsZShib29sKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRo
cmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250
ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCiAKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3Vy
Y2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZy
YW1lTnVtYmVyOyB9CiAKKyAgICB2b2lkIHVwZGF0ZUxheWVycygpOworCisgICAgdm9pZCBzZXRW
aWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOworICAgIGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CisKIHByb3Rl
Y3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZHJhd0xheWVy
c09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGNvbnRleHRMb3N0KTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBjb25zdCBD
Q1NldHRpbmdzJik7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJh
bWVOdW1iZXI7CiAKIHByaXZhdGU6CiAgICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9j
bGllbnQ7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CiAgICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOworICAgIENDU2V0dGluZ3Mg
bV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNjY5Mjg4NTY0NTk2ZDg3ODI2NzY2MWQzZjk0NjFlYmZiNjYyZTk4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgiCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgImNj
L0NDVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLUNDVGhy
ZWFkKiBjY1RocmVhZDsKLWludCBudW1Qcm94aWVzID0gMDsKLX0KLQotQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclRy
ZWVIb3N0KGxheWVyVHJlZUhvc3QpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBudW1Qcm94aWVzKys7Ci0gICAgaWYgKCFjY1RocmVh
ZCkKLSAgICAgICAgY2NUaHJlYWQgPSBsYXllclRyZWVIb3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKLX0KLQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c3RhcnQoKQotewotICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KLSAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAg
IGNvbXBsZXRpb24ud2FpdCgpOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAm
JiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotCi0g
ICAgbnVtUHJveGllcy0tOwotICAgIGlmICghbnVtUHJveGllcykgewotICAgICAgICBkZWxldGUg
Y2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xh
eWVyVHJlZUhvc3RJbXBsOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0
aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOwot
fQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCgpCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBp
bXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKLQotICAgIEFTU0VSVCghbV9s
YXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCi0gICAg
bV9sYXllclRyZWVIb3N0ID0gMDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVl
c3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBDQ01haW5U
aHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKLX0K
LQotI2lmbmRlZiBOREVCVUcKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5U
aHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwotfQotCi0jaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1w
bFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhy
ZWFkSUQoKTsKLX0KLSNlbHNlCi1uYW1lc3BhY2UgewotYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZh
bHNlOwotfQotCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkK
LXsKLSAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQ7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFsdWUpCi17Ci0gICAgZmFrZUltcGxUaHJl
YWQgPSB2YWx1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNl
bmRpZiAvLyAhTkRFQlVHCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0
RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFt
ZUFuZENvbW1pdCIsIHRoaXMsIDApOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAg
IG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29tbWl0dGVyKCk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAg
Ly8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21t
aXQKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24u
d2FpdCgpOwotCi0gICAgY29tbWl0dGVyLmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PmNvbW1pdENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
b21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgp
OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Iiwg
dGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9s
YXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKLXsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXll
cnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1Jl
ZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbCA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7Ci0gICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRy
ZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5
ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotCi0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0
aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJU
cmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKLQotY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7Ci0KLSAgICBib29s
IGlzU3RhcnRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8g
TXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KLQotICAgIC8vIENDTGF5
ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIGJvb2wgaXNNYWluVGhyZWFkKCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICAvLyBGYWtlIHRocmVhZGVkIGNvbXBvc2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJlY3Qg
dXNhZ2UuCi0gICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgotI2Vu
ZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVlSG9z
dCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRlOgot
ICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENv
bW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFk
Ci0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIEND
Q29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwotICAg
IHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKLQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4K
LSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCi0gICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAv
LyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5n
IGluaXRpYWxpemF0aW9uL3NodXRkb3duLgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRh
c2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaAppbmRleCBmYWM2ZTY0M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVh
YzhhLi40YzMzYmFhMDdhZGQzNTc3MzlkZGI1MTc2MWU4NDdiNzRlNTFjMzM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJl
YWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0xNTgsNiArMTU4LDg4IEBAIHByaXZhdGU6CiAgICAg
UDMgbV9wYXJhbWV0ZXIzOwogfTsKIAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorY2xhc3MgTWFpblRocmVh
ZFRhc2s0IDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgTWFp
blRocmVhZFRhc2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5U
aHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisK
KyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBw
YXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhv
ZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVy
MywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1l
dGVyNCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAg
ICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9w
YXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVy
MTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1f
cGFyYW1ldGVyNDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBN
UDU+CitjbGFzcyBNYWluVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCwgTVA1KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAy
LCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1U
eXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
Mz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1
KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9w
YXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgp
KS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1f
cGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9k
IG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cisg
ICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFt
ZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ01haW5UaHJl
YWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAg
LTIxNSw2ICsyOTcsNDYgQEAgUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1h
aW5UaHJlYWRUYXNrKAogICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMykpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRh
c2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lk
IChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIz
LAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBl
LCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAg
ICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
ND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1
LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFp
blRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2Qp
KE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAg
ICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBj
b25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICBy
ZXR1cm4gTWFpblRocmVhZFRhc2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46
OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+
Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gKKyNlbmRpZiAvLyBNYWluVGhyZWFkVGFza19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggNjNlZGNmMGQ2N2E2ODRmNWRi
ZTBhMTJkNWQ5ZDI2MmEwYjE0YWMyMy4uYTlmNDUwZWQ0ODI0NWQ4MWIwYzQzMDcyY2EzOTM3MTJk
MGRkMzc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NQbHVnaW5M
YXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6
OmRyYXcoKQogewotICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODI1OWJhNDY4MzIwZjQ1NWYzNDI4NzNlNWE4MDg5OTUzMWU0YmVjZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJveHkuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWZuZGVmIE5ERUJVRworYm9vbCBDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KQoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOworfQorCituYW1lc3BhY2UgeworYm9v
bCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOworc3RhdGljIFdURjo6VGhyZWFkSWRlbnRpZmllciBp
bXBsVGhyZWFkSUQ7Cit9CisKK2Jvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKK3sKKyAgICBy
ZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsK
K30KKwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFsdWUpCit7CisgICAgZmFr
ZUltcGxUaHJlYWQgPSB2YWx1ZTsKK30KKwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKFdU
Rjo6VGhyZWFkSWRlbnRpZmllciBpZCkKK3sKKyAgICBpbXBsVGhyZWFkSUQgPSBpZDsKK30KKwor
I2VuZGlmIC8vICFOREVCVUcKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlMWI0YjE0NTUw
YTUwMjdkYzVhMTM3MjBhNDFjYjZkNzBhYzZiODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKQEAgLTAsMCAr
MSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NQcm94eV9oCisjZGVmaW5lIENDUHJv
eHlfaAorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdy
Q29udGV4dDsKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVGhyZWFk
OworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2Ns
YXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
K3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOworCisvLyBBYnN0cmFjdCBjbGFzcyBy
ZXNwb25zaWJsZSBmb3IgcHJveHlpbmcgY29tbWFuZHMgZnJvbSB0aGUgbWFpbi10aHJlYWQgc2lk
ZSBvZgorLy8gdGhlIGNvbXBvc2l0b3Igb3ZlciB0byB0aGUgY29tcG9zaXRvciBpbXBsZW1lbnRh
dGlvbi4KK2NsYXNzIENDUHJveHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJveHkp
OworcHVibGljOgorICAgIHZpcnR1YWwgfkNDUHJveHkoKSB7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCkgPSAwOworCisgICAgdmly
dHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworCisg
ICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBw
cm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKworICAgIC8vIERlYnVnIGhvb2tzCisjaWZuZGVmIE5E
RUJVRworICAgIHN0YXRpYyBib29sIGlzTWFpblRocmVhZCgpOworICAgIHN0YXRpYyBib29sIGlz
SW1wbFRocmVhZCgpOworI2VuZGlmCisKKyAgICAvLyBUZXN0aW5nIGhvb2tzCisgICAgdmlydHVh
bCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAgIC8vIEhvcnJpYmxlIHVn
bHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRl
eHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisj
aWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgPSAwOwor
I2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxs
IGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOworCisKK3Byb3RlY3RlZDoKKyAg
ICBDQ1Byb3h5KCkgeyB9CisgICAgZnJpZW5kIGNsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQ7Cisg
ICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJ
bXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllcik7Cit9OworCit9CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNjdkYmJmNjNj
M2ZmN2EzOWQ5OGQwMDk3NmE0MWQ4MGYyYTcyOGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkIHsKK3B1YmxpYzoK
KyAgICBTY29wZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKHRydWUpOworI2VuZGlmCisgICAgfQorICAgIH5TY29w
ZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBDQ1Byb3h5
OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KK307CisKK1Bhc3NPd25QdHI8
Q0NQcm94eT4gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2luZ2xlVGhyZWFkUHJv
eHkobGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1NpbmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRo
cmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fbGF5ZXJU
cmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQorICAg
ICwgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ1NpbmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworCit2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnN0YXJ0KCkKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXll
clRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwo
dGhpcyk7Cit9CisKK0NDU2luZ2xlVGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5KCkK
K3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFk
UHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJl
IHN0b3AoKSBnb3QgY2FsbGVkLgorfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbXBv
c2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
KyAgICBpZiAoIWRvQ29tcG9zaXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisKKyAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVu
ZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJp
bmcoKTsKK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9z
dEltcGw7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spCit7CisgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsKKworICAgIHsKKyAgICAgICAgU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICB9Cit9CisK
K2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDU2luZ2xlVGhyZWFkUHJveHk6Omxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxvc2VDb21wb3Np
dG9yQ29udGV4dCgpCit7CisgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsK
K30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5n
KQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0
ZSgpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sK
KyAgICAvLyBGSVhNRTogT25jZSB3ZSBtb3ZlIHJlbmRlcl93aWRnZXQgc2NoZWR1bGluZyBpbnRv
IHRoaXMgY2xhc3MsIHdlIGNhbgorICAgIC8vIHRyZWF0IHJlZHJhdyByZXF1ZXN0cyBtb3JlIGVm
ZmljaWVudGx5IHRoYW4gY29tbWl0QW5kUmVkcmF3IHJlcXVlc3RzLgorICAgIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0VmlzaWJs
ZShib29sIHZpc2libGUpCit7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK3ZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFk
UHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9CisK
K0dyQ29udGV4dCogQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAgIHJl
dHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5za2lhQ29udGV4dCgpOworfQorCit2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5kaW5nKQorICAgICAgICByZXR1
cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworfQorCisvLyBD
YWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dp
ZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21w
b3NpdGVJbW1lZGlhdGVseSgpCit7CisgICAgLy8gQ29tcG9zaXRlSWZOZWVkZWQgd2lsbCBub3Qg
b2NjdXIgaWYgIW1fY29tbWl0UGVuZGluZy4gU28sIHNldCB0aGUgYml0IHNvCisgICAgLy8gaXQg
c3VjY2VlZHMuIFRoaXMgaGFjayBjYW4gZ28gYXdheSBvbmNlIHRoZSBwcm94aWVzIGFzc3VtZSBm
dWxsCisgICAgLy8gc2NoZWR1bGluZyByZXNwb25zaWJpbGl0eS4KKyAgICBtX2NvbW1pdFBlbmRp
bmcgPSB0cnVlOworCisgICAgY29tcG9zaXRlSWZOZWVkZWQoKTsKK30KKwordm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29tbWl0UGVu
ZGluZykgeworICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1l
ID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5
b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRl
TGF5ZXJzKCk7CisKKyAgICAgICAgLy8gQ29tbWl0CisgICAgICAgIHsKKyAgICAgICAgICAgIFNj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmJlZ2luQ29tbWl0KCk7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1f
bGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcKKyAgICAg
ICAgaWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5w
cmVzZW50KCk7CisgICAgfQorfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9z
aXRlKCkKK3sKKyAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFz
T25lUmVmKCkpOworICAgICAgICBib29sIG9rID0gIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKDAsIGNvbnRleHQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3Qt
PmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRTZXRJ
bXBsVGhyZWFkIGltcGw7CisgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7
CisgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKSB7CisgICAg
ICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5v
dCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNl
IEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgICAv
LyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVy
dGluZyBvdXIKKyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3
ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJlciwg
cmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24K
KyAgICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICAg
IG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMjgwMzViZjZmMjlmZGE5ODFjMDEzNTE3OTlkMjMwYjhiM2Fl
Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgQ0NTaW5nbGVUaHJlYWRQcm94eV9oCisjZGVmaW5lIENDU2luZ2xl
VGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNs
dWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7CisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHkgOiBwdWJsaWMgQ0NQ
cm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwg
fkNDU2luZ2xlVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAgIHZp
cnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
OworCisgICAgLy8gSG9ycmlibGUgdWdseSBoYWNrIHRvIGFsbG93IG1haW4gdGhyZWFkZWQgY29k
ZSB0byBnZXQgdG8gdGhlIEdyQ29udGV4dAorICAgIC8vIGZvciBhY2NlbGVyYXRlZCBwYWludGlu
Zy4gUmVtb3ZlIHRoaXMgQVNBUC4KKyNpZiBVU0UoU0tJQSkKKyAgICB2aXJ0dWFsIEdyQ29udGV4
dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgorCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENp
ZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJh
d09uQ0NUaHJlYWQoKTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBmdW5jdGlvbnMuCisjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7
CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFByb3h5KEND
TGF5ZXJUcmVlSG9zdCopOworICAgIHZvaWQgY29tcG9zaXRlSWZOZWVkZWQoKTsKKyAgICBib29s
IGRvQ29tcG9zaXRlKCk7CisKKyAgICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5Lgor
ICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OworCisgICAgLy8gVXNlZCBvbiB0
aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXph
dGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRy
ZWVIb3N0SW1wbDsKKworICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworICAgIGJvb2wgbV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHku
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWIwMDM1NzNkNDMwMWI5OWIwMjlmNjQ1NGQyZjE5ZGZm
OGNlNjZhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjg1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFBy
b3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOworaW50IG51bVBy
b3hpZXMgPSAwOworfQorCitQYXNzT3duUHRyPENDUHJveHk+IENDVGhyZWFkUHJveHk6OmNyZWF0
ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDQ1RocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30KKworQ0NUaHJlYWRQcm94eTo6
Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBtX2Nv
bW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkK
K3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSIsIHRoaXMs
IDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbnVtUHJveGllcysrOworICAg
IGlmICghY2NUaHJlYWQpIHsKKyAgICAgICAgY2NUaHJlYWQgPSBtX2xheWVyVHJlZUhvc3QtPmNy
ZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7CisgICAgICAgIENDUHJveHk6OnNldElt
cGxUaHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworICAgIH0KK30KKworCitDQ1RocmVhZFBy
b3h5Ojp+Q0NUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6
On5DQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8v
IG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KKworICAgIG51bVByb3hpZXMtLTsKKyAgICBp
ZiAoIW51bVByb3hpZXMpIHsKKyAgICAgICAgZGVsZXRlIGNjVGhyZWFkOworICAgICAgICBjY1Ro
cmVhZCA9IDA7CisgICAgfQorfQorCitib29sIENDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJl
YWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNE
KiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitib29sIENDVGhyZWFkUHJv
eHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7
Cit9CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXll
clRyZWVIb3N0KiBvd25lckhhY2spCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKGNv
bnRleHQtPmhhc09uZVJlZigpKTsKKworICAgIC8vIExlYWsgdGhlIGNvbnRleHQgcG9pbnRlciBz
byB3ZSBjYW4gdHJhbnNmZXIgb3duZXJzaGlwIG9mIGl0IHRvIHRoZSBvdGhlciBzaWRlLi4uCisg
ICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIgPSBjb250ZXh0LnJlbGVhc2UoKS5sZWFr
UmVmKCk7CisgICAgQVNTRVJUKGNvbnRleHRQdHItPmhhc09uZVJlZigpKTsKKworICAgIC8vIE1h
a2UgYSBibG9ja2luZyBjYWxsIHRvIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZC4g
VGhlIHJlc3VsdHMgb2YgdGhhdCBjYWxsCisgICAgLy8gYXJlIHB1c2hlZCBpbnRvIHRoZSBvayBh
bmQgY2FwcyBsb2NhbCB2YXJpYWJsZXMuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKKyAgICBib29sIGluaXRpYWxpemVTdWNjZWVkZWQ7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkND
VGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyhvd25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRl
eHRQdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dD
cm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmlu
aXRpYWxpemVTdWNjZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMp
KSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRl
ZCkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBj
YXBhYmlsaXRpZXM7CisgICAgcmV0dXJuIGluaXRpYWxpemVTdWNjZWVkZWQ7Cit9CisKK2NvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXNNYWluVGhyZWFkQ29weTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9z
aXRvckNvbnRleHQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEND
VGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsK
KworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6
c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NU
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFBy
b3h5OjpzZXRWaXNpYmxlT25DQ1RocmVhZCwgdmlzaWJsZSkpOworfQorCit2b2lkIENDVGhyZWFk
UHJveHk6OnN0YXJ0KCkKK3sKKyAgICAvLyBDcmVhdGUgTGF5ZXJUcmVlSG9zdEltcGwuCisgICAg
Q0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3Jl
YXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NU
aHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxl
dGlvbi53YWl0KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIC8vIFN5bmNocm9ub3VzbHkgZGVsZXRlcyB0aGUgaW1wbC4KKyAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAg
IGNvbXBsZXRpb24ud2FpdCgpOworCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsg
Ly8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAw
OworfQorCitHckNvbnRleHQqIENDVGhyZWFkUHJveHk6OnNraWFDb250ZXh0KCkKK3sKKyAgICAv
LyBOb3Qgc3VwcG9ydGVkIG9uIHRoZSBpbXBsIHRocmVhZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJl
YWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29t
bWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gVE9ETzogY2FsbCBiZWdpbkZyYW1lQW5k
Q29tbWl0IG9uIG1haW4gdGhyZWFkCit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFt
ZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRo
aXMsIDApOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5p
bWF0ZUFuZExheW91dCIsIHRoaXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1h
dGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIH0KKworICAgIG1fY29tbWl0UGVuZGlu
ZyA9IGZhbHNlOworCisgICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ1RocmVhZFByb3h5OjpwZXJm
b3JtQ29tbWl0CisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpjb21t
aXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAg
IGNvbXBsZXRpb24ud2FpdCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1Ro
cmVhZCIsIHRoaXMsIDApOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7
CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0
aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhv
c3RJbXBsLmdldCgpKTsKKyAgICB9CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisKKyAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworICAgIHNldE5lZWRzUmVkcmF3
T25DQ1RocmVhZCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGlmICht
X2xheWVyVHJlZUhvc3RJbXBsKQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5
ZXJzKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldFZpc2libGVPbkNDVGhyZWFkKGJvb2wgdmlz
aWJsZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdP
bkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5
ZXJUcmVlSG9zdEltcGwpOworICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIHBhc3MgdGhyb3VnaCB2
aWEgdGhlIGNvbW1pdD8KKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRWaXNpYmxlKHZpc2li
bGUpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVI
b3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKKyAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0UHRyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogaW5pdGlhbGl6
ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9u
Q0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFJl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChhZG9wdFJlZihjb250ZXh0UHRyKSk7Cisg
ICAgKmluaXRpYWxpemVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXpl
TGF5ZXJSZW5kZXJlcihvd25lckhhY2ssIGNvbnRleHQpOworICAgIGlmICgqaW5pdGlhbGl6ZVN1
Y2NlZWRlZCkKKyAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30K
Kwordm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NF
UlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjc1MDUzZmY2MzRiZTQ0ZjFlZjg0MDU1M2FjZDI1ZTljMTM3ZjUwMzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBDQ1RocmVhZFByb3h5X2gKKyNkZWZpbmUgQ0NUaHJlYWRQcm94eV9oCisKKyNpbmNsdWRlICJj
Yy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKKworY2xhc3MgQ0NU
aHJlYWRQcm94eSA6IHB1YmxpYyBDQ1Byb3h5LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Byb3h5PiBjcmVhdGUoQ0NMYXllclRy
ZWVIb3N0Kik7CisKKyAgICB2aXJ0dWFsIH5DQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29t
cG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5p
c2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCog
b3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9z
ZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVh
bCB2b2lkIHNldFZpc2libGUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxv
dyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3Ig
YWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisg
ICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIEND
TGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2aXJ0dWFs
IHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKKworICAgIC8vIENhbGxlZCBvbiBD
Q01haW5UaHJlYWQKKyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKTsKKworICAgIC8vIENhbGxlZCBvbiBDQ1RocmVhZAorICAgIHZvaWQgYmVnaW5GcmFt
ZUFuZENvbW1pdE9uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9p
ZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lk
IGluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFw
aGljc0NvbnRleHQzRCosIENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2Nl
ZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyopOworICAgIHZvaWQgc2V0TmVlZHNDb21t
aXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBzZXRWaXNpYmxlT25DQ1RocmVhZChi
b29sKTsKKyAgICB2b2lkIGxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50Kik7CisKKyAgICAvLyBVc2VkIG9uIG1haW4tdGhyZWFkIG9ubHkuCisgICAgYm9vbCBt
X2NvbW1pdFBlbmRpbmc7CisKKyAgICAvLyBBY2Nlc3NlZCBvbiBtYWluIHRocmVhZCBvbmx5Lgor
ICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0OworICAgIExheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHk7CisK
KyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQg
ZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
VGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRUYXNrLmgKaW5kZXggOTFjNThlNWQyNWI3YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4
My4uZDhkZTRhYjAzNDY5ODg3NjlmYmUyNjc0ZmQzMjM2MTBjNDVkNzIwYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNr
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRUYXNrLmgKQEAgLTE5OCw2ICsxOTgsNDggQEAgcHJpdmF0ZToKICAgICBQNCBtX3BhcmFt
ZXRlcjQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1Pgor
Y2xhc3MgQ0NUaHJlYWRUYXNrNSA6IHB1YmxpYyBDQ1RocmVhZDo6VGFzayB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSk7Cisg
ICAgdHlwZWRlZiBDQ1RocmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0
LCBNUDQsIFA1LCBNUDU+IENDVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQ
YXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQ
YXJhbVR5cGUgUGFyYW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhy
ZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBh
cmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBh
cmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ1RocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQ0NUaHJlYWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwg
UGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywg
UGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICA6IENDVGhyZWFk
OjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBt
X3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVy
MikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFt
ZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAg
ICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAg
ICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIx
LCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJh
bWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAg
UDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1fcGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2so
CiAgICAgVCogY29uc3QgY2FsbGVlLApAQCAtMjc0LDYgKzMxNiwyNyBAQCBQYXNzT3duUHRyPEND
VGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCiAKIH0KIAordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1Q
MiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwg
dHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNy
ZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1l
dGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAor
ICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQorewor
ICAgIHJldHVybiBDQ1RocmVhZFRhc2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQ
NT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2Qs
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9z
c1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFk
Q29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDU+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBDQ1RocmVhZFRhc2tfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cAppbmRleCBiZjIzYmRlZmQ5ZjNmNWNiODExODY0ODBkZmY4MWMzNzI2OTE5OWUyLi41ZjViMjU2
NDNhOGJmODRkYzBlNmE0ZjU4MWNkMGRjNjM0NDIxMjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcApAQCAtMzEsNyArMzEsNiBAQAogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmlu
ZGV4IDk1YzFiNzAxZTdmNmEwMmYxNTA5YzJlOTUyNWM3ZGNiMTc3MzlhYTYuLjNjM2FkYzc2Mzhj
MGJmMzNlNWVhYWJlNGZkYWM3ZTRjMGE5ZTc0NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJWaWRlb0xheWVy
Q2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNp
bmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJ
bXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpLCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUgdGV4
dHVyZSkKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJv
eHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIGlmIChtX3NraXBzRHJhdykKICAgICAgICAgcmV0
dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4IDVh
Y2IxN2E4ODZkOWJlOGRlZDRmOWMxN2Y3ODVkYTQ0Nzk5OTA1MDUuLjU1MmRmMDg4MjNkNDQ4NzIy
NmZhMTMxYWM1NjMwMmM0NjJjMzA5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJWaWV3SW1wbC5jcHAKQEAgLTI1MTUsOSArMjUxNSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnNl
dFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CiAKICAgICBJbnRSZWN0IGRhbWFnZWRSZWN0
KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgaWYgKG1faXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKQotICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChk
YW1hZ2VkUmVjdCk7Ci0gICAgZWxzZQorICAgIGlmICghbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1hZ2VkUmVj
dCk7CiB9CiAKQEAgLTI2MDgsNiArMjYwNiwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIFdlYkNvcmU6
OkNDU2V0dGluZ3MgY2NTZXR0aW5nczsKICAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVyYXRlUGFp
bnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKTsK
ICAgICAgICAgY2NTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21w
b3NpdGVUb1RleHR1cmVFbmFibGVkKCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
ICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOworI2Vsc2UK
KyAgICAgICAgY2NTZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisjZW5k
aWYKICAgICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dG
UFNDb3VudGVyKCk7CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0g
c2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCmluZGV4IDFjNWY4NzcyNTI2
NmIwODhmNjg2Njc0NmM4ZDNhMWY5NjNiNTc3YzIuLmQ5OTQzZTcxM2EyMGE0ZDdiMDkwNDFhNGVj
Y2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRUYXNrVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1RocmVhZFRhc2tUZXN0LmNwcApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgTU9DS19N
RVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBpbnQgYTIpKTsKICAgICBNT0NLX01FVEhPRDMo
bWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzKSk7CiAgICAgTU9DS19NRVRIT0Q0
KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7CisgICAgTU9D
S19NRVRIT0Q1KG1ldGhvZDUsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0LCBp
bnQgYTUpKTsKIH07CiAKIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQpA
QCAtNTEsMTIgKzUyLDE0IEBAIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2Rz
KQogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOwogICAgIEVY
UEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwgNykpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9D
QUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywgNikpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxM
KG1vY2ssIG1ldGhvZDUoOSwgOCwgNywgNiwgNSkpLlRpbWVzKDEpOwogCiAgICAgY3JlYXRlQ0NU
aHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3Jl
YXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7
CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMiwgOSwgOCktPnBl
cmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9k
MywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2Nr
LCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRl
Q0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNSwgOSwgOCwgNywgNiwgNSktPnBlcmZv
cm1UYXNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105385</attachid>
            <date>2011-08-26 11:27:28 -0700</date>
            <delta_ts>2011-08-29 11:35:18 -0700</delta_ts>
            <desc>Remove nits, rebaseline.</desc>
            <filename>bug-66807-20110826112727.patch</filename>
            <type>text/plain</type>
            <size>118166</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM4NjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYmRlNWVjNzM5ODg1OWQ5
NzA4NDQ0MWFlZDVhNGE0MGQ3NDAwMTk5Li43YTg0OGRkMTgzMmUzZWJlNjU2MjAxM2YxN2RiYzkw
Njk4MWM0Njk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDExLTA4LTI2ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5
ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9ydHNNYXBTdWIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydFNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0
dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21w
b3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
U2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllczo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVz
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWFpblRocmVhZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
NDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVh
ZFRhc2s0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVNYWluVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5M
YXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFNldEltcGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpza2lhQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhd09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhy
ZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
aC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2s1OjpDQ1RocmVhZFRhc2s1KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkVGFzazU6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNDVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3KToKKwogMjAxMS0wOC0yNiAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fu
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gRG91
YmxlIGNsaWNraW5nIG9uIG51bWJlcnMgaW4gQ291bnQgJiBzaXplIGNvbHVtbnMgZG9lc24ndCB0
b2dnbGUgYmV0d2VlbiB2YWx1ZXMgYW5kIHBlcmNlbnRzIGluIHRoZSBIZWFwIFNuYXBzaG90Lgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCmluZGV4IGNhNGNjNzNiNDQyZmU0ZDlhN2UzZjMyOTQwYTUzODEzMDM3NjBh
YzAuLjk4ODM4N2U5YTU4NzA2Y2Y2OGU4OTMxMDQ4MjRlMzAwMWY3ZTdkMWQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKQEAgLTM1MzMsMjAgKzM1MzMsMjIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Ro
cmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNTljMmNjYTFkOTJjZDNhZWY2M2E0NzAxZTA1YmQxZmJhYWNiODRlNy4u
ZGI1ZTAzNDZmNmI3NTJjZmNjYjViNGU0YzY5NTNlNWI3ZDQ5MGIyMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nv
bnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTIwLDE2ICsxMjAsMTggQEAgYm9vbCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDb250ZW50TGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0
KQogewotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCisgICAg
Ly8gTm90ZSB0aGF0IGhvc3QtPnNraWFDb250ZXh0KCkgd2lsbCBjcmFzaCBpZiBjYWxsZWQgd2hp
bGUgaW4gdGhyZWFkZWQKKyAgICAvLyBtb2RlLiBUaGlzIHRodXMgZGVwZW5kcyBvbiBDQ0xheWVy
VHJlZUhvc3Q6OmluaXRpYWxpemUgdHVybmluZyBvZmYKKyAgICAvLyBhY2NlbGVyYXRlUGFpbnRp
bmcgdG8gcHJldmVudCB0aGlzIGZyb20gY3Jhc2hpbmcuCiAgICAgaWYgKGhvc3QtPnNldHRpbmdz
KCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXll
clRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3Jl
YXRlKG1fb3duZXIpLCBob3N0LT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkpOworICAg
ICAgICBHckNvbnRleHQqIGNvbnRleHQgPSBjb25zdF9jYXN0PENDTGF5ZXJUcmVlSG9zdCo+KGhv
c3QpLT5za2lhQ29udGV4dCgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0
dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZSht
X293bmVyKSwgY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gU0tJ
QQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCi0gICAgbV90ZXh0dXJlVXBkYXRl
ciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVy
OjpjcmVhdGUobV9vd25lciksIGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBt
X3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKENvbnRl
bnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhlYzU3ODE5ZDJjYzViYy4uNzFi
YzBiNmI5ZGI2NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9vbCBJbWFnZUxheWVyQ2hyb21p
dW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVh
dGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgbV90
ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmNv
bnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1hZ2VMYXll
clRleHR1cmVVcGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA5NTYzZWFh
NTdmNTY3M2M4NTk5ZDRkYmFhYzg4YjkyZDljNDk0MzQ4Li5lZWVhYmIyMTBhYTFiMzI1ODljNjcx
YjhjMzcxMTE0NDkyYjAzMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtOTYsNiArOTYs
MTkgQEAgdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKIH0KIAordm9p
ZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyUmVuZGVyZXJD
aHJvbWl1bSogcmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zZXRMYXllclJlbmRlcmVy
UmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFz
a0xheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworICAgIGlmIChy
ZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnNldExheWVyUmVuZGVyZXJS
ZWN1cnNpdmUocmVuZGVyZXIpOworCisgICAgc2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJlcik7Cit9
CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qIHJlbmRlcmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRl
cmVycyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKaW5kZXggNThlZDFiMDQwOTZkYWMzZTFiZjZlNzc5NmFmNTkwNmI4Mzg4Y2M4NS4uZmUyZTRj
NzEzNzNiZTUyNWQ1OGM2M2I3Y2UwYTgxZWE4ZTFlNWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApA
QCAtMTUzLDYgKzE1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUm9vdExheWVyKGJvb2wg
aXNSb290TGF5ZXIpIHsgbV9pc1Jvb3RMYXllciA9IGlzUm9vdExheWVyOyB9CiAgICAgYm9vbCBp
c1Jvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSb290TGF5ZXI7IH0KIAorICAgIHZvaWQg
c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKwogICAg
IC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQg
dG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVt
LgogICAgIC8vIEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVIb3N0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNDEwMDA3NGFjODYyZDg2NzJjM2VlOTJl
ZjRhNmU2ZjRkYzliNTZmYy4uNzZiYmY0ZGJkNjU4MWE5NTI5MWU3MTJlODYyNmExY2UyNDdmMmYx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3
IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5o
IgpAQCAtNDQ5LDEzICs0NTAsMTMgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBh
aW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogfQogI2VuZGlmCiAKLVBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShD
Q0xheWVyVHJlZUhvc3QqIG93bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJUcmVlSG9zdEltcGwq
IG93bmVySW1wbCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsKICNp
ZiBVU0UoU0tJQSkKICAgICBpZiAob3duZXItPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5n
ICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQog
ICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShvd25l
ciwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJl
bmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1w
bCwgY29udGV4dCkpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmluaXRpYWxpemUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ2Myw4ICs0NjQsMTAgQEAgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVl
SG9zdCoKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0o
Q0NMYXllclRyZWVIb3N0KiBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1wbCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9vd25lckltcGwo
b3duZXJJbXBsKQogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZz
Y3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTQ4Mywx
NCArNDg2LDE4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAg
ICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhl
IGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhU
ZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CiAgICAgICAgIG1fc2tpYUNvbnRl
eHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVy
ZUNhY2hlQnl0ZXMpOworICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJhdGVkUGFp
bnRpbmcgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNE
KiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9jb250ZXh0
U3VwcG9ydHNNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1
YiIpOwotICAgIGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKKyAgICBtX2NhcGFiaWxpdGll
cy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3Vi
Iik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQogICAgICAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAKKyAgICBtX2NhcGFi
aWxpdGllcy5tYXhUZXh0dXJlU2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgbV9jYXBhYmls
aXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1h
dChtX2NvbnRleHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2JqZWN0cygp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTU1MywxMyArNTYwLDYgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVuZGVyV2lkZ2V0Lgog
ICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAotICAg
IC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVj
b21lIG51bGwgaWYKLSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEg
cGFpbnQgb3BlcmF0aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9yb290
Q0NMYXllckltcGwuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHVwZGF0
ZUxheWVycyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApAQCAtNTY4LDEyICs1
NjgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgaWYg
KCFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7
Ci0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25p
emVUcmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RDQ0xheWVySW1wbC5n
ZXQoKSk7Ci0gICAgfQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0
TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBkcmF3TGF5ZXJz
SW50ZXJuYWwoKTsKIApAQCAtNzE4LDcgKzcxMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKTsKKyAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQpAQCAtODI2LDIwICs4MjAsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJl
c2VudCgpCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25QcmVzZW50KCk7CiB9CiAKLXZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qIGxheWVyKQotewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYg
Y2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KGNoaWxkcmVuW2ldLmdldCgpKTsKLQotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAg
ICAgIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICBp
ZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJz
aXZlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSk7Ci0KLSAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJl
cih0aGlzKTsKLX0KLQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVy
UGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQo
cmVjdC5tYXhYKCkgPD0gdmlld3BvcnRXaWR0aCgpICYmIHJlY3QubWF4WSgpIDw9IHZpZXdwb3J0
SGVpZ2h0KCkpOwpAQCAtOTM0LDcgKzkxNCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyKQogCiBNYW5h
Z2VkVGV4dHVyZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1
cmUoKQogewotICAgIHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jv
b3RDQ0xheWVySW1wbCA/IG1fcm9vdENDTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRl
bnRzVGV4dHVyZSgpIDogMDsKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3Jl
ZW4gJiYgcm9vdExheWVySW1wbCgpID8gcm9vdExheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCkt
PmNvbnRlbnRzVGV4dHVyZSgpIDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNvcHlPZmZzY3JlZW5UZXh0dXJlVG9EaXNwbGF5KCkKQEAgLTEyODMsNyArMTI2Myw3IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYg
dHMsIGludCBpbmRlbnQsIGNvbnN0CiAgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5k
ZW50LCBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpCitib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aXNDb250ZXh0TG9zdCgpCiB7CiAgICAgcmV0dXJuIChtX2NvbnRleHQuZ2V0KCkt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CmluZGV4IGY4NWE3MzEyYzFhYjFlNWU1MTM1ZWU4ZTViODE3ZDE3OWRlYWI1MjcuLmFkZGM1MWNk
ZTIyZTM0NTA5ZTBiN2I2MzZjMmI5YjE2MmUwZmRiMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlz
cGxheS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5j
bHVkZSAiY2MvQ0NQbHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYzLDcgKzY0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3MgQ0NMYXllcklt
cGw7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CitjbGFzcyBDQ0xheWVyVHJlZUhv
c3Q7IC8vIFRPRE86IHJlbW92ZSBwb2ludGVycyB0byB0aGlzCiBjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CkBAIC03MiwxMSArNzMsMTIgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8g
Q2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVz
aW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAKICAgICB2aXJ0dWFsIH5MYXllclJl
bmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29u
c3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorICAgIGNvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0
aWVzOyB9CiAKICAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25lcjsg
fQogICAgIGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293
bmVyOyB9CkBAIC04NCwxNCArODYsMTcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXIqIHJv
b3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAgICAgY29uc3QgR3Jh
cGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+cm9vdExheWVy
KCk7IH0KIAorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgeyByZXR1cm4gbV9vd25l
ckltcGwtPnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXllcklt
cGwoKSBjb25zdCB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KKwogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7Ci0gICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBT
dWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQorICAgIGJvb2wg
Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXMudXNp
bmdNYXBTdWI7IH0KIAogI2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogc2tpYUNvbnRleHQo
KSB7IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAotICAgIGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpOyB9
CisgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgeyByZXR1cm4gbV9vd25lckltcGwt
PnZpZXdwb3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2aWV3
cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1cm4g
dmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTQyLDIzICsxNDcsMTcgQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0dXJu
IHRydWUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCi0gICAgYm9vbCBp
c0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwogCiAg
ICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJl
Y3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1h
dCgpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJM
aXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlz
dDsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0
aGUgQ0NMYXllclRyZWVIb3N0SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgotICAgIFJlZlB0
cjxDQ0xheWVySW1wbD4gbV9yb290Q0NMYXllckltcGw7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwor
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBDQ0xheWVyVHJlZUhv
c3RJbXBsKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwogICAgIGJvb2wgaW5pdGlh
bGl6ZSgpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwpAQCAtMTg5
LDkgKzE4OCwxMyBAQCBwcml2YXRlOgogICAgIGJvb2wgaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMo
KTsKICAgICB2b2lkIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7CiAKLSAgICAvLyBGSVhNRTogQ2hh
bmdlIHRoaXMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgIC8vIEZJWE1FOiBSZW1vdmUgQ0NM
YXllclRyZWVIb3N0IGZpZWxkCiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX293bmVyOwogCisgICAg
Q0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7CisKKyAgICBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9w
cm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4
OwogCkBAIC0yMzEsOCArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JDb250ZXh0PiBt
X3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3Vi
OwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCiAgICAg
Q0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5ZTJjMy4uYTc5ZWEx
MmM0ZDc0YzE5MWVjNGQ2MDdlYmZkNDhhZDVlMzdkZjgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVy
Q2hyb21pdW0uY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06
OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogCiAgICAgY3JlYXRlVGV4
dHVyZVVwZGF0ZXIoaG9zdCk7CiAKLSAgICBtX3RleHR1cmVGb3JtYXQgPSBob3N0LT5iZXN0VGV4
dHVyZUZvcm1hdCgpOworICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKICAgICBtX3RleHR1cmVPcmllbnRhdGlv
biA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9zYW1wbGVkVGV4ZWxG
b3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9y
bWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZSgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9W
aWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MmQyOGRmYjNjNjIzNmU3MDNjMTkzZDRlZTU3
NmUxNjk5OGQxY2YuLjE2YjUwYjE3MmMwNjJjMjJhOWI1MTljM2UwZDBjZTcxODcwZjc3YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVv
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wg
VmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9t
aXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQodGV4dHVy
ZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAKLSAgICBpbnQg
bWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhvc3QtPm1heFRleHR1cmVTaXplKCk7CisgICAg
aW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRyZWVIb3N0LT5sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsg
cGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKyspIHsKICAgICAgICAgSW50U2l6ZSByZXF1
aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmluZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1
OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEz
MDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMx
LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5
ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQogCiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpk
cmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQo
bGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNT
RVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0LmNwcAppbmRleCBkMDlkNGY3MjFlMTAxMGE5ZTlkYzkyOGY0ZDg2NjhlZWU1Zjg4
ZGJmLi5iZmY5Y2I2OWQ0YzY3MjBiYWZmMzE4NTNjNjI1ZTc4YzUwN2YyYmQzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgIkxh
eWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
CiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZv
cm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhy
ZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMCArNDgsNyBAQCBQ
YXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBjbGllbgogfQogCiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVl
SG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0
dGluZ3MpCi0gICAgOiBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQoZmFsc2UpCi0gICAgLCBt
X21heFRleHR1cmVTaXplKDApCi0gICAgLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YihmYWxzZSkK
LSAgICAsIG1fYW5pbWF0aW5nKGZhbHNlKQorICAgIDogbV9hbmltYXRpbmcoZmFsc2UpCiAgICAg
LCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdChOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZShtX2Ns
aWVudC0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpKSkKQEAgLTU5LDE1ICs1OCwxOSBAQCBDQ0xh
eWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCwgY29uc3QgQ0NTZXR0aW5ncwogCiBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgp
CiB7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwotICAgIGlm
ICghbV9sYXllclJlbmRlcmVyKQorICAgIGlmIChtX3NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JU
aHJlYWQpIHsKKyAgICAgICAgLy8gQWNjZWxlcmF0ZWQgUGFpbnRpbmcgaXMgbm90IHN1cHBvcnRl
ZCBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KKyAgICAgICAgbV9zZXR0aW5ncy5hY2Nl
bGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9wcm94eSA9IENDVGhyZWFkUHJveHk6
OmNyZWF0ZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wcm94eSA9IENDU2luZ2xlVGhy
ZWFkUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Byb3h5LT5zdGFydCgpOworCisgICAgaWYg
KCFtX3Byb3h5LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcih0aGlzKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgLy8gRklYTUU6IEluIHRoZSB0aHJlYWRlZCBjYXNlLCB0aGVzZSB2YWx1
ZXMgd2lsbCBuZWVkIHRvIGJlIGluaXRpYWxpemVkCi0gICAgLy8gYnkgc29tZXRoaW5nIG90aGVy
IHRoYW4gbV9sYXllclJlbmRlcmVyLgotICAgIG1fbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyUmVu
ZGVyZXItPm1heFRleHR1cmVTaXplKCk7Ci0gICAgbV9iZXN0VGV4dHVyZUZvcm1hdCA9IFBsYXRm
b3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpKTsK
LSAgICBtX2NvbnRleHRTdXBwb3J0c01hcFN1YiA9IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dFN1
cHBvcnRzTWFwU3ViKCk7CisgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24gY2FwYWJp
bGl0aWVzIHRoYXQgd2UgZ290IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCisgICAgbV9zZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwogCiAgICAgbV9yb290TGF5ZXIgPSBHcmFwaGlj
c0xheWVyOjpjcmVhdGUoMCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNzcsMTIgKzgwLDggQEAgYm9v
bCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogCiAgICAgbV9yb290TGF5ZXItPmFkZENo
aWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkpOwogCi0KLSNp
ZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgbV9wcm94eSA9IENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwotICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0YXJ0ZWQo
KSk7CisgICAgLy8gV2UgY2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJveHkgYSBj
b21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtOTAsNjIgKzg5LDc1IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIENDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJU
cmVlSG9zdCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkNDTGF5ZXJU
cmVlSG9zdCIsIHRoaXMsIDApOwotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKICAgICBt
X3Byb3h5LT5zdG9wKCk7CiAgICAgbV9wcm94eS5jbGVhcigpOwotI2VuZGlmCiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5p
bWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CisgICAgbV9hbmltYXRpbmcg
PSB0cnVlOworICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsK
KyAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0Q29tcGxldGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVl
SG9zdEltcGwqIGhvc3RJbXBsKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQo
KSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAw
KTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7Cisg
ICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZpZXdwb3J0U2l6ZSgpKTsKKworICAgIC8vIFN5bmNo
cm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgorICAgIGlmIChyb290TGF5ZXIo
KSkKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290
TGF5ZXIoKSkpOworICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsK
KwogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorUGFzc093blB0cjxDQ1RocmVhZD4g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsKLSAgICBtX2FuaW1h
dGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRp
bWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVh
dGVDb21wb3NpdG9yVGhyZWFkKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQor
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhNRTogb25seSBjYWxsZWQgaW4gdGhy
ZWFkaW5nIGNhc2UsIGZpeCB3aGVuIHBvc3NpYmxlLgotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogfQogCiBQ
YXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5
ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQogewotICAg
IFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlcik7
Ci0gICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVy
KTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwgbV9zZXR0
aW5ncyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQo
KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wg
c3VjY2VzcykKIHsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAg
bV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0JiByZWN0KQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKLSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNl
Ci0gICAgY29tcG9zaXRlKGZhbHNlKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVm
ZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7Cit9CiAjZW5kaWYKKworLy8gVGVtcG9yYXJ5IGhhY2sgdW50aWwgV2ViVmlld0ltcGwgY29u
dGV4dCBjcmVhdGlvbiBnZXRzIHNpbXBsaWZpZWQKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVy
VHJlZUhvc3Q6OmNvbnRleHQoKQoreworICAgIEFTU0VSVCghbV9zZXR0aW5ncy5lbmFibGVDb21w
b3NpdG9yVGhyZWFkKTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOworfQorCitib29s
IENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFk
YmFjayhwaXhlbHMsIHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxs
UmVuZGVyaW5nKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgLy8gRklY
TUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZmluaXNoKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKQEAgLTE1Myw2ICsxNjUsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKICAg
ICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsK
IH0KIAorY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0Ojps
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKQEAgLTE3NywxMiArMTk0LDE3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QtPmdyYXBoaWNzTGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgaWYgKGxheWVy
KSB7CisgICAgaWYgKGxheWVyKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+
Z3JhcGhpY3NMYXllcigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIGxheWVyLT5wbGF0Zm9y
bUxheWVyKCktPnNldExheWVyUmVuZGVyZXIobV9sYXllclJlbmRlcmVyLmdldCgpKTsKLSAgICB9
Cit9CiAKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogQ0NMYXllclRyZWVIb3N0Ojpza2lhQ29u
dGV4dCgpCit7CisgICAgQVNTRVJUKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nKTsKKyAg
ICByZXR1cm4gbV9wcm94eS0+c2tpYUNvbnRleHQoKTsKIH0KKyNlbmRpZgogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25z
dCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikK
IHsKQEAgLTE5MiwxMTQgKzIxNCwzMiBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3Bv
cnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwogICAgIG1f
bm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlv
bik7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+c2V0
U2l6ZShjb250ZW50c1NpemUpOwogCi0gICAgaWYgKHZpc2libGVSZWN0Q2hhbmdlZCkgeworICAg
IGlmICh2aXNpYmxlUmVjdENoYW5nZWQpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5kZXJl
cikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0gICAg
fQogCiAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewotI2lmICFVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCi0gICAgaWYgKCF2aXNpYmxlKQotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJl
bGVhc2VUZXh0dXJlcygpOwotI2VuZGlmCisgICAgbV9wcm94eS0+c2V0VmlzaWJsZShmYWxzZSk7
CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3Np
dG9yQ29udGV4dCgpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBm
YWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIGZhbGwgYmFjayB0byBzb2Z0d2FyZS4KLSAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2NsaWVudC0+Y3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICAvLyBBY3R1YWxseSBjcmVhdGUgdGhlIHJlbmRlcmVyLgotICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLQotICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwg
YW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxl
cmF0ZWQgcGFpbnRpbmcKLSAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fp
bi4KLSAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgJiYgIWxheWVyUmVuZGVy
ZXIpIHsKLSAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKLSAg
ICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMs
IGNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiBsYXllclJlbmRlcmVyOworICAgIG1fcHJv
eHktPmxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwogfQogCiBUZXh0dXJlTWFuYWdlciogQ0NMYXll
clRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogdGhpcyBjbGFzcyBzaG91bGQgb3duIHRoZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIKLSAg
ICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1f
bGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOworICAgIHJldHVybiBtX3By
b3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CiB9CiAKICNpZiAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9zaXRlKCkKK3ZvaWQgQ0NM
YXllclRyZWVIb3N0Ojpjb21wb3NpdGUoYm9vbCkKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKHRydWUpOwotI2VuZGlmCi0gICAg
QVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXll
cnMoKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKLSNl
bmRpZgotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSIsIHRoaXMsIDAp
OwotCi0gICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgewotICAgICAgICAvLyBy
ZWFsbG9jYXRlUmVuZGVyZXIgd2lsbCByZXF1ZXN0IGEgcmVwYWludCB3aGV0aGVyIG9yIG5vdCBp
dCBzdWNjZWVkZWQKLSAgICAgICAgLy8gaW4gY3JlYXRpbmcgYSBuZXcgY29udGV4dC4KLSAgICAg
ICAgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0gICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRG8gbm90IGNv
bXBvc2l0ZSBpZiB0aGUgY29tcG9zaXRvciBjb250ZXh0IGlzIGFscmVhZHkgbG9zdC4KLSAgICBp
ZiAoIW1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAg
ICBkb0NvbXBvc2l0ZSgpOwotCi0gICAgICAgIC8vIFB1dCByZXN1bHQgb25zY3JlZW4uCi0gICAg
ICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOwotICAgIH0KLQotICAgIGlmIChtX2xheWVy
UmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgLy8gVHJ5aW5n
IHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBw
cm9jZXNzCi0gICAgICAgIC8vIGRpZWQuIFRoaXMgaXMgYmVjYXVzZSBHcHVDaGFubmVsSG9zdDo6
T25FcnJvck1lc3NhZ2Ugd2lsbCBvbmx5IGJlCi0gICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4
dCBpdGVyYXRpb24gb2YgdGhlIG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgotICAgICAgICAv
LyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5
ZXIgZnJvbSB0aGUKLSAgICAgICAgLy8gcmVuZGVyZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBh
dCB0aGUgbmV4dCBtZXNzYWdlIGxvb3AgaXRlcmF0aW9uCi0gICAgICAgIC8vIGFuZCByZXF1ZXN0
IGEgcmVwYWludCB5ZXQgYWdhaW4uCi0gICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dCA9IHRydWU7Ci0gICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0gICAgfQotfQot
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKLXsKLSAgICBt
X3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotfQotCi12b2lkIENDTGF5ZXJUcmVl
SG9zdDo6cmVhbGxvY2F0ZVJlbmRlcmVyKCkKLXsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiBsYXllclJlbmRlcmVyID0gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwotICAgIGlmICgh
bGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQoZmFsc2UpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGF5ZXJSZW5kZXJl
ci0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShtX3Jvb3RMYXllci0+cGxhdGZvcm1MYXllcigp
KTsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOwotCi0gICAgbV9jbGllbnQt
PmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHRydWUpOworICAgIEFTU0VSVCghbV9zZXR0aW5n
cy5lbmFibGVDb21wb3NpdG9yVGhyZWFkKTsKKyAgICBzdGF0aWNfY2FzdDxDQ1NpbmdsZVRocmVh
ZFByb3h5Kj4obV9wcm94eS5nZXQoKSktPmNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CiB9CiAjZW5k
aWYgLy8gIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAppbmRleCA5OWI4YmYyMDk0ZDgzNjQxNDgzYjQ5ZDkzYzY5MGZiMWVhYmFlOGM2Li5hMzlj
NGNkOGUyMzBmYzlhODA1MDczODA0OWIwZWQzYmRjNDVkYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaApAQCAtMjcsMTMgKzI3LDE2IEBACiAKICNpbmNsdWRlICJHcmFwaGljc1R5cGVz
M0QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisj
aW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAK
KyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CkBAIC02NSwzNSArNjgsNjMgQEAg
c3RydWN0IENDU2V0dGluZ3MgewogICAgIENDU2V0dGluZ3MoKQogICAgICAgICAgICAgOiBhY2Nl
bGVyYXRlUGFpbnRpbmcoZmFsc2UpCiAgICAgICAgICAgICAsIGNvbXBvc2l0ZU9mZnNjcmVlbihm
YWxzZSkKKyAgICAgICAgICAgICwgZW5hYmxlQ29tcG9zaXRvclRocmVhZChmYWxzZSkKICAgICAg
ICAgICAgICwgc2hvd0ZQU0NvdW50ZXIoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dQbGF0Zm9y
bUxheWVyVHJlZShmYWxzZSkgeyB9CiAKICAgICBib29sIGFjY2VsZXJhdGVQYWludGluZzsKICAg
ICBib29sIGNvbXBvc2l0ZU9mZnNjcmVlbjsKKyAgICBib29sIGVuYWJsZUNvbXBvc2l0b3JUaHJl
YWQ7CiAgICAgYm9vbCBzaG93RlBTQ291bnRlcjsKICAgICBib29sIHNob3dQbGF0Zm9ybUxheWVy
VHJlZTsKIH07CiAKKy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGFuIEltcGwncyByZW5kZXJp
bmcgY2FwYWJpbGl0aWVzIGJhY2sgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdAorc3RydWN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMgeworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKQor
ICAgICAgICA6IGJlc3RUZXh0dXJlRm9ybWF0KDApCisgICAgICAgICwgdXNpbmdNYXBTdWIoZmFs
c2UpCisgICAgICAgICwgdXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nKGZhbHNlKQorICAgICAgICAs
IG1heFRleHR1cmVTaXplKDApIHsgfQorCisgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQ7
CisgICAgYm9vbCB1c2luZ01hcFN1YjsKKyAgICBib29sIHVzaW5nQWNjZWxlcmF0ZWRQYWludGlu
ZzsKKyAgICBpbnQgbWF4VGV4dHVyZVNpemU7Cit9OworCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3Qg
OiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVyVHJlZUhvc3Q+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RDbGll
bnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0KCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRp
bWUpOwotICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwotICAgIHZpcnR1YWwgdm9pZCBj
b21taXRDb21wbGV0ZSgpOwotCi0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
KTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjcmVh
dGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7CisgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVy
ZmFjZSB0byBDQ1Byb3h5LgorICAgIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpOworICAgIHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCopOworICAg
IFBhc3NPd25QdHI8Q0NUaHJlYWQ+IGNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKKyAgICBQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7
CisgICAgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0
SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7CisgICAgdm9pZCBkaWRSZWNyZWF0ZUdy
YXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJ
TkcpCisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiAKKyAgICAvLyBDQ0xh
eWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIFdlYlZpZXcuCiAgICAgYm9vbCBhbmltYXRpbmcoKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wg
YW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9IC8vIENhbiBiZSByZW1vdmVk
IHdoZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxpbmcgbW92ZXMgaW5zaWRlLgogCiAgICAgQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCisjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7
CisjZW5kaWYKKwogICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAKLSAgICB2b2lk
IGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAg
IC8vIENvbXBvc2l0ZXMgYW5kIGF0dGVtcHRzIHRvIHJlYWQgYmFjayB0aGUgcmVzdWx0IGludG8g
dGhlIHByb3ZpZGVkCisgICAgLy8gYnVmZmVyLiBJZiBpdCB3YXNuJ3QgcG9zc2libGUsIGUuZy4g
ZHVlIHRvIGNvbnRleHQgbG9zdCwgd2lsbCByZXR1cm4KKyAgICAvLyBmYWxzZS4KKyAgICBib29s
IGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOwogCiAg
ICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKIApAQCAtMTAxLDYgKzEzMiw5IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0KTsKIAorICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4
dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0
TmVlZHNSZWRyYXcoKTsKIApAQCAtMTEwLDYgKzE0NCwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25z
dCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIAor
ICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8g
Z2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJl
bW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4
dCgpOworI2VuZGlmCisKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdw
b3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Ny
b2xsUG9zaXRpb24pOwogCiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KQEAgLTExNywyMSArMTU3LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9y
IHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKLSAgICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxv
c2VDb21wb3NpdG9yQ29udGV4dCgpOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXll
clJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Ci0jZW5k
aWYKLQogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0K
IAotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWI7IH0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX21heFRleHR1cmVTaXplOyB9Ci0gICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQo
KSB7IHJldHVybiBtX2Jlc3RUZXh0dXJlRm9ybWF0OyB9Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwog
CkBAIC0xNDAsMjYgKzE2NywxMyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAgIC8vIFRlbXBvcmFy
eSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwotICAgIHZvaWQgcmVh
bGxvY2F0ZVJlbmRlcmVyKCk7Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4
dDsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0j
ZW5kaWYKLQotICAgIGludCBtX21heFRleHR1cmVTaXplOwotICAgIEdDM0RlbnVtIG1fYmVzdFRl
eHR1cmVGb3JtYXQ7Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKLQogICAgIGJv
b2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50Owog
CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bFByb3h5PiBtX3Byb3h5OworICAgIE93blB0cjxDQ1Byb3h5PiBtX3Byb3h5OwogCiAgICAgT3du
UHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIE93blB0cjxOb25Db21wb3NpdGVk
Q29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIwNTg2OTliZWEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotCi0j
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpCi17Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSk7Ci19Ci0K
LXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQoQ0NMYXllclRyZWVIb3N0KiBo
b3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKLXsKLSAgICBob3N0SW1wbC0+c2V0
U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+ZnJhbWVOdW1iZXIoKSk7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGJjMzE4YTRhNzE0MjMyZDMxODRkMmZlZDRhZDgwOTUxNzU4M2NjOTkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCi0jZGVmaW5lIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cl9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdDsK
LWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7Ci0KLS8vIEZJWE1FOiBtZXJnZSBpbiBUcmVlU3lu
Y2hyb25pemVyIGNvZGUgaW50byBoZXJlCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIg
ewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBj
cmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0KLQot
ICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0
SW1wbCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9
Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAppbmRleCA0ZTJkMWI4NDNjMTgzMmNmYWZhMTQzNTQ4NjJjYmZhMTUzODY2OWFlLi4yYjU5NTEy
ZWM2MmE1NzdiMTJmNjI3OTE5YjI0ZjkwNGY3M2E1OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzgsMTggKzM4LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBQYXNzUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCitQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQogewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0SW1wbChjbGllbnQsIHJlbmRlcmVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgc2V0dGlu
Z3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdElt
cGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBz
ZXR0aW5ncykKICAgICA6IG1fc291cmNlRnJhbWVOdW1iZXIoLTEpCiAgICAgLCBtX2ZyYW1lTnVt
YmVyKDApCiAgICAgLCBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFs
c2UpCi0gICAgLCBtX2xheWVyUmVuZGVyZXIocmVuZGVyZXIpCi0gICAgLCBtX3JlZHJhd1BlbmRp
bmcoZmFsc2UpCisgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQogewogfQogCkBAIC02NCw3MSAr
NjIsMTA2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6YmVnaW5Db21taXQoKQogCiB2b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbW1pdENvbXBsZXRlKCkKIHsKLSAgICBtX2NvbW1pdFBl
bmRpbmcgPSBmYWxzZTsKLSAgICBzZXROZWVkc1JlZHJhdygpOwogfQogCi12b2lkIENDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnMoKQorR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmNvbnRleHQoKQogewotICAgIC8vIElmIGEgY29tbWl0IGlzIHBlbmRpbmcsIGRv
IG5vdCBkcmF3LiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHJlc3RyaWN0aW9uIHRoYXQKLSAgICAvLyBp
cyBuZWNlc3NhcnkgYmVjYXVzZSBkcmF3TGF5ZXJzIGlzIGN1cnJlbnRseSBhIGJsb2NraW5nIG9w
ZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQuCi0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAg
ICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIgPyBtX2xheWVyUmVuZGVy
ZXItPmNvbnRleHQoKSA6IDA7Cit9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xh
eWVycygpCit7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnMiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQobV9yZWRyYXdQZW5kaW5nKTsKLSAgICBtX3JlZHJh
d1BlbmRpbmcgPSBmYWxzZTsKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICBpZiAo
bV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkKKyAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7CiAKLSAgICB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzQW5kUHJlc2VudCIsIHRoaXMsIDApOwotICAgICAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgICAgICBib29sIGNvbnRleHRMb3N0
OwotICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRo
aXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWluVGhyZWFkLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29u
dGV4dExvc3QpKSk7Ci0gICAgICAgIGNvbXBsZXRpb24ud2FpdCgpOworICAgICsrbV9mcmFtZU51
bWJlcjsKK30KIAotICAgICAgICAvLyBGSVhNRTogU2VuZCB0aGUgIlVwZGF0ZVJlY3QiIG1lc3Nh
Z2UgdXAgdG8gdGhlIFJlbmRlcldpZGdldCBbb3IgbW92ZXBsdWdpbiBlcXVpdmFsZW50cy4uLl0K
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBt
X2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBoYW5kbGUg
Y29udGV4dCBsb3N0Ci0gICAgICAgIGlmIChjb250ZXh0TG9zdCkKLSAgICAgICAgICAgIEZBVEFM
KCJMYXllclJlbmRlcmVyQ2hyb21pdW1JbXBsIGRvZXMgbm90IGhhbmRsZSBjb250ZXh0IGxvc3Qg
eWV0LiIpOwotICAgIH0KK2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aXNDb250ZXh0TG9zdCgp
Cit7CisgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlcik7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5k
ZXJlci0+aXNDb250ZXh0TG9zdCgpOworfQogCi0gICAgKyttX2ZyYW1lTnVtYmVyOworY29uc3Qg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+
Y2FwYWJpbGl0aWVzKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXcoKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KCkKIHsK
LSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXciLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyICYmICFpc0NvbnRl
eHRMb3N0KCkpOworICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworfQogCi0gICAgLy8g
RklYTUU6IG1vdmUgdGhlIHJlcXVlc3RGcmFtZUFuZENvbW1pdCBvdXQgZnJvbSBoZXJlIG9uY2Ug
d2UgYWRkIGZyYW1lcmF0ZSB0aHJvdHRsaW5nL2FuaW1hdGlvbgotICAgIGRvdWJsZSBmcmFtZUJl
Z2luVGltZSA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKLSAg
ICBtX2NsaWVudC0+cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChmcmFtZUJlZ2luVGlt
ZSk7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29u
c3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVy
UGl4ZWxzKHBpeGVscywgcmVjdCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0
TmVlZHNSZWRyYXcoKQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRSb290TGF5ZXIoUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIpCiB7Ci0gICAgaWYgKG1fcmVkcmF3UGVuZGluZyB8
fCBtX2NvbW1pdFBlbmRpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICBtX3Jvb3RMYXllckltcGwg
PSBsYXllcjsKK30KIAotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRO
ZWVkc1JlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IHRydWU7Ci0gICAg
bV9jbGllbnQtPnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKTsKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgaWYgKG1fbGF5ZXJS
ZW5kZXJlciAmJiAhdmlzaWJsZSkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4
dHVyZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzT25NYWlu
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBjb250ZXh0TG9zdCkK
K2Jvb2wgQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXll
clRyZWVIb3N0KiBpbXBsSGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4
dCkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIElmIG1fbGF5ZXJSZW5k
ZXJlciBleGlzdHMsIHRoZW4gd2UgYXJlIHJlY292ZXJpbmcgZnJvbSBhIGxvc3QgY29udGV4dAor
ICAgIGJvb2wgcmVjcmVhdGluZ1JlbmRlcmVyID0gbV9sYXllclJlbmRlcmVyOworCisgICAgLy8g
Rmlyc3QgdGltZSBsYXllclJlbmRlcmVyIGNyZWF0aW9uCisgICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcjsKKyAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikK
KyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGlt
cGxIYWNrLCB0aGlzLCBjb250ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIGxheWVyUmVuZGVyZXIg
PSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCks
IHRoaXMsIGNvbnRleHQpOworCisKKyAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBo
YWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBh
aW50aW5nCisgICAgLy8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCisgICAg
aWYgKCFsYXllclJlbmRlcmVyICYmIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Cisg
ICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7CisKKyAgICAgICAg
aWYgKCFyZWNyZWF0aW5nUmVuZGVyZXIpCisgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKKyAg
ICB9CiAKLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5vd25lcigpLT5yb290TGF5ZXIoKSkgewot
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKLSAgICAgICAgbV9sYXllclJl
bmRlcmVyLT5wcmVzZW50KCk7CisgICAgLy8gSWYgcmVjcmVhdGluZyByZW5kZXJlciwgdXBkYXRl
IHRoZSBsYXllcnMgdG8gcG9pbnQgYXQgdGhlIG5ldyByZW5kZXJlcgorICAgIGlmIChtX2xheWVy
UmVuZGVyZXIpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cm9vdExheWVyKCktPnBsYXRmb3Jt
TGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShsYXllclJlbmRlcmVyLmdldCgpKTsK
IAotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpOwotICAgICAgICAqY29udGV4dExvc3QgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1I7Ci0gICAgfSBlbHNlCi0gICAgICAgICpjb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIGNv
bXBsZXRpb24tPnNpZ25hbCgpOworICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7
CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlcjsKK30KKworLy8gRklYTUU6IG1vdmUgYWxsIHRo
aXMgY29kZSB0byBDQ0xheWVyVHJlZUhvc3QKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6dXBk
YXRlTGF5ZXJzKCkKK3sKKyAgICBpZiAobV9yb290TGF5ZXJJbXBsICYmIG1fbGF5ZXJSZW5kZXJl
cikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKK30KKwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gdmlld3BvcnRTaXplICE9IG1fdmlld3BvcnRTaXpl
OworICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRTaXplOworICAgIGlmIChjaGFuZ2VkKQor
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzQxMWNjYzczNTU0ZjFkZDMyYmNj
ZTJlMTVlNDhkYmVjYWM0YTg4ZS4uOTdiNjZiZjdjMTY1NTE1MjZlNmZkOWQxZDVkOGY0YjA2YjMy
MDA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjUsMjAgKzI1
LDI0IEBACiAjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogI2RlZmluZSBDQ0xheWVyVHJl
ZUhvc3RJbXBsX2gKIAotI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9U
aHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVu
dDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworc3Ry
dWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CiAKIC8vIFByb3ZpZGVzIHNjaGVkdWxpbmcg
aW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCAgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xh
eWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVB
bmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpID0gMDsKIAogcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQoKSB7IH0KQEAgLTQ4LDMzICs1
Miw1MiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RJbXBsKTsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudCosIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPik7CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmly
dHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpOworCiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKKyAgICB2b2lkIGZpbmlzaEFsbFJl
bmRlcmluZygpOwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVO
dW1iZXI7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLSAgICB2b2lkIHNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3KCk7CisgICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xh
eWVyVHJlZUhvc3QqIG93bmVySGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOwor
ICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlcigpIHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorICAgIGNvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBj
b25zdDsKKworICAgIHZvaWQgcHJlc2VudCgpOworCisgICAgdm9pZCByZWFkYmFjayh2b2lkKiBw
aXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFJvb3RM
YXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9v
bCk7CiAKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJj
ZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVO
dW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKKyAgICB2b2lk
IHVwZGF0ZUxheWVycygpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUpOworICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CisKIHByb3RlY3RlZDoKLSAgICBDQ0xheWVyVHJlZUhv
c3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRp
b25FdmVudCosIGJvb2wqIGNvbnRleHRMb3N0KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgaW50IG1f
c291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZhdGU6CiAg
ICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX2NvbW1p
dFBlbmRpbmc7CiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRl
cmVyOwotICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
bV9yb290TGF5ZXJJbXBsOworICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKKyAgICBJbnRTaXpl
IG1fdmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjY5Mjg4
NTY0NTk2ZDg3ODI2NzY2MWQzZjk0NjFlYmZiNjYyZTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCi0KLSNpbmNsdWRlICJUcmFj
ZUV2ZW50LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2Mv
Q0NNYWluVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgotI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLUNDVGhyZWFkKiBjY1RocmVhZDsKLWludCBudW1Q
cm94aWVzID0gMDsKLX0KLQotQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQotICAgIDogbV9jb21t
aXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCi17
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVI
b3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBudW1Qcm94aWVzKys7Ci0gICAgaWYgKCFjY1RocmVhZCkKLSAgICAgICAgY2NUaHJlYWQgPSBs
YXllclRyZWVIb3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpLmxlYWtQdHIo
KTsKLX0KLQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RhcnQoKQotewotICAg
IC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3Nz
VGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotfQot
Ci1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwot
ICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8g
bWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotCi0gICAgbnVtUHJveGllcy0tOwotICAgIGlm
ICghbnVtUHJveGllcykgewotICAgICAgICBkZWxldGUgY2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhy
ZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc1N0
YXJ0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfQotCi12
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQot
ewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29tbWl0UGVuZGluZykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBl
bmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c1JlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBjY1RocmVhZC0+
cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c3RvcCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgotICAgIENDQ29tcGxldGlvbkV2
ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25D
Q1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21w
bGV0aW9uLndhaXQoKTsKLQotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZl
cmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCi0gICAgbV9sYXllclRyZWVIb3N0ID0gMDsKLX0K
LQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NU
aHJlYWQoKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdEltcGwpCi0gICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRh
c2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQp
KTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENv
bW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xh
eWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1h
aW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFt
ZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLWJvb2wg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKQotewotICAgIHJldHVybiA6
OmlzTWFpblRocmVhZCgpOwotfQotCi0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotYm9v
bCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpCi17Ci0gICAgcmV0dXJu
IGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKLX0KLSNlbHNlCi1uYW1l
c3BhY2UgewotYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOwotfQotCi1ib29sIENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gZmFrZUltcGxU
aHJlYWQ7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFk
KGJvb2wgdmFsdWUpCi17Ci0gICAgZmFrZUltcGxUaHJlYWQgPSB2YWx1ZTsKLX0KLSNlbmRpZiAv
LyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyAhTkRFQlVHCi0KLXZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFt
X2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOwot
ICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExh
eW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlv
dXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNl
OwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY29tbWl0dGVyID0gbV9s
YXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7Ci0gICAgbV9sYXll
clRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21taXQKLSAgICBDQ0NvbXBsZXRpb25FdmVu
dCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dD
cm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgY29tbWl0dGVy
LmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7Ci19Ci0K
LXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKLXsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwotICAgIHsKLSAgICAgICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIGNvbW1p
dHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7
Ci0gICAgfQotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotCi0gICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKLX0KLQotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOwotfQotCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0K
LXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIs
IHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVI
b3N0SW1wbC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRl
ZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHlfaAotCi0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcjsKLQotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0SW1wbFByb3h5KCk7Ci0KLSAgICBib29sIGlzU3RhcnRlZCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXcoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5n
IHRoZSBwcm94eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRl
bGV0aW5nIHRoZSBwcm94eS4KLQotICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBj
YWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25D
Q1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhy
ZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgc3RhdGlj
IGJvb2wgaXNNYWluVGhyZWFkKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0j
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAvLyBGYWtlIHRocmVhZGVkIGNvbXBv
c2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJlY3QgdXNhZ2UuCi0gICAgc3RhdGljIHZvaWQg
c2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBl
eHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7Ci0gICAg
dmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhv
c3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRlOgotICAgIC8vIENhbGxlZCBvbiBDQ01haW5U
aHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRp
bWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCi0gICAgdm9pZCBjb21taXRPbkNDVGhy
ZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAg
dm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwotICAgIHZvaWQgaW5pdEltcGxPbkNDVGhyZWFk
KENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZv
aWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLQot
ICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KLSAgICBib29sIG1fY29tbWl0UGVuZGlu
ZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCi0gICAgQ0NMYXllclRy
ZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwg
YnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3du
LgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOwot
fTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRleCBmYWM2
ZTY0M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhLi40YzMzYmFhMDdhZGQzNTc3Mzlk
ZGI1MTc2MWU4NDdiNzRlNTFjMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCkBA
IC0xNTgsNiArMTU4LDg4IEBAIHByaXZhdGU6CiAgICAgUDMgbV9wYXJhbWV0ZXIzOwogfTsKIAor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFt
ZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQ
NCwgdHlwZW5hbWUgTVA0PgorY2xhc3MgTWFpblRocmVhZFRhc2s0IDogcHVibGljIENDTWFpblRo
cmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEs
IE1QMiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s0PFQsIFAxLCBNUDEs
IFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5
cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAz
Pjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxN
YWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFy
YW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFy
YW00IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5U
aHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBw
YXJhbWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJl
YWRUYXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisg
ICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9k
KG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBt
X3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVy
MykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICB7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nh
c3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIs
IG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0
aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7
CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0
eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBl
bmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBNYWluVGhyZWFkVGFz
azUgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZv
aWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIE1h
aW5UaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwg
TVA1PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUg
UGFyYW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6
UGFyYW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNr
SW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVy
NCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3
IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0
ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFy
YW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFy
YW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICA6IENDTWFpblRocmVh
ZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwg
bV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRl
cjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICwgbV9wYXJh
bWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisg
ICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAg
ICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVy
MSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFy
YW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAg
IFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJl
YWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTIxNSw2ICsyOTcsNDYgQEAgUGFzc093
blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5h
bWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUg
TVA0PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNr
KAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwg
TVAzLCBNUDQpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJh
bWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0
ZXI0KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQ+OjpjcmVhdGUoCisgICAgICAg
IGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46
OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShw
YXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRl
cjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOwor
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVu
YW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNzT3du
UHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29u
c3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1
KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwK
KyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAg
ICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2s1PFQs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAg
ICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpj
b3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFy
YW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDQ01haW5UaHJlYWRUYXNr
X2gKKyNlbmRpZiAvLyBNYWluVGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKaW5kZXggNjNlZGNmMGQ2N2E2ODRmNWRiZTBhMTJkNWQ5ZDI2MmEwYjE0YWMyMy4u
YTlmNDUwZWQ0ODI0NWQ4MWIwYzQzMDcyY2EzOTM3MTJkMGRkMzc4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NQbHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVy
SW1wbCgpCiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoKQogewotICAgIEFTU0VSVChD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQ
cm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAg
IGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
cigpLT5wbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFt
LT5pbml0aWFsaXplZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODI1OWJhNDY4MzIw
ZjQ1NWYzNDI4NzNlNWE4MDg5OTUzMWU0YmVjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
ImNjL0NDUHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5j
bHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5E
RUJVRworYm9vbCBDQ1Byb3h5Ojppc01haW5UaHJlYWQoKQoreworICAgIHJldHVybiA6OmlzTWFp
blRocmVhZCgpOworfQorCituYW1lc3BhY2UgeworYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNl
Oworc3RhdGljIFdURjo6VGhyZWFkSWRlbnRpZmllciBpbXBsVGhyZWFkSUQ7Cit9CisKK2Jvb2wg
Q0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwg
Y3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsKK30KKwordm9pZCBDQ1Byb3h5OjpzZXRJ
bXBsVGhyZWFkKGJvb2wgdmFsdWUpCit7CisgICAgZmFrZUltcGxUaHJlYWQgPSB2YWx1ZTsKK30K
Kwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllciBpZCkK
K3sKKyAgICBpbXBsVGhyZWFkSUQgPSBpZDsKK30KKworI2VuZGlmIC8vICFOREVCVUcKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNTM5ODYwOGRlNGU4MjEyOWUxMTgxOGI0ZTM1ZWJmNmRk
MDVmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NQcm94eV9oCisjZGVmaW5lIENDUHJveHlfaAorCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDVGhyZWFkOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
OworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQ7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzOworY2xhc3MgVGV4dHVyZU1hbmFnZXI7CisKKy8vIEFic3RyYWN0IGNsYXNzIHJl
c3BvbnNpYmxlIGZvciBwcm94eWluZyBjb21tYW5kcyBmcm9tIHRoZSBtYWluLXRocmVhZCBzaWRl
IG9mCisvLyB0aGUgY29tcG9zaXRvciBvdmVyIHRvIHRoZSBjb21wb3NpdG9yIGltcGxlbWVudGF0
aW9uLgorY2xhc3MgQ0NQcm94eSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NQcm94eSk7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+Q0NQcm94eSgpIHsgfQorCisgICAgdmlydHVhbCBib29s
IGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpID0gMDsK
KworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGluaXRp
YWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCkgPSAw
OworCisgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGUoYm9vbCkgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHN0YXJ0KCkgPSAwOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHBy
b3h5LgorICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgPSAwOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZv
cmUgZGVsZXRpbmcgdGhlIHByb3h5LgorCisgICAgLy8gRGVidWcgaG9va3MKKyNpZm5kZWYgTkRF
QlVHCisgICAgc3RhdGljIGJvb2wgaXNNYWluVGhyZWFkKCk7CisgICAgc3RhdGljIGJvb2wgaXNJ
bXBsVGhyZWFkKCk7CisjZW5kaWYKKworICAgIC8vIFRlc3RpbmcgaG9va3MKKyAgICB2aXJ0dWFs
IHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCkgPSAwOworCisgICAgLy8gSG9ycmlibGUgdWds
eSBoYWNrIHRvIGFsbG93IG1haW4gdGhyZWFkZWQgY29kZSB0byBnZXQgdG8gdGhlIEdyQ29udGV4
dAorICAgIC8vIGZvciBhY2NlbGVyYXRlZCBwYWludGluZy4gUmVtb3ZlIHRoaXMgQVNBUC4KKyNp
ZiBVU0UoU0tJQSkKKyAgICB2aXJ0dWFsIEdyQ29udGV4dCogc2tpYUNvbnRleHQoKSA9IDA7Cisj
ZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIHJlbmRlcl93aWRnZXQgc3RpbGwg
ZG9lcyBzY2hlZHVsaW5nIGZvciBDQ0xheWVyVHJlZUhvc3RNYWluVGhyZWFkSQorICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSA9IDA7CisKKyAgICAvLyBUZW1wb3Jhcnkg
aGFjayB3aGlsZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJl
ckNocm9taXVtcworICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBDQ1Byb3h5KCkgeyB9CisgICAgZnJpZW5k
IGNsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQ7CisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVh
ZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRp
Zmllcik7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE2YTIzNTFkZmZlNDc4YjkyZTZlZmY1YjQ4NTNmZWFhZTNl
NWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTAsMCArMSwyNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRh
c2suaCIKKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdU
RjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkIHsK
K3B1YmxpYzoKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJV
RworICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKHRydWUpOworI2VuZGlmCisgICAgfQor
ICAgIH5TY29wZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAg
ICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKKyNlbmRpZgorICAgIH0KK307CisKK1Bh
c3NPd25QdHI8Q0NQcm94eT4gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVl
SG9zdCogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2luZ2xl
VGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1NpbmdsZVRocmVhZFByb3h5OjpD
Q1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6
IG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQorICAgICwgbV9jb21taXRQZW5kaW5nKGZh
bHNlKQorICAgICwgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQoreworICAgIFRS
QUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhp
cywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworCit2b2lkIENDU2luZ2xl
VGhyZWFkUHJveHk6OnN0YXJ0KCkKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Cisg
ICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwodGhpcyk7Cit9CisKK0NDU2luZ2xlVGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVh
ZFByb3h5KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2lu
Z2xlVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8g
bWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVj
dCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKyAgICBpZiAoIWRvQ29tcG9zaXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnJlYWRiYWNrKHBpeGVscywgcmVjdCk7CisKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIEND
U2luZ2xlVGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIHJldHVybiBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Zmlu
aXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hB
bGxSZW5kZXJpbmcoKTsKK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppc1N0YXJ0ZWQo
KSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuIG1fbGF5
ZXJUcmVlSG9zdEltcGw7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spCit7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsKKworICAgIHsKKyAgICAg
ICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICByZXR1cm4gbV9sYXllclRyZWVI
b3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAg
ICB9Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDU2luZ2xlVGhyZWFk
UHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6Omxv
c2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0
ID0gdHJ1ZTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9jb21t
aXRQZW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVs
ZUNvbXBvc2l0ZSgpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzUmVk
cmF3KCkKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBtb3ZlIHJlbmRlcl93aWRnZXQgc2NoZWR1
bGluZyBpbnRvIHRoaXMgY2xhc3MsIHdlIGNhbgorICAgIC8vIHRyZWF0IHJlZHJhdyByZXF1ZXN0
cyBtb3JlIGVmZmljaWVudGx5IHRoYW4gY29tbWl0QW5kUmVkcmF3IHJlcXVlc3RzLgorICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldFZpc2libGUodmlzaWJsZSk7Cit9CisKK3Zv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2lu
Z2xlVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdCA9
IDA7Cit9CisKK0dyQ29udGV4dCogQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNraWFD
b250ZXh0KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdP
bkltcGxUaHJlYWQoKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1f
Y29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2No
ZWR1bGVDb21wb3NpdGUoKTsKK30KKworVGV4dHVyZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhv
c3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKK30KKwor
Ly8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRl
cl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQoreworICAgIC8vIENvbXBvc2l0ZUlmTmVlZGVkIHdpbGwg
bm90IG9jY3VyIGlmICFtX2NvbW1pdFBlbmRpbmcuIFNvLCBzZXQgdGhlIGJpdCBzbworICAgIC8v
IGl0IHN1Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdvIGF3YXkgb25jZSB0aGUgcHJveGllcyBhc3N1
bWUgZnVsbAorICAgIC8vIHNjaGVkdWxpbmcgcmVzcG9uc2liaWxpdHkuCisgICAgbV9jb21taXRQ
ZW5kaW5nID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Cit9CisKK3ZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSWZOZWVkZWQoKQoreworICAgIGlmIChtX2NvbW1p
dFBlbmRpbmcpIHsKKyAgICAgICAgLy8gVXBkYXRlCisgICAgICAgIGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFu
ZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnVw
ZGF0ZUxheWVycygpOworCisgICAgICAgIC8vIENvbW1pdAorICAgICAgICB7CisgICAgICAgICAg
ICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5iZWdpbkNvbW1pdCgpOworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRU
byhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEcmF3Cisg
ICAgICAgIGlmIChkb0NvbXBvc2l0ZSgpKQorICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+cHJlc2VudCgpOworICAgIH0KK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSgpCit7CisgICAgaWYgKG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCkgeworICAg
ICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3Qt
PmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICAgICAgQVNTRVJUKGNvbnRleHQt
Pmhhc09uZVJlZigpKTsKKyAgICAgICAgYm9vbCBvayA9ICFtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KTsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChvayk7CisgICAgICAgIG1fcmVjcmVhdGlu
Z0dyYXBoaWNzQ29udGV4dCA9IGZhbHNlOworICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgU2NvcGVk
U2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOworICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkgewor
ICAgICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2ls
bCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcworICAgICAgICAgIC8vIGRpZWQuIFRoaXMgaXMgYmVj
YXVzZSBHcHVDaGFubmVsSG9zdDo6T25FcnJvck1lc3NhZ2Ugd2lsbCBvbmx5IGJlCisgICAgICAg
ICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCBy
ZXZlcnRpbmcgb3VyCisgICAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVh
ZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCisgICAgICAgICAgLy8gcmVuZGVy
ZXIsIHJlY3JlYXRlIHRoZSByZW5kZXJlciBhdCB0aGUgbmV4dCBtZXNzYWdlIGxvb3AgaXRlcmF0
aW9uCisgICAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KKyAgICAg
ICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOworICAgICAgICAgIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQor
ICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJhMDYzZDA5MjNmNzM4NzkxN2NhODY2MzdmNzc5NWIx
YmRlMjk4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDkwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIENDU2luZ2xlVGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ1Np
bmdsZVRocmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisj
aW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHku
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5IDogcHVibGlj
IENDUHJveHksIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2aXJ0
dWFsIH5DQ1NpbmdsZVRocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0
aW9uCisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBi
b29sIGlzU3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZp
cnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIGltcGwgdGhyZWFkCisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCk7CisKKyAgICAvLyBIb3JyaWJs
ZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JD
b250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQ
LgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOwor
I2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSBMYXllckNocm9taXVtcyBob2xk
IHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtcworICAgIHZpcnR1YWwgVGV4dHVy
ZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKKworICAgIC8vIFNwZWNpYWwgY2Fz
ZSBmdW5jdGlvbnMuCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNv
bXBvc2l0ZUltbWVkaWF0ZWx5KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBD
Q1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZvaWQgY29tcG9zaXRl
SWZOZWVkZWQoKTsKKyAgICBib29sIGRvQ29tcG9zaXRlKCk7CisKKyAgICAvLyBBY2Nlc3NlZCBv
biBtYWluIHRocmVhZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRyZWVIb3N0
OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhy
ZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKKworICAgIGJvb2wgbV9jb21taXRQZW5k
aW5nOworICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0OworfTsKKworfQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQxZGJiNWVhMzM2
MzI5ZDE5MTdlYjg2MTRiN2I4ZTNiYTc0N2EwYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBA
IC0wLDAgKzEsMjk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJjYy9DQ1RocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NU
aHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQq
IGNjVGhyZWFkOworaW50IG51bVByb3hpZXMgPSAwOworfQorCitQYXNzT3duUHRyPENDUHJveHk+
IENDVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7
CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsK
K30KKworQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QpCisgICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJl
ZUhvc3QobGF5ZXJUcmVlSG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6
Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgbnVtUHJveGllcysrOworICAgIGlmICghY2NUaHJlYWQpIHsKKyAgICAgICAgY2NUaHJlYWQg
PSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7Cisg
ICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworICAg
IH0KK30KKworQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQoreworICAgIFRSQUNFX0VW
RU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8g
TWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0
KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJveGllcy0tOwor
ICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAgICAg
IGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRl
QW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NDb250
ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJl
bmRlcmluZygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQ0NUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbDsKK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihD
Q0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0
M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NF
UlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworCisgICAgLy8gTGVhayB0aGUgY29udGV4dCBwb2lu
dGVyIHNvIHdlIGNhbiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgaXQgdG8gdGhlIG90aGVyIHNpZGUu
Li4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciA9IGNvbnRleHQucmVsZWFzZSgp
LmxlYWtSZWYoKTsKKyAgICBBU1NFUlQoY29udGV4dFB0ci0+aGFzT25lUmVmKCkpOworCisgICAg
Ly8gTWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhy
ZWFkLiBUaGUgcmVzdWx0cyBvZiB0aGF0IGNhbGwKKyAgICAvLyBhcmUgcHVzaGVkIGludG8gdGhl
IGluaXRpYWxpemVTdWNjZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJpYWJsZXMuCisg
ICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBib29sIGluaXRpYWxpemVTdWNj
ZWVkZWQ7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhvd25lckhhY2sp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlv
biksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVkZWQpLCBBbGxvd0Ny
b3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7
CisKKyAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CisgICAgcmV0dXJuIGlu
aXRpYWxpemVTdWNjZWVkZWQ7Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
IENDVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAg
IHJldHVybiBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKK30KKwor
dm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2Nv
bW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0
UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFz
ayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
KSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25DQ1RocmVhZCwg
dmlzaWJsZSkpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnN0YXJ0KCkKK3sKKyAgICAvLyBD
cmVhdGUgTGF5ZXJUcmVlSG9zdEltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1Ro
cmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisKK3ZvaWQgQ0NU
aHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnN0
b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIC8vIFN5bmNo
cm9ub3VzbHkgZGVsZXRlcyB0aGUgaW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
VGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhy
ZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworCisgICAg
QVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVs
ZXRlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCitHckNvbnRleHQqIENDVGhyZWFk
UHJveHk6OnNraWFDb250ZXh0KCkKK3sKKyAgICAvLyBOb3Qgc3VwcG9ydGVkIG9uIHRoZSBpbXBs
IHRocmVhZC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBDUkFTSCgpOworICAgIHJl
dHVybiAwOworfQorCitUZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0
dXJlTWFuYWdlcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQo
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gRklYTUU6IGNhbGwgYmVnaW5GcmFtZUFuZENv
bW1pdCBvbiBtYWluIHRocmVhZAorfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVB
bmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlz
LCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1h
dGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRl
QW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1pdFBlbmRpbmcg
PSBmYWxzZTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9y
bUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBj
b21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJl
YWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhp
cywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0
SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVh
ZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25D
Q1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1Ro
cmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIENDVGhyZWFkUHJveHk6OnNldFZpc2libGVPbkNDVGhyZWFkKGJvb2wgdmlzaWJsZSkKK3sK
KyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0VmlzaWJsZU9uQ0NUaHJlYWQiLCB0
aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVy
VHJlZUhvc3RJbXBsKTsKKyAgICAvLyBUT0RPOiBzaG91bGQgdGhpcyBwYXNzIHRocm91Z2ggdmlh
IHRoZSBjb21taXQ/CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZSh2aXNpYmxl
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0ND
b21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9z
dC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7CisgICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkND
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrLCBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dFB0ciwgQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGluaXRpYWxpemVT
dWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqIGNhcGFiaWxpdGllcykKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoYWRvcHRSZWYoY29udGV4dFB0cikpOworICAg
ICppbml0aWFsaXplU3VjY2VlZGVkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXIob3duZXJIYWNrLCBjb250ZXh0KTsKKyAgICBpZiAoKmluaXRpYWxpemVTdWNj
ZWVkZWQpCisgICAgICAgICpjYXBhYmlsaXRpZXMgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21w
bGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAg
Y29tcGxldGlvbi0+c2lnbmFsKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MDA2N2YyNzI3YzFhN2M2OWVmYzM1YTQyNTM3YTBiOTgzNDAxMjk4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
Q0NUaHJlYWRQcm94eV9oCisjZGVmaW5lIENDVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2Mv
Q0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgi
CisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CisKK2NsYXNzIENDVGhy
ZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVl
SG9zdCopOworCisgICAgdmlydHVhbCB+Q0NUaHJlYWRQcm94eSgpOworCisgICAgLy8gQ0NQcm94
eSBpbXBsZW1lbnRhdGlvbgorICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwor
ICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spOworICAgIHZp
cnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
OworCisgICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBpbXBsIHRo
cmVhZAorICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhd09uSW1wbFRocmVhZCgpIHsgc2V0
TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7IH0KKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0
byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAv
LyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNL
SUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAg
IC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0
byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDVGhyZWFk
UHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFk
CisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisK
KyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKCk7CisgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50
Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdGlhbGl6
ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBpbml0aWFsaXpl
TGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiwgR3JhcGhpY3NDb250ZXh0
M0QqLCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
T25DQ1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAg
dm9pZCBzZXRWaXNpYmxlT25DQ1RocmVhZChib29sKTsKKyAgICB2b2lkIGxheWVyVHJlZUhvc3RD
bG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisKKyAgICAvLyBVc2VkIG9uIG1h
aW4tdGhyZWFkIG9ubHkuCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisKKyAgICAvLyBBY2Nl
c3NlZCBvbiBtYWluIHRocmVhZCBvbmx5LgorICAgIENDTGF5ZXJUcmVlSG9zdCogbV9sYXllclRy
ZWVIb3N0OworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzTWFpblRocmVhZENvcHk7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwg
YnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3du
LgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOwor
fTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKaW5kZXggOTFjNThlNWQyNWI3
YmIyODZlMjE2YzRlMDY4Y2JlMTA5NTc4ZjE4My4uZDhkZTRhYjAzNDY5ODg3NjlmYmUyNjc0ZmQz
MjM2MTBjNDVkNzIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgKQEAgLTE5OCw2ICsxOTgsNDgg
QEAgcHJpdmF0ZToKICAgICBQNCBtX3BhcmFtZXRlcjQ7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAy
LCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0
eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorY2xhc3MgQ0NUaHJlYWRUYXNrNSA6IHB1YmxpYyBD
Q1RocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShN
UDEsIE1QMiwgTVAzLCBNUDQsIE1QNSk7CisgICAgdHlwZWRlZiBDQ1RocmVhZFRhc2s1PFQsIFAx
LCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IENDVGhyZWFkVGFza0lt
cGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJh
bVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5j
ZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQ
YXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFRhc2tJbXBsKGluc3Rh
bmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRl
cjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ0NUaHJlYWRUYXNrNShU
KiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJh
bWV0ZXI1KQorICAgICAgICA6IENDVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1f
bWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAg
ICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFy
YW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAgLCBt
X3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lk
IHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNl
KCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywg
bV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRo
b2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsK
KyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1fcGFy
YW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDVGhyZWFk
OjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVlLApAQCAtMjc0
LDYgKzMxNiwyNyBAQCBQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRh
c2soCiAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywg
dHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bh
c3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKKyAgICBUKiBjb25z
dCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUp
LAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAor
ICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAg
IGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQoreworICAgIHJldHVybiBDQ1RocmVhZFRhc2s1PFQsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+
OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAg
ICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5
KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwK
KyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDQ1RocmVhZFRhc2tfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCBiZjIzYmRlZmQ5ZjNmNWNiODExODY0
ODBkZmY4MWMzNzI2OTE5OWUyLi41ZjViMjU2NDNhOGJmODRkYzBlNmE0ZjU4MWNkMGRjNjM0NDIx
Mjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyArMzEsNiBA
QAogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDRhNTViY2EwYTM2N2Q3MGYzODc0YzYwODNk
NTM2M2I1YzY0ZDZiZjEuLjlmZjFmY2NjOTcxNmMxMjQyZmUzNWZlNjkwYTJhODAyMTYwZDJmMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC0zMiw3ICszMiw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgImNjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzksNyAr
NzksNyBAQCB2b2lkIENDVmlkZW9MYXllckltcGw6OnNldFRleHR1cmUoc2l6ZV90IGluZGV4LCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmVJZCwgY29ucwogCiB2b2lkIENDVmlkZW9MYXllckltcGw6
OmRyYXcoKQogewotICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogCiAgICAgaWYg
KG1fc2tpcHNEcmF3KQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IGE3NDBhZDBmY2I0YmFlYmY5NmZhNjc5Mzg5Njk5OGQ3NzYyZjM5N2IuLjYwZmI2NzY2Mjk0
MDUyZDhlZjg1ODQxYTM5NzIxZTczYTFiM2Q3ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTEtMDgtMjYgIE5hdCBEdWNhICA8bmR1Y2FAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW50cm9kdWNlIENDTGF5ZXJUcmVlSG9zdEltcGxN
YWluVGhyZWFkUHJveHkgaW4gb3JkZXIgdG8gbW92ZSBMYXllclJlbmRlcmVyIHRvIENDTGF5ZXJU
cmVlSG9zdEltcGwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2ODA3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6
c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA4LTI1ICBK
ZXJlbXkgQXB0aG9ycCAgPGplcmVteWFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBFbmFibGUgZnVs
bHNjcmVlbiBBUEkgaW4gQ2hyb21pdW0gYnkgZGVmYXVsdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1YWNiMTdhODg2ZDliZThkZWQ0ZjljMTdmNzg1
ZGE0NDc5OTkwNTA1Li41NTJkZjA4ODIzZDQ0ODcyMjZmYTEzMWFjNTYzMDJjNDYyYzMwOTJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yNTE1LDkg
KzI1MTUsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5
ZXIpOwogCiAgICAgSW50UmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6
ZS5oZWlnaHQpOwotICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKLSAg
ICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOwotICAgIGVsc2UKKyAg
ICBpZiAoIW1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVu
dC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCkBAIC0yNjA4LDYgKzI2MDYs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wgYWN0aXZlKQogICAgICAgICBXZWJDb3JlOjpDQ1NldHRpbmdzIGNjU2V0dGluZ3M7CiAg
ICAgICAgIGNjU2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCk7CiAgICAgICAgIGNjU2V0dGluZ3MuY29tcG9z
aXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOwor
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgY2NTZXR0aW5ncy5lbmFibGVD
b21wb3NpdG9yVGhyZWFkID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgIGNjU2V0dGluZ3MuZW5hYmxl
Q29tcG9zaXRvclRocmVhZCA9IGZhbHNlOworI2VuZGlmCiAgICAgICAgIGNjU2V0dGluZ3Muc2hv
d0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOwogICAgICAgICBjY1Nl
dHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxh
eWVyVHJlZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcAppbmRleCAxYzVmODc3MjUyNjZiMDg4ZjY4NjY3NDZjOGQzYTFmOTYzYjU3
N2MyLi5kOTk0M2U3MTNhMjBhNGQ3YjA5MDQxYTRlY2NmNzdkOTBiMzNiMzZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAgcHVibGljOgogICAgIE1PQ0tfTUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBh
MSwgaW50IGEyKSk7CiAgICAgTU9DS19NRVRIT0QzKG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQg
YTIsIGludCBhMykpOwogICAgIE1PQ0tfTUVUSE9ENChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50
IGEyLCBpbnQgYTMsIGludCBhNCkpOworICAgIE1PQ0tfTUVUSE9ENShtZXRob2Q1LCB2b2lkKGlu
dCBhMSwgaW50IGEyLCBpbnQgYTMsIGludCBhNCwgaW50IGE1KSk7CiB9OwogCiBURVNUKENDVGhy
ZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKQEAgLTUxLDEyICs1MiwxNCBAQCBURVNUKEND
VGhyZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBt
ZXRob2QyKDksIDgpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QzKDks
IDgsIDcpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q0KDksIDgsIDcs
IDYpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q1KDksIDgsIDcsIDYs
IDUpKS5UaW1lcygxKTsKIAogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1l
dGhvZDApLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1v
Y2s6Om1ldGhvZDEsIDkpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygm
bW9jaywgJk1vY2s6Om1ldGhvZDIsIDksIDgpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUND
VGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5wZXJmb3JtVGFzaygp
OwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQsIDksIDgsIDcs
IDYpLT5wZXJmb3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6
Om1ldGhvZDUsIDksIDgsIDcsIDYsIDUpLT5wZXJmb3JtVGFzaygpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105505</attachid>
            <date>2011-08-29 11:35:22 -0700</date>
            <delta_ts>2011-08-29 14:48:03 -0700</delta_ts>
            <desc>Add precommit step and make sure we dont leak memory.</desc>
            <filename>bug-66807-20110829113521.patch</filename>
            <type>text/plain</type>
            <size>119819</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmMjllYjM4MDdlNGMzMTRm
MTFkYjc0YjBhMzM3MmVmMGUyMjk2YTRjLi5kNzZkZTQ3MGUxNjhkODBhYTAyZWIzNDg2YWZhOTYy
ZDIzNWM1OGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDExLTA4LTI2ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5
ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9ydHNNYXBTdWIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydFNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0
dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21w
b3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
U2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllczo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVz
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWFpblRocmVhZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
NDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVh
ZFRhc2s0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVNYWluVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5M
YXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFNldEltcGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpza2lhQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhd09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhy
ZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
aC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2s1OjpDQ1RocmVhZFRhc2s1KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkVGFzazU6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNDVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3KToKKwogMjAxMS0wOC0yOSAgTWF0dGhldyBEZWxhbmV5ICA8bWRlbGFu
ZXlAYXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvY2FudmFzL3NoYWRvdy1vZmZzZXQtKi5odG1s
IGZhaWwgb24gTGVvcGFyZC9Tbm93IExlb3BhcmQgd2hlbiByZW1vdmluZyB0aGUgd29yayBhcm91
bmQgZm9yIDxyZGFyOi8vcHJvYmxlbS81NTM5Mzg4Pi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjMDZj
ZTRiNjMyZWI1MmUyZWI2MTQ1MzFiYjZmYjhmNTAzNjc4NjUwLi5jZGNmNTllZTk3MTRlNjJjOTIx
OTVjZWJiZWRmMjk5YmE5NWFmOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM1LDIwICszNTM1
LDIyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU5YzJjY2Ex
ZDkyY2QzYWVmNjNhNDcwMWUwNWJkMWZiYWFjYjg0ZTcuLmRiNWUwMzQ2ZjZiNzUyY2ZjY2I1YjRl
NGM2OTUzZTViN2Q0OTBiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTEyMCwxNiArMTIwLDE4IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCgpIGNvbnN0CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVV
cGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKLSNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQorICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lh
Q29udGV4dCgpIHdpbGwgY3Jhc2ggaWYgY2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCisgICAgLy8g
bW9kZS4gVGhpcyB0aHVzIGRlcGVuZHMgb24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1
cm5pbmcgb2ZmCisgICAgLy8gYWNjZWxlcmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9t
IGNyYXNoaW5nLgogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykg
ewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5
ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKKyAgICAgICAgR3JDb250ZXh0KiBjb250ZXh0
ID0gY29uc3RfY2FzdDxDQ0xheWVyVHJlZUhvc3QqPihob3N0KS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGNvbnRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFNLSUEKLSNlbmRpZiAvLyAhVEhSRUFERURf
Q09NUE9TSVRJTkcKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0
LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDIzYzg1NTVmNTBi
ZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQyY2M1YmMuLjcxYmMwYjZiOWRiNjU2YmM0NjBmNGY4NTY1
NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTgx
LDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3Qg
Q0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7
CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTU2M2VhYTU3ZjU2NzNjODU5OWQ0ZGJhYWM4OGI5
MmQ5YzQ5NDM0OC4uZWVlYWJiMjEwYWExYjMyNTg5YzY3MWI4YzM3MTExNDQ5MmIwMzMxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDYgKzk2LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgY2hpbGRyZW4oKVtpXS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShyZW5kZXJlcik7CisK
KyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAg
IHJlcGxpY2FMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKwor
ICAgIHNldExheWVyUmVuZGVyZXIocmVuZGVyZXIpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKIHsKICAg
ICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciByZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZy
ZWUgdXAgYW55IHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFj
M2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmZlMmU0YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4
MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RMYXllcihib29sIGlzUm9vdExheWVyKSB7IG1faXNSb290
TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQogICAgIGJvb2wgaXNSb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzUm9vdExheWVyOyB9CiAKKyAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNp
dmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qg
b3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAg
ICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KICAgICAvLyBGSVhNRSwgcmVwbGFj
ZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDcwYTA1ZGNhMDkwMTBhNmNiNTlmY2Y1YjFkYWUzMTAyZDhmNmRkZmQuLjg1YzU3
ZTRiZWU5NDhjOGI5Y2ZhYThkNjJhYTJiODk3YTdlZDNmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3Qu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTQ0OSwxMyArNDUwLDEzIEBA
IGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93
bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNj
ZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0
UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5
ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25lckltcGwsIGNvbnRleHQpKSk7CiAgICAgaWYg
KCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00
NjMsOCArNDY0LDEwIEBAIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqCiB9CiAKIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBvd25lckltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDog
bV9vd25lcihvd25lcikKKyAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQog
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC00ODMsMTQgKzQ4NiwxOCBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIC8vIExpbWl0IHRoZSBieXRl
cyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUu
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAq
IDEwMjQgKiAxMDI0OwogICAgICAgICBtX3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1p
dHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAg
bV9jYXBhYmlsaXRpZXMudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKLSAgICBpZiAobV9jb250ZXh0
U3VwcG9ydHNNYXBTdWIpCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWIgPSBleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOworICAgIGlmIChtX2NhcGFiaWxp
dGllcy51c2luZ01hcFN1YikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
Q0hST01JVU1fbWFwX3N1YiIpOwogCisgICAgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUg
PSBtYXhUZXh0dXJlU2l6ZSgpOworICAgIG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0
ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKKwog
ICAgIGlmICghaW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCkBAIC01MTQsMTEgKzUyMSwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xl
YXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcAogICAgIGxh
eWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNsZWFyUm9vdENDTGF5ZXJJbXBsKCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
bG9zZSgpCiB7Ci0gICAgaWYgKG1fcm9vdENDTGF5ZXJJbXBsKQotICAgICAgICBjbGVhclJlbmRl
clN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSk7
Ci0gICAgbV9yb290Q0NMYXllckltcGwuY2xlYXIoKTsKKyAgICBpZiAocm9vdExheWVySW1wbCgp
KQorICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShyb290
TGF5ZXJJbXBsKCkpOwogfQogCiBHcmFwaGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjb250ZXh0KCkKQEAgLTU2NywxMyArNTczLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNV
cERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAotICAgIC8vIFJlY2hlY2sg
dGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVjb21lIG51bGwgaWYK
LSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0
aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwu
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHVwZGF0ZUxheWVycyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApAQCAtNTgyLDEyICs1ODEsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgaWYgKCFyb290TGF5ZXIo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7Ci0gICAgICAgIG1f
cm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSk7Ci0gICAg
fQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRC
eXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsK
IApAQCAtNzMyLDcgKzcyNSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5
ZXJzSW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAgQ0NMYXllckltcGwq
IHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKTsKKyAgICBDQ0xheWVySW1w
bCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKICAgICBtYWtlQ29udGV4dEN1cnJl
bnQoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtODQw
LDIwICs4MzMsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cHJlc2VudCgpCiAgICAg
bV9oZWFkc1VwRGlzcGxheS0+b25QcmVzZW50KCk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyKQot
ewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBs
YXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNp
emUoKTsgKytpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGNoaWxkcmVuW2ld
LmdldCgpKTsKLQotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpCi0gICAgICAgIHNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUobGF5ZXItPm1hc2tMYXllcigpKTsKLSAgICBpZiAobGF5ZXItPnJl
cGxpY2FMYXllcigpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSk7Ci0KLSAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLX0K
LQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQg
KnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQocmVjdC5tYXhYKCkg
PD0gdmlld3BvcnRXaWR0aCgpICYmIHJlY3QubWF4WSgpIDw9IHZpZXdwb3J0SGVpZ2h0KCkpOwpA
QCAtOTQ4LDcgKzkyNyw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qIGxheWVyKQogCiBNYW5hZ2VkVGV4dHVyZSog
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUoKQogewotICAg
IHJldHVybiBzZXR0aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiBtX3Jvb3RDQ0xheWVySW1w
bCA/IG1fcm9vdENDTGF5ZXJJbXBsLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4dHVyZSgp
IDogMDsKKyAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgcm9vdExh
eWVySW1wbCgpID8gcm9vdExheWVySW1wbCgpLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRzVGV4
dHVyZSgpIDogMDsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvcHlPZmZzY3Jl
ZW5UZXh0dXJlVG9EaXNwbGF5KCkKQEAgLTEyOTksNyArMTI3OCw3IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkdW1wUmVuZGVyU3VyZmFjZXMoVGV4dFN0cmVhbSYgdHMsIGludCBpbmRl
bnQsIGNvbnN0CiAgICAgICAgIGR1bXBSZW5kZXJTdXJmYWNlcyh0cywgaW5kZW50LCBsYXllci0+
Y2hpbGRyZW4oKVtpXS5nZXQoKSk7CiB9CiAKLWJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpCitib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXND
b250ZXh0TG9zdCgpCiB7CiAgICAgcmV0dXJuIChtX2NvbnRleHQuZ2V0KCktPmdldEV4dGVuc2lv
bnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDJkODA0
MDNkZDUyNmJjZWVjODRiM2U5Y2E0YzgwOTI2MWFjMTc1ZmQuLmMyYzcyYmRlMWIzMTIyZjE0ZmVk
ZGU1NGE3OTI2MTI2MzAwZjI0N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3Qu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQ
bHVnaW5MYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTYzLDcgKzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3MgQ0NMYXllckltcGw7Ci1jbGFzcyBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXI7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7IC8vIFRPRE86
IHJlbW92ZSBwb2ludGVycyB0byB0aGlzCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xh
c3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03MiwxMSAr
NzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8gQ2xhc3MgdGhhdCBo
YW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xh
c3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0
byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0CisgICAgdm9pZCBj
bG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBj
b25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnNldHRp
bmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRp
ZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCiAgICAgQ0NMYXllclRyZWVI
b3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBjb25zdCBDQ0xheWVyVHJlZUhv
c3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQpAQCAtODQsMTQgKzg5LDE3IEBA
IHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293bmVy
LT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKKyAgICBDQ0xheWVySW1wbCog
cm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQorICAg
IGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9vd25l
ckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgp
OwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNv
bnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKICNpZiBVU0UoU0tJ
QSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgeyByZXR1cm4gbV9za2lhQ29udGV4dC5n
ZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJl
dHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHZpZXdw
b3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUoKTsgfQogICAgIGlu
dCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lkdGgoKTsgfQogICAg
IGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpOyB9
CiAKQEAgLTE0MiwyNCArMTUwLDE3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBsYXllclRyZWVB
c1RleHQoKSBjb25zdDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBjb21wb3NpdG9yIGNv
bnRleHQgaGFzIGFuIGVycm9yLgotICAgIGJvb2wgaXNDb21wb3NpdG9yQ29udGV4dExvc3QoKTsK
KyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7
CiAKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOwot
CiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAogICAgIHR5cGVkZWYgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKLSAgICB2b2lkIGNsZWFyUm9vdEND
TGF5ZXJJbXBsKCk7CiBwcml2YXRlOgotICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1v
dmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCi0g
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKLQotICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5
ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9v
bCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7
CkBAIC0xOTIsOSArMTkzLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNsZWFyUmVuZGVyU3Vy
ZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAKLSAgICAvLyBGSVhN
RTogQ2hhbmdlIHRoaXMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgIC8vIEZJWE1FOiBSZW1v
dmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCiAgICAgQ0NMYXllclRyZWVIb3N0KiBtX293bmVyOwog
CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7CisKKyAgICBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93
TWF0cml4OwogCkBAIC0yMzQsOCArMjM5LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JDb250
ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRz
TWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwog
CiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5ZTJjMy4u
YTc5ZWExMmM0ZDc0YzE5MWVjNGQ2MDdlYmZkNDhhZDVlMzdkZjgzYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hy
b21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQogCiAgICAgY3Jl
YXRlVGV4dHVyZVVwZGF0ZXIoaG9zdCk7CiAKLSAgICBtX3RleHR1cmVGb3JtYXQgPSBob3N0LT5i
ZXN0VGV4dHVyZUZvcm1hdCgpOworICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsKICAgICBtX3RleHR1cmVPcmll
bnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9zYW1wbGVk
VGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0
dXJlRm9ybWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZSgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVv
TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MmQyOGRmYjNjNjIzNmU3MDNjMTkz
ZDRlZTU3NmUxNjk5OGQxY2YuLjE2YjUwYjE3MmMwNjJjMjJhOWI1MTljM2UwZDBjZTcxODcwZjc3
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtMTc4LDcgKzE3OCw3IEBA
IGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFt
ZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQo
dGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAKLSAg
ICBpbnQgbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhvc3QtPm1heFRleHR1cmVTaXplKCk7
CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRyZWVIb3N0LT5sYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAgICBmb3IgKHVuc2lnbmVkIHBsYW5l
ID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKyspIHsKICAgICAgICAgSW50U2l6
ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmluZGV4IGE4NjZhMTc5YTcwOTk1
NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3
ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTMx
LDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIENDQ2Fu
dmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQogCiB2b2lkIENDQ2FudmFzTGF5ZXJJ
bXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBB
U1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6UHJv
Z3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CiAg
ICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZDZiYzljMzI3MzUyNjc5ZTU4NjRhYzgyYmU1YmJm
NDRlZTUyZTZmLi42ZDAyYzBjNmVmN2VmMTk4YjY2ZjM0OTZhZTgwODAyYzZkYjNlMWMzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1
ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCi0jaW5jbHVkZSAi
UGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgi
CiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNj
L0NDVGhyZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxMCArNDgs
NyBAQCBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbgogfQogCiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5n
cyYgc2V0dGluZ3MpCi0gICAgOiBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQoZmFsc2UpCi0g
ICAgLCBtX21heFRleHR1cmVTaXplKDApCi0gICAgLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1Yihm
YWxzZSkKLSAgICAsIG1fYW5pbWF0aW5nKGZhbHNlKQorICAgIDogbV9hbmltYXRpbmcoZmFsc2Up
CiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBt
X25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdChOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0
ZShtX2NsaWVudC0+Y3JlYXRlUm9vdExheWVyUGFpbnRlcigpKSkKQEAgLTU5LDE1ICs1OCwxOSBA
QCBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQq
IGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncwogCiBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlh
bGl6ZSgpCiB7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwot
ICAgIGlmICghbV9sYXllclJlbmRlcmVyKQorICAgIGlmIChtX3NldHRpbmdzLmVuYWJsZUNvbXBv
c2l0b3JUaHJlYWQpIHsKKyAgICAgICAgLy8gQWNjZWxlcmF0ZWQgUGFpbnRpbmcgaXMgbm90IHN1
cHBvcnRlZCBpbiB0aHJlYWRlZCBtb2RlLiBUdXJuIGl0IG9mZi4KKyAgICAgICAgbV9zZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKyAgICAgICAgbV9wcm94eSA9IENDVGhyZWFk
UHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wcm94eSA9IENDU2lu
Z2xlVGhyZWFkUHJveHk6OmNyZWF0ZSh0aGlzKTsKKyAgICBtX3Byb3h5LT5zdGFydCgpOworCisg
ICAgaWYgKCFtX3Byb3h5LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcih0aGlzKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgLy8gRklYTUU6IEluIHRoZSB0aHJlYWRlZCBjYXNlLCB0aGVz
ZSB2YWx1ZXMgd2lsbCBuZWVkIHRvIGJlIGluaXRpYWxpemVkCi0gICAgLy8gYnkgc29tZXRoaW5n
IG90aGVyIHRoYW4gbV9sYXllclJlbmRlcmVyLgotICAgIG1fbWF4VGV4dHVyZVNpemUgPSBtX2xh
eWVyUmVuZGVyZXItPm1heFRleHR1cmVTaXplKCk7Ci0gICAgbV9iZXN0VGV4dHVyZUZvcm1hdCA9
IFBsYXRmb3JtQ29sb3I6OmJlc3RUZXh0dXJlRm9ybWF0KG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4
dCgpKTsKLSAgICBtX2NvbnRleHRTdXBwb3J0c01hcFN1YiA9IG1fbGF5ZXJSZW5kZXJlci0+Y29u
dGV4dFN1cHBvcnRzTWFwU3ViKCk7CisgICAgLy8gVXBkYXRlIG1fc2V0dGluZ3MgYmFzZWQgb24g
Y2FwYWJpbGl0aWVzIHRoYXQgd2UgZ290IGJhY2sgZnJvbSB0aGUgcmVuZGVyZXIuCisgICAgbV9z
ZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBtX3Byb3h5LT5sYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwogCiAgICAgbV9yb290TGF5ZXIgPSBH
cmFwaGljc0xheWVyOjpjcmVhdGUoMCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtNzcsMTIgKzgwLDgg
QEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogCiAgICAgbV9yb290TGF5ZXIt
PmFkZENoaWxkKG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCkpOwog
Ci0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgbV9wcm94eSA9IENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6Y3JlYXRlKHRoaXMpOwotICAgIEFTU0VSVChtX3Byb3h5LT5pc1N0
YXJ0ZWQoKSk7CisgICAgLy8gV2UgY2hhbmdlZCB0aGUgcm9vdCBsYXllci4gVGVsbCB0aGUgcHJv
eHkgYSBjb21taXQgaXMgbmVlZGVkLgogICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Ci0jZW5kaWYKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtOTAsNjIgKzg5LDc5IEBA
IGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIENDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCgpCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6fkND
TGF5ZXJUcmVlSG9zdCIsIHRoaXMsIDApOwotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
ICAgICBtX3Byb3h5LT5zdG9wKCk7CiAgICAgbV9wcm94eS5jbGVhcigpOwotI2VuZGlmCiB9CiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0OjpiZWdpbkNvbW1pdCgpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiB7CisgICAgbV9hbmlt
YXRpbmcgPSB0cnVlOworICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5U
aW1lKTsKKyAgICBtX2FuaW1hdGluZyA9IGZhbHNlOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6cHJlQ29tbWl0KENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQoreworICAgIGhvc3RJ
bXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUoKSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0Ojpjb21taXRDb21wbGV0ZSgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIs
IHRoaXMsIDApOworICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJl
cigpKTsKKworICAgIC8vIFN5bmNocm9uaXplIHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4u
LgorICAgIGlmIChyb290TGF5ZXIoKSkKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihU
cmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxh
eWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOworICAgIGVsc2UKKyAgICAgICAgaG9zdElt
cGwtPnNldFJvb3RMYXllcigwKTsKKwogICAgIG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQor
UGFzc093blB0cjxDQ1RocmVhZD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhy
ZWFkKCkKIHsKLSAgICBtX2FuaW1hdGluZyA9IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVB
bmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAg
cmV0dXJuIG1fY2xpZW50LT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CiB9CiAKLVBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVy
VHJlZUhvc3RDb21taXR0ZXIoKQorUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gQ0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhN
RTogb25seSBjYWxsZWQgaW4gdGhyZWFkaW5nIGNhc2UsIGZpeCB3aGVuIHBvc3NpYmxlLgotICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpOwogfQogCiBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCogY2xpZW50KQogewotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRl
cmVyKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNy
ZWF0ZShjbGllbnQsIHJlbmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6
Y3JlYXRlKGNsaWVudCwgbV9zZXR0aW5ncyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xh
eWVyVHJlZUhvc3Q6OmNvbnRleHQoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRl
R3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKLSAgICByZXR1cm4gbV9sYXllclJlbmRl
cmVyLT5jb250ZXh0KCk7CisgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KHN1Y2Nlc3MpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQorI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUoKQog
ewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAvLyBGSVhNRTogbmVlZCB0byBp
bXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgY29tcG9zaXRlKGZhbHNlKTsKLSAgICBtX2xheWVy
UmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CisgICAgbV9jbGll
bnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7Cit9CiAjZW5kaWYKKworLy8gVGVtcG9yYXJ5IGhhY2sg
dW50aWwgV2ViVmlld0ltcGwgY29udGV4dCBjcmVhdGlvbiBnZXRzIHNpbXBsaWZpZWQKK0dyYXBo
aWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQoKQoreworICAgIEFTU0VSVCgh
bV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkKTsKKyAgICByZXR1cm4gbV9wcm94eS0+
Y29udGV4dCgpOworfQorCitib29sIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBtX3By
b3h5LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQot
ICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5LT5maW5p
c2hBbGxSZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVS
b290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTE1Myw2ICsxNjksMTEg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIGRpcnR5UmVjdCkKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxp
ZGF0ZVJlY3QoZGlydHlSZWN0KTsKIH0KIAorY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyYgQ0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCiB2
b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTE3NywxMyArMTk4LDE3IEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjpzZXRSb290TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxh
eWVyKCk7Ci0gICAgaWYgKGxheWVyKSB7CisgICAgaWYgKGxheWVyKQogICAgICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5hZGRDaGlsZChsYXllcik7Ci0g
ICAgICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXIobV9sYXllclJl
bmRlcmVyLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVh
clJvb3RDQ0xheWVySW1wbCgpOworfQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIENDTGF5
ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX3NldHRpbmdzLmFjY2Vs
ZXJhdGVQYWludGluZyk7CisgICAgcmV0dXJuIG1fcHJveHktPnNraWFDb250ZXh0KCk7CiB9Cisj
ZW5kaWYKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2lu
dCYgc2Nyb2xsUG9zaXRpb24pCiB7CkBAIC0xOTMsMTE0ICsyMTgsMzIgQEAgdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3Qg
SW50U2l6ZSYgY28KICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2Nyb2xsUG9z
aXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5n
cmFwaGljc0xheWVyKCktPnNldFNpemUoY29udGVudHNTaXplKTsKIAotICAgIGlmICh2aXNpYmxl
UmVjdENoYW5nZWQpIHsKKyAgICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKQogICAgICAgICBtX25v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgICAg
IGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdw
b3J0Q2hhbmdlZCgpOwotICAgIH0KIAogICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIGlmICghdmlzaWJsZSkKLSAgICAgICAg
bV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMoKTsKLSNlbmRpZgorICAgIG1fcHJveHkt
PnNldFZpc2libGUoZmFsc2UpOwogfQogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclJlbmRlcmVyKCkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQogewotICAgIC8vIEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGluIHRoYXQgY2FzZSBmYWxsIGJh
Y2sgdG8gc29mdHdhcmUuCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
bV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKLSAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQWN0dWFsbHkgY3JlYXRlIHRoZSByZW5k
ZXJlci4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyID0g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0KLSAgICAvLyBJ
ZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9yIGFjY2VsZXJhdGVkIHBhaW50
aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCi0gICAgLy8gYW5kIHRyeSBjcmVhdGlu
ZyB0aGUgcmVuZGVyZXIgYWdhaW4uCi0gICAgaWYgKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50
aW5nICYmICFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBh
aW50aW5nID0gZmFsc2U7Ci0gICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbGF5ZXJS
ZW5kZXJlcjsKKyAgICBtX3Byb3h5LT5sb3NlQ29tcG9zaXRvckNvbnRleHQoKTsKIH0KIAogVGV4
dHVyZU1hbmFnZXIqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpIGNv
bnN0CiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgY2xhc3Mgc2hvdWxkIG93biB0aGUgY29udGVudHMg
dGV4dHVyZSBtYW5hZ2VyCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwogfQogCiAj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpkb0Nv
bXBvc2l0ZSgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKGJvb2wpCiB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0
cnVlKTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIG1fbGF5ZXJS
ZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJz
KCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1w
bFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBv
c2l0ZShib29sIGZpbmlzaCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpj
b21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRl
eHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFp
bnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAgIC8vIGluIGNyZWF0aW5nIGEg
bmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotICAgICAgICBtX3Jl
Y3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBh
bHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRl
eHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQotICAgICAgICAvLyBQdXQgcmVz
dWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7
Ci0gICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2ls
bCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1
c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQotICAgICAgICAv
LyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVy
dGluZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2Ug
ZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAgIC8vIHJlbmRlcmVyLCByZWNy
ZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgotICAg
ICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgotICAgICAgICBtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhdygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9y
Q29udGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLX0K
LQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcigpCi17Ci0gICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVu
ZGVyZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9jbGllbnQtPmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5
ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJl
cjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKKyAg
ICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7CisgICAgc3RhdGlj
X2Nhc3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21wb3NpdGVJbW1l
ZGlhdGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5NGQ4MzY0MTQ4M2I0OWQ5M2M2
OTBmYjFlYWJhZThjNi4uNDJjZDRmZGNhZDM4MjU5N2ZiYzMzZDEzM2I0NTU4MzdmMzc4M2IxYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDEzICsyNywxNiBAQAogCiAjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwpA
QCAtNjUsMzUgKzY4LDY0IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRpbmdzKCkK
ICAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBj
b21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JU
aHJlYWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAg
ICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBhY2Nl
bGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgYm9vbCBl
bmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9v
bCBzaG93UGxhdGZvcm1MYXllclRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBv
biBhbiBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVyVHJl
ZUhvc3QKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkKKyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAgICAg
ICAsIHVzaW5nTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGlu
ZyhmYWxzZSkKKyAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0RlbnVt
IGJlc3RUZXh0dXJlRm9ybWF0OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1c2lu
Z0FjY2VsZXJhdGVkUGFpbnRpbmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsKKwogY2xh
c3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwg
fkNDTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQo
ZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsK
LSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIC8vIEND
TGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lkIHByZUNvbW1pdChDQ0xheWVy
VHJlZUhvc3RJbXBsKik7IC8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnVwZGF0ZUxheWVycyBpcyBzcGxpdCBhcGFydC4KKyAgICB2b2lkIGNvbW1pdFRvKENDTGF5
ZXJUcmVlSG9zdEltcGwqKTsKKyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3Np
dG9yVGhyZWFkKCk7CisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5
ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwor
ICAgIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKTsKKyNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsK
KyNlbmRpZgogCisgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBXZWJWaWV3Lgog
ICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KICAgICB2
b2lkIHNldEFuaW1hdGluZyhib29sIGFuaW1hdGluZykgeyBtX2FuaW1hdGluZyA9IGFuaW1hdGlu
ZzsgfSAvLyBDYW4gYmUgcmVtb3ZlZCB3aGVuIG5vbi10aHJlYWRlZCBzY2hlZHVsaW5nIG1vdmVz
IGluc2lkZS4KIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50KCkgeyByZXR1cm4g
bV9jbGllbnQ7IH0KIAorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdm9pZCBj
b21wb3NpdGUoYm9vbCBmaW5pc2gpOworI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHQzRCog
Y29udGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmKTsKKyAgICAvLyBDb21wb3NpdGVzIGFuZCBhdHRlbXB0cyB0byByZWFk
IGJhY2sgdGhlIHJlc3VsdCBpbnRvIHRoZSBwcm92aWRlZAorICAgIC8vIGJ1ZmZlci4gSWYgaXQg
d2Fzbid0IHBvc3NpYmxlLCBlLmcuIGR1ZSB0byBjb250ZXh0IGxvc3QsIHdpbGwgcmV0dXJuCisg
ICAgLy8gZmFsc2UuCisgICAgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKQEAg
LTEwMSw2ICsxMzMsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGludmFsaWRhdGVSb290TGF5ZXJS
ZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCk7CiAKKyAgICBjb25zdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAgdm9p
ZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKTsKKwogICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKICAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CiAKQEAgLTExMCw2ICsxNDUsMTIg
QEAgcHVibGljOgogCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJl
dHVybiBtX3NldHRpbmdzOyB9CiAKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cg
bWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFj
Y2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAg
IEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgorCiAgICAgdm9pZCBzZXRWaWV3cG9y
dChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6
ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKTsKIAogICAgIGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CkBAIC0xMTcs
MjEgKzE1OCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKIAotICAg
IC8vIFRlbXBvcmFyeSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgot
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBjb21wb3NpdGUoYm9vbCBm
aW5pc2gpOwotCi0gICAgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKTsKLQotICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlci5nZXQoKTsgfQotI2VuZGlmCi0KICAgICBOb25Db21wb3NpdGVkQ29udGVudEhvc3Qq
IG5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0LmdldCgpOyB9CiAKLSAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1Yigp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOyB9Ci0gICAgaW50IG1heFRl
eHR1cmVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXhUZXh0dXJlU2l6ZTsgfQotICAgIEdDM0Rl
bnVtIGJlc3RUZXh0dXJlRm9ybWF0KCkgeyByZXR1cm4gbV9iZXN0VGV4dHVyZUZvcm1hdDsgfQot
CiBwcm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCos
IGNvbnN0IENDU2V0dGluZ3MmKTsKIApAQCAtMTQwLDI2ICsxNjgsMTMgQEAgcHJpdmF0ZToKIAog
ICAgIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGVMYXllclJlbmRlcmVy
KCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3IgdGhlIG5vbi10aHJlYWRlZCByZW5kZXJp
bmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIHZvaWQgZG9Db21w
b3NpdGUoKTsKLSAgICB2b2lkIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotCi0gICAgYm9vbCBtX3Jl
Y3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbV9sYXllclJlbmRlcmVyOwotI2VuZGlmCi0KLSAgICBpbnQgbV9tYXhUZXh0dXJlU2l6ZTsK
LSAgICBHQzNEZW51bSBtX2Jlc3RUZXh0dXJlRm9ybWF0OwotICAgIGJvb2wgbV9jb250ZXh0U3Vw
cG9ydHNNYXBTdWI7Ci0KICAgICBib29sIG1fYW5pbWF0aW5nOwogCiAgICAgQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBtX2NsaWVudDsKIAogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCi0gICAgT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eT4gbV9wcm94eTsKKyAgICBPd25QdHI8Q0NQcm94
eT4gbV9wcm94eTsKIAogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Jvb3RMYXllcjsKICAg
ICBPd25QdHI8Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0PiBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1
Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29t
bWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwp
Ci17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZyYW1lTnVtYmVy
KCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMxOGE0YTcxNDIzMmQzMTg0ZDJmZWQ0
YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotI2RlZmluZSBD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwotCi0vLyBG
SVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQotY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVl
SG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYy
Y2JmYTE1Mzg2NjlhZS4uNDlkMTcxOWYwMDQ0ZjQ1ZDEzOTZhY2VhMjBjOTczNjFhODVkNjU1NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTM4LDI0ICszOCwy
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQor
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVh
dGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBjb25zdCBDQ1NldHRpbmdzJiBz
ZXR0aW5ncykKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwo
Y2xpZW50LCByZW5kZXJlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVI
b3N0SW1wbChjbGllbnQsIHNldHRpbmdzKSk7CiB9CiAKLUNDTGF5ZXJUcmVlSG9zdEltcGw6OkND
TGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBQYXNz
UmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCitDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVu
dCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVy
KC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwgbV9jbGllbnQoY2xpZW50KQotICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVy
KQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0
SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJl
Z2luQ29tbWl0KCkKQEAgLTY0LDcxICs2NCwxMDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxl
dGUoKQogewotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3
KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGlj
c0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYg
YSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVz
dHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMg
Y3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJh
d1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXll
cigpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVz
ZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0g
ICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2so
Y3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53
YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5k
IHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3Zl
cGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hB
bGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAg
ICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRM
b3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBu
b3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsK
KyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICAr
K21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXNlbnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5w
cmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0
aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2Nv
bW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVh
ZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKLSAg
ICBpZiAobV9yZWRyYXdQZW5kaW5nIHx8IG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJu
OworICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOworfQogCi0gICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9yZWRy
YXdQZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1Ro
cmVhZCgpOwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyICYmICF2aXNpYmxlKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRp
b24sIGJvb2wqIGNvbnRleHRMb3N0KQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIGltcGxIYWNrLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgLy8gSWYgbV9sYXllclJlbmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3Zlcmlu
ZyBmcm9tIGEgbG9zdCBjb250ZXh0CisgICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xh
eWVyUmVuZGVyZXI7CisKKyAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24K
KyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOworICAgIGlm
ICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAgIGVsc2UK
KyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1f
bGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisKKworICAgIC8vIElmIGNy
ZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcs
IGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRo
ZSByZW5kZXJlciBhZ2Fpbi4KKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5h
Y2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKKyAgICAgICAg
ICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFj
aywgdGhpcywgY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVy
KCksIHRoaXMsIGNvbnRleHQpOworICAgIH0KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93
bmVyKCktPnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVy
cygpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKyAgICAvLyBJZiByZWNy
ZWF0aW5nIHJlbmRlcmVyLCB1cGRhdGUgdGhlIGxheWVycyB0byBwb2ludCBhdCB0aGUgbmV3IHJl
bmRlcmVyCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5yb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KGxheWVyUmVuZGVyZXIuZ2V0KCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgICpjb250ZXh0TG9zdCA9
IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRl
eHRMb3N0ID0gZmFsc2U7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgbV9sYXllclJl
bmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOworfQor
CisvLyBGSVhNRTogbW92ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5ZXJUcmVlSG9zdAordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKQoreworICAgIGlmIChtX3Jvb3RMYXll
ckltcGwgJiYgbV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0
ZUxheWVycygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0KGNv
bnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKK3sKKyAgICBib29sIGNoYW5nZWQgPSB2aWV3cG9y
dFNpemUgIT0gbV92aWV3cG9ydFNpemU7CisgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNp
emU7CisgICAgaWYgKGNoYW5nZWQpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRD
aGFuZ2VkKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRl
eCBjNDExY2NjNzM1NTRmMWRkMzJiY2NlMmUxNWU0OGRiZWNhYzRhODhlLi45N2I2NmJmN2MxNjU1
MTUyNmU2ZmQ5ZDFkNWQ4ZjRiMDZiMzIwMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCkBAIC0yNSwyMCArMjUsMjQgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1w
bF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogCi0jaW5jbHVkZSAiY2MvQ0NUaHJl
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKKyNpZiBVU0Uo
U0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OworY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW07CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKIAog
Ly8gUHJvdmlkZXMgc2NoZWR1bGluZyBpbmZyYXN0cnVjdHVyZSBmb3IgYSBDQ0xheWVyVHJlZUhv
c3RJbXBsCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50ICB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIHBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKSA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFk
KCkgPSAwOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCgpIHsgfQpAQCAtNDgsMzMgKzUyLDUyIEBAIHByb3RlY3RlZDoKIGNsYXNzIENDTGF5ZXJU
cmVlSG9zdEltcGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdElt
cGwpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRl
cmVyQ2hyb21pdW0+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsK
ICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
YmVnaW5Db21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKIAorICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CisKICAgICB2b2lkIGRyYXdMYXllcnMoKTsK
IAorICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAgICAgaW50IGZyYW1lTnVtYmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9mcmFtZU51bWJlcjsgfQogCi0gICAgdm9pZCBzZXROZWVkc1JlZHJh
dygpOwotICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICBib29sIGluaXRp
YWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7CisgICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgeyByZXR1cm4gbV9sYXllclJlbmRl
cmVyLmdldCgpOyB9CisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworCisgICAgdm9pZCBwcmVzZW50KCk7CisKKyAg
ICB2b2lkIHJlYWRiYWNrKHZvaWQqIHBpeGVscywgY29uc3QgSW50UmVjdCYpOworCisgICAgQ0NM
YXllckltcGwqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdExheWVySW1wbC5nZXQo
KTsgfQorICAgIHZvaWQgc2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKKwor
ICAgIHZvaWQgc2V0VmlzaWJsZShib29sKTsKIAogICAgIGludCBzb3VyY2VGcmFtZU51bWJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRnJhbWVOdW1iZXI7IH0KICAgICB2b2lkIHNldFNvdXJj
ZUZyYW1lTnVtYmVyKGludCBmcmFtZU51bWJlcikgeyBtX3NvdXJjZUZyYW1lTnVtYmVyID0gZnJh
bWVOdW1iZXI7IH0KIAorICAgIHZvaWQgdXBkYXRlTGF5ZXJzKCk7CisKKyAgICB2b2lkIHNldFZp
ZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSk7CisgICAgY29uc3QgSW50U2l6ZSYg
dmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KKwogcHJvdGVj
dGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCos
IFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPik7Ci0gICAgdm9pZCBkcmF3TGF5ZXJz
T25NYWluVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiwgYm9vbCogY29udGV4dExvc3QpOworICAg
IENDTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCosIGNvbnN0IEND
U2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQgbV9mcmFt
ZU51bWJlcjsKIAogcHJpdmF0ZToKICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2Ns
aWVudDsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJl
ckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0gICAgYm9vbCBtX3JlZHJhd1BlbmRpbmc7Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CisgICAgQ0NTZXR0aW5ncyBt
X3NldHRpbmdzOworICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiB9OwogCiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGE2NjkyODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2NjJlOTgu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKLQotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotdXNpbmcgbmFt
ZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotQ0NUaHJl
YWQqIGNjVGhyZWFkOwotaW50IG51bVByb3hpZXMgPSAwOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2xheWVyVHJl
ZUhvc3QobGF5ZXJUcmVlSG9zdCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG51bVByb3hpZXMrKzsKLSAgICBpZiAoIWNjVGhyZWFk
KQotICAgICAgICBjY1RocmVhZCA9IGxheWVyVHJlZUhvc3QtPmNsaWVudCgpLT5jcmVhdGVDb21w
b3NpdG9yVGhyZWFkKCkubGVha1B0cigpOwotfQotCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpzdGFydCgpCi17Ci0gICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgotICAg
IENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1w
bE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAg
Y29tcGxldGlvbi53YWl0KCk7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYm
ICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCi0KLSAg
ICBudW1Qcm94aWVzLS07Ci0gICAgaWYgKCFudW1Qcm94aWVzKSB7Ci0gICAgICAgIGRlbGV0ZSBj
Y1RocmVhZDsKLSAgICAgICAgY2NUaHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5
ZXJUcmVlSG9zdEltcGw7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAg
ICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRo
aXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Ci19
Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKLXsKLSAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGlt
cGwuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVhZC0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZj
b21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgQVNTRVJUKCFtX2xh
eWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KLSAgICBt
X2xheWVyVHJlZUhvc3QgPSAwOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRp
bWUpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIENDTWFpblRo
cmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOwotfQot
Ci0jaWZuZGVmIE5ERUJVRwotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRo
cmVhZCgpCi17Ci0gICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Ci19Ci0KLSNpZiBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBs
VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkLT50aHJl
YWRJRCgpOwotfQotI2Vsc2UKLW5hbWVzcGFjZSB7Ci1ib29sIGZha2VJbXBsVGhyZWFkID0gZmFs
c2U7Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQot
ewotICAgIHJldHVybiBmYWtlSW1wbFRocmVhZDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBmYWtlSW1wbFRocmVh
ZCA9IHZhbHVlOwotfQotI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLQotI2Vu
ZGlmIC8vICFOREVCVUcKLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RG
cmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1l
QW5kQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgfQotCi0gICAg
bV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RD
b21taXR0ZXIoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7Ci0KLSAgICAv
LyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1p
dAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
b21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5nZXQoKSks
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53
YWl0KCk7Ci0KLSAgICBjb21taXR0ZXIuY2xlYXIoKTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNv
bW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29t
cGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7
Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0
aGlzLCAwKTsKLSAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0LCBtX2xh
eWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7
Ci0KLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwotfQotCi12b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQotewotICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVy
cygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRB
bmRSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
LSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAg
bV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLX0KLQotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCi17
Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1f
bGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVk
cmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCi17Ci0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0g
bV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKLSAgICBjb21w
bGV0aW9uLT5zaWduYWwoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
KQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJl
ZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVh
ZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7Ci0gICAgY29tcGxldGlvbi0+
c2lnbmFsKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjA3ZTU2MTc2MmFjMWRkZjlk
ZDg3ODM3OGQ1NDYzNTZjNzg3YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0jZGVm
aW5lIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0KLSNpbmNsdWRlICJjYy9DQ0NvbXBsZXRp
b25FdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NMYXllclRy
ZWVIb3N0OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwotCi1jbGFzcyBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKLXB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQotICAgIGJvb2wg
aXNTdGFydGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7
Ci0gICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwotCi0gICAgdm9pZCBzdGFydCgpOyAvLyBNdXN0
IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgotICAgIHZvaWQgc3RvcCgpOyAvLyBN
dXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgotCi0gICAgLy8gQ0NMYXll
clRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1YWwgdm9p
ZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVl
c3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLQotI2lm
bmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc0ltcGxUaHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IC8vIEZha2UgdGhyZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29ycmVjdCB1
c2FnZS4KLSAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlmCi0jZW5k
aWYKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShD
Q0xheWVyVHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRyZWVIb3N0
KiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZhdGU6Ci0g
ICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQK
LSAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0ND
b21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7Ci0gICAg
dm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5Lgot
ICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJl
YWQgb25seS4KLSAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQotICAgIC8v
IFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcg
aW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+
IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFz
ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWlu
VGhyZWFkVGFzay5oCmluZGV4IGZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2MjgwZWFj
OGEuLjRjMzNiYWEwN2FkZDM1NzczOWRkYjUxNzYxZTg0N2I3NGU1MWMzMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTE1OCw2ICsxNTgsODggQEAgcHJpdmF0ZToKICAgICBQ
MyBtX3BhcmFtZXRlcjM7CiB9OwogCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitjbGFzcyBNYWluVGhyZWFk
VGFzazQgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgdHlwZWRlZiBNYWlu
VGhyZWFkVGFzazQ8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4gTWFpblRo
cmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKwor
ICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3Rh
bmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIs
IFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBh
cmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIz
LCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFu
Y2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShw
YXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAs
IG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0
ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAg
IHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3Bh
cmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIx
OworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9w
YXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVu
YW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1l
IE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1Q
NT4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNSA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgewor
cHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0
LCBNUDUpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAyLCBNUDIs
IFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBl
ZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7
CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5
cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAz
Pjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBh
c3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBt
ZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFt
ZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRo
b2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFt
ZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s1KFQqIGluc3Rh
bmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIs
IFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUp
CisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0
aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1l
dGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAgLCBtX3Bh
cmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBl
cmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkp
LiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9w
YXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2Qg
bV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAg
ICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1fcGFyYW1l
dGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDTWFpblRocmVh
ZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVlLApAQCAt
MjE1LDYgKzI5Nyw0NiBAQCBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFp
blRocmVhZFRhc2soCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0
ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMs
IHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFz
az4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQg
KFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCksCisgICAgY29uc3QgUDEmIHBhcmFtZXRl
cjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMs
CisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQpCit7CisgICAgcmV0dXJuIE1haW5UaHJlYWRUYXNr
NDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUs
IE1QND46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAg
IENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENv
cGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0
Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUg
UDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUs
IHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWlu
VGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCko
TVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAg
IGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNv
bnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQoreworICAgIHJl
dHVybiBNYWluVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpU
eXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6
VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46
OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmIC8vIENDTWFpblRocmVhZFRhc2tfaAorI2VuZGlmIC8vIE1haW5UaHJlYWRUYXNrX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCA2M2VkY2YwZDY3YTY4NGY1ZGJl
MGExMmQ1ZDlkMjYyYTBiMTRhYzIzLi5hOWY0NTBlZDQ4MjQ1ZDgxYjBjNDMwNzJjYTM5MzcxMmQw
ZGQzNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0zMSw3ICsz
MSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNyArNDgsNyBAQCBDQ1BsdWdpbkxh
eWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6
ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhy
ZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0q
IHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOwogICAgIEFT
U0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MjU5YmE0NjgzMjBmNDU1ZjM0Mjg3M2U1YTgwODk5NTMxZTRiZWNlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQcm94eS5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorCisjaW5jbHVkZSAiVHJhY2VF
dmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0ND
TWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitib29sIENDUHJveHk6OmlzTWFpblRocmVhZCgp
Cit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9CisKK25hbWVzcGFjZSB7Citib29s
IGZha2VJbXBsVGhyZWFkID0gZmFsc2U7CitzdGF0aWMgV1RGOjpUaHJlYWRJZGVudGlmaWVyIGlt
cGxUaHJlYWRJRDsKK30KKworYm9vbCBDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKQoreworICAgIHJl
dHVybiBmYWtlSW1wbFRocmVhZCB8fCBjdXJyZW50VGhyZWFkKCkgPT0gaW1wbFRocmVhZElEOwor
fQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkKK3sKKyAgICBmYWtl
SW1wbFRocmVhZCA9IHZhbHVlOworfQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoV1RG
OjpUaHJlYWRJZGVudGlmaWVyIGlkKQoreworICAgIGltcGxUaHJlYWRJRCA9IGlkOworfQorCisj
ZW5kaWYgLy8gIU5ERUJVRworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1OGZiYThhYTVh
YTg4MTljMzJlMGI0NWI5OTgwMGVkMzAwY2I0ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtMCwwICsx
LDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Byb3h5X2gKKyNkZWZpbmUgQ0NQcm94
eV9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShTS0lBKQorY2xhc3MgR3JD
b250ZXh0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
c3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBUZXh0dXJlTWFuYWdlcjsK
KworLy8gQWJzdHJhY3QgY2xhc3MgcmVzcG9uc2libGUgZm9yIHByb3h5aW5nIGNvbW1hbmRzIGZy
b20gdGhlIG1haW4tdGhyZWFkIHNpZGUgb2YKKy8vIHRoZSBjb21wb3NpdG9yIG92ZXIgdG8gdGhl
IGNvbXBvc2l0b3IgaW1wbGVtZW50YXRpb24uCitjbGFzcyBDQ1Byb3h5IHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ1Byb3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ1Byb3h5KCkg
eyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JikgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRl
cmluZygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdCA9IDA7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0
KiBvd25lckhhY2spID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TmVlZHNSZWRyYXcoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZShi
b29sKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2Fs
bGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7
IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBE
ZWJ1ZyBob29rcworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQo
KTsKKyAgICBzdGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgLy8gVGVz
dGluZyBob29rcworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKSA9IDA7
CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2Rl
IHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5n
LiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0
KiBza2lhQ29udGV4dCgpID0gMDsKKyNlbmRpZgorCisgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hp
bGUgcmVuZGVyX3dpZGdldCBzdGlsbCBkb2VzIHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9z
dE1haW5UaHJlYWRJCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0g
MDsKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVm
ZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFu
YWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIEND
UHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllcik7CisjZW5kaWYKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjlkNGI3YWZmMjM5NzUxMDJjNWZmNDVjMDA0MDczZGU2MDJkNDY4YmUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2lu
Y2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgor
ICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAg
IENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNjb3Bl
ZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6
OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCisgICAgfQorfTsKKworUGFzc093blB0cjxD
Q1Byb3h5PiBDQ1NpbmdsZVRocmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaW5nbGVUaHJlYWRQcm94
eShsYXllclRyZWVIb3N0KSk7Cit9CisKK0NDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhy
ZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQorICAgIDogbV9sYXllclRy
ZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAg
LCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQoZmFsc2UpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6c3RhcnQoKQoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVy
VHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0
aGlzKTsKK30KKworQ0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5Ojp+Q0NTaW5nbGVUaHJlYWRQ
cm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUg
c3RvcCgpIGdvdCBjYWxsZWQuCit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9z
aXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwor
ICAgIGlmICghZG9Db21wb3NpdGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+cmVhZGJhY2socGl4ZWxzLCByZWN0KTsKKworICAgIGlmIChtX2xh
eWVyVHJlZUhvc3RJbXBsLT5pc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbnRleHQoKTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5k
ZXJpbmcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgU2NvcGVkU2V0SW1w
bFRocmVhZCBpbXBsOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmlu
ZygpOworfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbDsKK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RD
b250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworCisgICAgeworICAgICAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplTGF5ZXJSZW5kZXJlcihvd25lckhhY2ssIGNvbnRleHQpOworICAgIH0KK30KKwor
Y29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NTaW5nbGVUaHJlYWRQcm94eTo6bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0
b3JDb250ZXh0KCkKK3sKKyAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwor
fQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkK
K3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRl
KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQorewor
ICAgIC8vIEZJWE1FOiBPbmNlIHdlIG1vdmUgcmVuZGVyX3dpZGdldCBzY2hlZHVsaW5nIGludG8g
dGhpcyBjbGFzcywgd2UgY2FuCisgICAgLy8gdHJlYXQgcmVkcmF3IHJlcXVlc3RzIG1vcmUgZWZm
aWNpZW50bHkgdGhhbiBjb21taXRBbmRSZWRyYXcgcmVxdWVzdHMuCisgICAgc2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXRWaXNpYmxl
KGJvb2wgdmlzaWJsZSkKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+c2V0VmlzaWJsZSh2aXNpYmxlKTsKK30KKwordm9pZCBDQ1Npbmds
ZVRocmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6c3RvcCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
eworICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwuY2xlYXIoKTsKKyAgICB9CisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKwor
R3JDb250ZXh0KiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpza2lhQ29udGV4dCgpCit7CisgICAgcmV0
dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKS0+c2tpYUNvbnRleHQoKTsK
K30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uSW1wbFRocmVh
ZCgpCit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9jb21taXRQZW5k
aW5nKQorICAgICAgICByZXR1cm47CisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOworfQorCitUZXh0dXJlTWFuYWdlciogQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVu
dHNUZXh0dXJlTWFuYWdlcigpCit7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxh
eWVyUmVuZGVyZXIoKS0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOworfQorCisvLyBDYWxsZWQg
YnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBk
b2VzIHRoZSBzY2hlZHVsaW5nKQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJ
bW1lZGlhdGVseSgpCit7CisgICAgLy8gQ29tcG9zaXRlSWZOZWVkZWQgd2lsbCBub3Qgb2NjdXIg
aWYgIW1fY29tbWl0UGVuZGluZy4gU28sIHNldCB0aGUgYml0IHNvCisgICAgLy8gaXQgc3VjY2Vl
ZHMuIFRoaXMgaGFjayBjYW4gZ28gYXdheSBvbmNlIHRoZSBwcm94aWVzIGFzc3VtZSBmdWxsCisg
ICAgLy8gc2NoZWR1bGluZyByZXNwb25zaWJpbGl0eS4KKyAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOworCisgICAgY29tcG9zaXRlSWZOZWVkZWQoKTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykg
eworICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3Vy
cmVudFRpbWUoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZy
YW1lQmVnaW5UaW1lKTsKKworICAgICAgICAvLyBQcmVjb21taXQgaXMgYSB0ZW1wb3Jhcnkgc3Rl
cCB3ZSBuZWVkIHRvIHBlcmZvcm0gdG8gcHVzaCB0aGluZ3MgbGlrZQorICAgICAgICAvLyB0aGUg
dmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCisgICAgICAgIC8vIExh
eWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKSBpc24ndCBzcGxpdCBpbnRvIGhvc3QgYW5k
IGltcGwgcGFydHMuCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlQ29tbWl0KG1fbGF5ZXJUcmVl
SG9zdEltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlY29t
ZSBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpIG9uY2Ugd2Ugc3BsaXQgYXBhcnQKKyAg
ICAgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycy4KKyAgICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8gQ29tbWl0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIERyYXcKKyAgICAgICAgaWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgfQorfQorCitib29sIENDU2luZ2xl
VGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhp
Y3NDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgICAg
ICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgICAgICBib29sIG9rID0gIW1fbGF5
ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKDAsIGNvbnRleHQpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAg
ICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAg
ICB7CisgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXND
b250ZXh0TG9zdCgpKSB7CisgICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRl
eHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8g
ZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxs
IG9ubHkgYmUKKyAgICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRo
ZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKKyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRl
bXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAg
ICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1l
c3NhZ2UgbG9vcCBpdGVyYXRpb24KKyAgICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQg
eWV0IGFnYWluLgorICAgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7
CisgICAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MmEwNjNkMDkyM2Y3Mzg3
OTE3Y2E4NjYzN2Y3Nzk1YjFiZGUyOThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBA
IC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTaW5nbGVUaHJlYWRQcm94
eV9oCisjZGVmaW5lIENDU2luZ2xlVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21w
bGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CisKK2NsYXNzIENDU2luZ2xlVGhy
ZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSwgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVl
SG9zdCopOworICAgIHZpcnR1YWwgfkNDU2luZ2xlVGhyZWFkUHJveHkoKTsKKworICAgIC8vIEND
UHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250
ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKTsKKworICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gaW1w
bCB0aHJlYWQKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkltcGxUaHJlYWQoKTsK
KworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUg
dG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcu
IFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQq
IHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExh
eWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisg
ICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOworCisg
ICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4KKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7Cisg
ICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOworICAgIGJvb2wgZG9Db21wb3NpdGUoKTsKKwor
ICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0
KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNo
ZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgorICAg
IE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworCisgICAg
Ym9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgYm9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRl
eHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hN2VkYzBkNzcwNGI0YmQ0OWMwOGFiMDY3OTdjNzM4YTI1ZjQyMDUwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAKQEAgLTAsMCArMSwyOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
KyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9IDA7Cit9CisKK1Bh
c3NPd25QdHI8Q0NQcm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkUHJveHko
bGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkK
KyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkgewor
ICAgICAgICBjY1RocmVhZCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlQ29tcG9zaXRvclRocmVh
ZCgpLmxlYWtQdHIoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxU
aHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworI2VuZGlmCisgICAgfQorfQorCitDQ1RocmVh
ZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6On5DQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtlIHN1cmUgc3RvcCgp
IGdvdCBjYWxsZWQuCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAvLyBNYWtlIHN1cmUg
c3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94
aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOwor
ICAgIH0KK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lk
ICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NUaHJlYWRQ
cm94eTo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0
ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29s
IENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCog
b3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1f
bGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNP
bmVSZWYoKSk7CisKKyAgICAvLyBMZWFrIHRoZSBjb250ZXh0IHBvaW50ZXIgc28gd2UgY2FuIHRy
YW5zZmVyIG93bmVyc2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgorICAgIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0UHRyID0gY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpOworICAg
IEFTU0VSVChjb250ZXh0UHRyLT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBNYWtlIGEgYmxvY2tp
bmcgY2FsbCB0byBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQuIFRoZSByZXN1bHRz
IG9mIHRoYXQgY2FsbAorICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgaW5pdGlhbGl6ZVN1Y2Nl
ZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxlcy4KKyAgICBDQ0NvbXBsZXRpb25F
dmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRlZDsKKyAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjY1RocmVhZC0+cG9zdFRh
c2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5
ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG93bmVySGFjayksIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoY29udGV4dFB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNhcGFiaWxpdGllcykpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIGlmIChpbml0
aWFsaXplU3VjY2VlZGVkKQorICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWlu
VGhyZWFkQ29weSA9IGNhcGFiaWxpdGllczsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZVN1Y2NlZWRl
ZDsKK30KKworY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NUaHJlYWRQcm94eTo6
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5OworfQorCit2b2lkIENDVGhyZWFkUHJv
eHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsK
KyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhp
cywgJkNDVGhyZWFkUHJveHk6OnNldFZpc2libGVPbkNDVGhyZWFkLCB2aXNpYmxlKSk7Cit9CisK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIC8vIENyZWF0ZSBMYXllclRyZWVI
b3N0SW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFk
LT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRp
YWxpemVJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikp
KTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzdG9w
KCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVz
IHRoZSBpbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6bGF5
ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBs
ZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBBU1NFUlQoIW1fbGF5ZXJU
cmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgorICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IDA7Cit9CisKK0dyQ29udGV4dCogQ0NUaHJlYWRQcm94eTo6c2tpYUNvbnRl
eHQoKQoreworICAgIC8vIE5vdCBzdXBwb3J0ZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK1Rl
eHR1cmVNYW5hZ2VyKiBDQ1RocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkIiwgdGhp
cywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAvLyBGSVhNRTogY2FsbCBiZWdpbkZyYW1lQW5kQ29tbWl0IG9uIG1haW4gdGhy
ZWFkCit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdChkb3VibGUg
ZnJhbWVCZWdpblRpbWUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAo
IW1fbGF5ZXJUcmVlSG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkND
VGhyZWFkUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOworICAgIHsKKyAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRo
aXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOworICAgIH0KKworICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOworCisgICAg
Ly8gQmxvY2tpbmcgY2FsbCB0byBDQ1RocmVhZFByb3h5OjpwZXJmb3JtQ29tbWl0CisgICAgQ0ND
b21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgp
OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgeworICAgICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAg
ICB9CisgICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBs
LT5jb21taXRDb21wbGV0ZSgpOworICAgIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworfQor
Cit2b2lkIENDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFD
RV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBs
KQorICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7Cit9CisKK3ZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAg
ICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NF
UlQobV9sYXllclRyZWVIb3N0SW1wbCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhp
cywgMCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94
eTo6c2V0VmlzaWJsZU9uQ0NUaHJlYWQoYm9vbCB2aXNpYmxlKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOwor
ICAgIC8vIFRPRE86IHNob3VsZCB0aGlzIHBhc3MgdGhyb3VnaCB2aWEgdGhlIGNvbW1pdD8KKyAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXRWaXNpYmxlKHZpc2libGUpOworfQorCit2b2lkIEND
VGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCog
Y29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6
ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsK
KyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRy
ZWVIb3N0SW1wbCh0aGlzKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0KiBvd25lckhhY2ssIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyLCBDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQiLCB0aGlzLCAw
KTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dChhZG9wdFJlZihjb250ZXh0UHRyKSk7CisgICAgKmluaXRpYWxpemVTdWNj
ZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihvd25l
ckhhY2ssIGNvbnRleHQpOworICAgIGlmICgqaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAg
KmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFBy
b3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29t
cGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9z
dENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWdu
YWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwMDY3ZjI3
MjdjMWE3YzY5ZWZjMzVhNDI1MzdhMGI5ODM0MDEyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgK
QEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RocmVhZFByb3h5X2gK
KyNkZWZpbmUgQ0NUaHJlYWRQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVu
dC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9D
Q1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKKworY2xhc3MgQ0NUaHJlYWRQcm94eSA6IHB1Ymxp
YyBDQ1Byb3h5LCBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc093blB0cjxDQ1Byb3h5PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICB2
aXJ0dWFsIH5DQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0aW9u
CisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29u
c3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29s
IGlzU3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7
CisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2llbnQgLS0gY2FsbGVkIG9uIGltcGwgdGhyZWFkCisgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzUmVkcmF3T25JbXBsVGhyZWFkKCkgeyBzZXROZWVkc1JlZHJhd09uQ0NU
aHJlYWQoKTsgfQorCisgICAgLy8gSG9ycmlibGUgdWdseSBoYWNrIHRvIGFsbG93IG1haW4gdGhy
ZWFkZWQgY29kZSB0byBnZXQgdG8gdGhlIEdyQ29udGV4dAorICAgIC8vIGZvciBhY2NlbGVyYXRl
ZCBwYWludGluZy4gUmVtb3ZlIHRoaXMgQVNBUC4KKyNpZiBVU0UoU0tJQSkKKyAgICB2aXJ0dWFs
IEdyQ29udGV4dCogc2tpYUNvbnRleHQoKTsKKyNlbmRpZgorCisgICAgLy8gVGVtcG9yYXJ5IGhh
Y2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVyZXJD
aHJvbWl1bXMKKyAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJl
ZUhvc3QqKTsKKworICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKKyAgICB2b2lkIGJlZ2lu
RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKworICAgIC8vIENhbGxlZCBv
biBDQ1RocmVhZAorICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKTsKKyAg
ICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGRy
YXdMYXllcnNPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBpbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKKyAgICB2b2lkIGluaXRpYWxpemVMYXllclJlbmRlcmVyT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3QqLCBHcmFwaGljc0NvbnRleHQzRCosIENDQ29tcGxldGlv
bkV2ZW50KiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyopOworICAgIHZvaWQgc2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCk7Cisg
ICAgdm9pZCBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldFZpc2libGVP
bkNDVGhyZWFkKGJvb2wpOworICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4K
KyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisgICAgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhy
ZWFkQ29weTsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBt
YWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPEND
TGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFRhc2suaAppbmRleCA5MWM1OGU1ZDI1YjdiYjI4NmUyMTZjNGUwNjhj
YmUxMDk1NzhmMTgzLi5kOGRlNGFiMDM0Njk4ODc2OWZiZTI2NzRmZDMyMzYxMGM0NWQ3MjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFRhc2suaApAQCAtMTk4LDYgKzE5OCw0OCBAQCBwcml2YXRlOgogICAg
IFA0IG1fcGFyYW1ldGVyNDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBl
bmFtZSBNUDU+CitjbGFzcyBDQ1RocmVhZFRhc2s1IDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCwgTVA1KTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazU8VCwgUDEsIE1QMSwgUDIsIE1QMiwg
UDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNT4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUg
UGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6
UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1Ry
YWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1Ro
cmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBhc3NP
d25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIz
LCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFy
YW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRo
b2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBw
YXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAg
IDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQor
ICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVy
MihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJh
bWV0ZXI1KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQor
ICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKSht
X3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1f
cGFyYW1ldGVyNSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAg
ICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1l
dGVyMzsKKyAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgUDUgbV9wYXJhbWV0ZXI1OworfTsKKwog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUND
VGhyZWFkVGFzaygKICAgICBUKiBjb25zdCBjYWxsZWUsCkBAIC0yNzQsNiArMzE2LDI3IEBAIFBh
c3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKIAogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwg
dHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlw
ZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorUGFzc093blB0cjxDQ1RocmVh
ZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2
b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSksCisgICAgY29uc3QgUDEm
IHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBh
cmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQsCisgICAgY29uc3QgUDUmIHBhcmFt
ZXRlcjUpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6
VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAg
ICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRl
cjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIENDVGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwCmluZGV4IGJmMjNiZGVmZDlmM2Y1Y2I4MTE4NjQ4MGRmZjgxYzM3MjY5MTk5
ZTIuLjVmNWIyNTY0M2E4YmY4NGRjMGU2YTRmNTgxY2QwZGM2MzQ0MjEyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXll
ckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHAKaW5kZXggNGE1NWJjYTBhMzY3ZDcwZjM4NzRjNjA4M2Q1MzYzYjVjNjRkNmJmMS4u
OWZmMWZjY2M5NzE2YzEyNDJmZTM1ZmU2OTBhMmE4MDIxNjBkMmYwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgQ0NW
aWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QgaW5kZXgsIFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZUlkLCBjb25zCiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdygpCiB7Ci0gICAg
QVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFT
U0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICBpZiAobV9za2lwc0RyYXcpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMDQ2ZmIxM2M5Yjc4
ZjgwY2I5Y2ZhMmFjMWE2MDAwNTY3MjNmNTg3Yy4uNzVmNzNjMDEwMGRkNzQ4YmQxNmIwMDQwMTc1
MGE3ZDY1YmU5ZjRhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxMS0wOC0yNiAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBJbnRyb2R1Y2UgQ0NMYXllclRyZWVIb3N0SW1wbE1haW5UaHJlYWRQcm94eSBp
biBvcmRlciB0byBtb3ZlIExheWVyUmVuZGVyZXIgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4MDcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJWaWV3
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDgtMjcgIFBldGVyIEJldmVybG9vICA8
cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRlYWNoIHRoZSB1cGRhdGUgYW5kIGJ1aWxk
IHNjcmlwdHMgaG93IHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0NDhi
ZDE0NWU5YWJlYWU0Li5kZDIyMzk2NzgyYjM4NDdkMjY2ZTYzNGRiY2NhNDcyODViNWNhY2Q2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0yNTE3LDkg
KzI1MTcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGlj
c0xheWVyKiBsYXllcikKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5
ZXIpOwogCiAgICAgSW50UmVjdCBkYW1hZ2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6
ZS5oZWlnaHQpOwotICAgIGlmIChtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKLSAg
ICAgICAgaW52YWxpZGF0ZVJvb3RMYXllclJlY3QoZGFtYWdlZFJlY3QpOwotICAgIGVsc2UKKyAg
ICBpZiAoIW1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVu
dC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQogCkBAIC0yNjEwLDYgKzI2MDgs
MTEgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KGJvb2wgYWN0aXZlKQogICAgICAgICBXZWJDb3JlOjpDQ1NldHRpbmdzIGNjU2V0dGluZ3M7CiAg
ICAgICAgIGNjU2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gcGFnZSgpLT5zZXR0aW5ncygp
LT5hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCk7CiAgICAgICAgIGNjU2V0dGluZ3MuY29tcG9z
aXRlT2Zmc2NyZWVuID0gc2V0dGluZ3MoKS0+Y29tcG9zaXRlVG9UZXh0dXJlRW5hYmxlZCgpOwor
I2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICAgICAgY2NTZXR0aW5ncy5lbmFibGVD
b21wb3NpdG9yVGhyZWFkID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgIGNjU2V0dGluZ3MuZW5hYmxl
Q29tcG9zaXRvclRocmVhZCA9IGZhbHNlOworI2VuZGlmCiAgICAgICAgIGNjU2V0dGluZ3Muc2hv
d0ZQU0NvdW50ZXIgPSBzZXR0aW5ncygpLT5zaG93RlBTQ291bnRlcigpOwogICAgICAgICBjY1Nl
dHRpbmdzLnNob3dQbGF0Zm9ybUxheWVyVHJlZSA9IHNldHRpbmdzKCktPnNob3dQbGF0Zm9ybUxh
eWVyVHJlZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVh
ZFRhc2tUZXN0LmNwcAppbmRleCAxYzVmODc3MjUyNjZiMDg4ZjY4NjY3NDZjOGQzYTFmOTYzYjU3
N2MyLi5kOTk0M2U3MTNhMjBhNGQ3YjA5MDQxYTRlY2NmNzdkOTBiMzNiMzZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKQEAgLTQx
LDYgKzQxLDcgQEAgcHVibGljOgogICAgIE1PQ0tfTUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBh
MSwgaW50IGEyKSk7CiAgICAgTU9DS19NRVRIT0QzKG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQg
YTIsIGludCBhMykpOwogICAgIE1PQ0tfTUVUSE9ENChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50
IGEyLCBpbnQgYTMsIGludCBhNCkpOworICAgIE1PQ0tfTUVUSE9ENShtZXRob2Q1LCB2b2lkKGlu
dCBhMSwgaW50IGEyLCBpbnQgYTMsIGludCBhNCwgaW50IGE1KSk7CiB9OwogCiBURVNUKENDVGhy
ZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKQEAgLTUxLDEyICs1MiwxNCBAQCBURVNUKEND
VGhyZWFkVGFza1Rlc3QsIHJ1bm5hYmxlTWV0aG9kcykKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBt
ZXRob2QyKDksIDgpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QzKDks
IDgsIDcpKS5UaW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q0KDksIDgsIDcs
IDYpKS5UaW1lcygxKTsKKyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q1KDksIDgsIDcsIDYs
IDUpKS5UaW1lcygxKTsKIAogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1l
dGhvZDApLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1v
Y2s6Om1ldGhvZDEsIDkpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygm
bW9jaywgJk1vY2s6Om1ldGhvZDIsIDksIDgpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUND
VGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5wZXJmb3JtVGFzaygp
OwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQsIDksIDgsIDcs
IDYpLT5wZXJmb3JtVGFzaygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6
Om1ldGhvZDUsIDksIDgsIDcsIDYsIDUpLT5wZXJmb3JtVGFzaygpOwogfQogCiB9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105524</attachid>
            <date>2011-08-29 14:48:08 -0700</date>
            <delta_ts>2011-08-29 15:55:25 -0700</delta_ts>
            <desc>Remove CCLayerTreeHostImplClient as it was unused. Pass visibility via commit. Fix compile with THREADED_COMPOSITING. Nit fixes.</desc>
            <filename>bug-66807-20110829144807.patch</filename>
            <type>text/plain</type>
            <size>120022</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMmFkMDIwMGZjNGY1ZWJj
NDA0MTJkNmM5MTgzOTg4NjZhM2E0ZGJjLi5hOGIyZjFmNWE1NzJlZDJlNzQyOWU0ZTU2ZGYwNWJl
YmU0MjI0ODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY2IEBACisyMDExLTA4LTI2ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5
ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb250ZXh0TG9zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnJvb3RMYXllckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0U3VwcG9ydHNNYXBTdWIpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydFNpemUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0
dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21w
b3NpdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkND
U2V0dGluZ3M6OkNDU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllczo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVz
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWFpblRocmVhZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
NDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVh
ZFRhc2s0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVNYWluVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5M
YXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFNldEltcGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94
eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpza2lhQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1Jl
ZHJhd09uSW1wbFRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhy
ZWFkUHJveHk6OmNvbXBvc2l0ZUltbWVkaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmlzU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0
YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXRWaXNpYmxlT25DQ1RocmVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXJPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
aC4KKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25JbXBs
VGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkVGFzazU6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFRhc2s1OjpDQ1RocmVhZFRhc2s1KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkVGFzazU6OnBlcmZvcm1UYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUNDVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1ZpZGVv
TGF5ZXJJbXBsOjpkcmF3KToKKwogMjAxMS0wOC0yOSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IDxidXR0b24gaGlkZGVu
Pi4uPC9idXR0b24+IGhhcyBhIGRpZmZlcmVudCBjb21wdXRlZCAiZGlzcGxheSIgdmFsdWUgdGhh
biAibm9uZSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjMDZjZTRiNjMyZWI1MmUyZWI2MTQ1MzFiYjZm
YjhmNTAzNjc4NjUwLi5jZGNmNTllZTk3MTRlNjJjOTIxOTVjZWJiZWRmMjk5YmE5NWFmOTQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNTM1LDIwICszNTM1LDIyIEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2su
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVu
dExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU5YzJjY2ExZDkyY2QzYWVmNjNhNDcwMWUwNWJkMWZi
YWFjYjg0ZTcuLmRiNWUwMzQ2ZjZiNzUyY2ZjY2I1YjRlNGM2OTUzZTViN2Q0OTBiMjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRM
YXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEyMCwxNiArMTIwLDE4IEBAIGJv
b2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgQ29u
dGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVl
SG9zdCogaG9zdCkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShT
S0lBKQorICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lhQ29udGV4dCgpIHdpbGwgY3Jhc2ggaWYg
Y2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCisgICAgLy8gbW9kZS4gVGhpcyB0aHVzIGRlcGVuZHMg
b24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1cm5pbmcgb2ZmCisgICAgLy8gYWNjZWxl
cmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9tIGNyYXNoaW5nLgogICAgIGlmIChob3N0
LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAgICAgICBtX3RleHR1cmVVcGRh
dGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBh
aW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpKTsKKyAgICAgICAgR3JDb250ZXh0KiBjb250ZXh0ID0gY29uc3RfY2FzdDxDQ0xheWVyVHJl
ZUhvc3QqPihob3N0KS0+c2tpYUNvbnRleHQoKTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9
IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVy
OjpjcmVhdGUobV9vd25lciksIGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmIC8vIFNLSUEKLSNlbmRpZiAvLyAhVEhSRUFERURfQ09NUE9TSVRJTkcKIAotICAgIG1fdGV4
dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExh
eWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIo
KSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxh
eWVyQ2hyb21pdW0uY3BwCmluZGV4IDIzYzg1NTVmNTBiZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQy
Y2M1YmMuLjcxYmMwYjZiOWRiNjU2YmM0NjBmNGY4NTY1NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VM
YXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIEltYWdlTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQog
ewotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0
ZShob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9
IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggOTU2M2VhYTU3ZjU2NzNjODU5OWQ0ZGJhYWM4OGI5MmQ5YzQ5NDM0OC4uZWVlYWJiMjEwYWEx
YjMyNTg5YzY3MWI4YzM3MTExNDQ5MmIwMzMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTk2LDYgKzk2LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7
CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShyZW5kZXJlcik7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisg
ICAgICAgIG1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsK
KyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zZXRMYXll
clJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIHNldExheWVyUmVuZGVyZXIocmVu
ZGVyZXIpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKIHsKICAgICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBs
YXllciByZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFjM2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNj
ODUuLmZlMmU0YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RM
YXllcihib29sIGlzUm9vdExheWVyKSB7IG1faXNSb290TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQog
ICAgIGJvb2wgaXNSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUm9vdExheWVyOyB9CiAK
KyAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJSZW5kZXJlckNocm9taXVt
Kik7CisKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYg
dGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAgICAgLy8gaW4gdGhlIExheWVyUmVuZGVy
ZXJDaHJvbWl1bS4KICAgICAvLyBGSVhNRSwgcmVwbGFjZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDcwYTA1ZGNhMDkwMTBh
NmNiNTlmY2Y1YjFkYWUzMTAyZDhmNmRkZmQuLjBiMmNmMzczNTc4YmQ3MTkxMTY3OGNhZDlkZDcw
NGRjYjc0ZjI4ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNp
bmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJm
YWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVy
ZU1hbmFnZXIuaCIKQEAgLTQ0OSwxMyArNDUwLDEzIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNj
ZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIH0KICNlbmRpZgog
Ci1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRl
eHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJh
dGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhjb250ZXh0
LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hy
b21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKG93bmVy
LCBvd25lckltcGwsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5pbml0aWFs
aXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00NjMsOCArNDY0LDEwIEBAIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShD
Q0xheWVyVHJlZUhvc3QqCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJl
ckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1f
b3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAg
ICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQp
CkBAIC00ODMsMTQgKzQ4NiwxOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlh
bGl6ZSgpCiAgICAgICAgIC8vIExpbWl0IHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1
cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCiAgICAgICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAqIDEwMjQgKiAxMDI0OwogICAgICAgICBt
X3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQs
IG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdBY2Nl
bGVyYXRlZFBhaW50aW5nID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAg
IG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9N
SVVNX21hcF9zdWIiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpCisgICAgbV9j
YXBhYmlsaXRpZXMudXNpbmdNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01J
VU1fbWFwX3N1YiIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YikKICAgICAg
ICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogCisg
ICAgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUgPSBtYXhUZXh0dXJlU2l6ZSgpOworICAg
IG1fY2FwYWJpbGl0aWVzLmJlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRl
eHR1cmVGb3JtYXQobV9jb250ZXh0LmdldCgpKTsKKwogICAgIGlmICghaW5pdGlhbGl6ZVNoYXJl
ZE9iamVjdHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MTQsMTEgKzUyMSwxMCBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXll
ckltcGxSZWN1cnNpdmUoQ0NMYXllckltcAogICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2Uo
KTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFyUm9vdENDTGF5ZXJJbXBs
KCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSgpCiB7Ci0gICAgaWYgKG1fcm9v
dENDTGF5ZXJJbXBsKQotICAgICAgICBjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJl
Y3Vyc2l2ZShtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSk7Ci0gICAgbV9yb290Q0NMYXllckltcGwu
Y2xlYXIoKTsKKyAgICBpZiAocm9vdExheWVySW1wbCgpKQorICAgICAgICBjbGVhclJlbmRlclN1
cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShyb290TGF5ZXJJbXBsKCkpOwogfQogCiBHcmFw
aGljc0NvbnRleHQzRCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb250ZXh0KCkKQEAgLTU1OSw2
ICs1NjUsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFuZ2VkKCkK
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCiB7CisgICAgaWYg
KCFyb290TGF5ZXJJbXBsKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGlmIChtX293bmVyLT52
aWV3cG9ydFNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTY3LDEzICs1
NzYsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKICAgICAv
LyBSZW5kZXJXaWRnZXQuCiAgICAgbV9oZWFkc1VwRGlzcGxheS0+b25GcmFtZUJlZ2luKGN1cnJl
bnRUaW1lKCkpOwogCi0gICAgLy8gUmVjaGVjayB0aGF0IHdlIHN0aWxsIGhhdmUgYSByb290IGxh
eWVyLiBUaGlzIG1heSBiZWNvbWUgbnVsbCBpZgotICAgIC8vIGNvbXBvc2l0aW5nIGdldHMgdHVy
bmVkIG9mZiBkdXJpbmcgYSBwYWludCBvcGVyYXRpb24uCi0gICAgaWYgKCFyb290TGF5ZXIoKSkg
ewotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCiAgICAgdXBkYXRlTGF5ZXJzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCkpOwog
fQogCkBAIC01ODIsMTIgKzU4NCw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzKCkKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICB7
Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnN5bmNocm9uaXpl
VHJlZXMiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIG1f
cm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICB9Ci0KLQogICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKHRleHR1cmVNZW1vcnlIaWdoTGltaXRC
eXRlcyAtIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9yeVVzZUJ5dGVzKCkp
OwogICAgIGRyYXdMYXllcnNJbnRlcm5hbCgpOwogCkBAIC03MzIsNyArNzI4LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnNJbnRlcm5hbCgpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMi
LCB0aGlzLCAwKTsKLSAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IG1fcm9vdENDTGF5
ZXJJbXBsLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gcm9vdExheWVy
SW1wbCgpOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCiAgICAgaWYgKCFyb290RHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCkBAIC04NDAsMjAgKzgzNiw2IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpwcmVzZW50KCkKICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vblByZXNlbnQo
KTsKIH0KIAotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXJSZWN1
cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIpCi17Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgIHNldExheWVy
UmVuZGVyZXJSZWN1cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCkpOwotCi0gICAgaWYgKGxheWVyLT5t
YXNrTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShsYXllci0+bWFz
a0xheWVyKCkpOwotICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpCi0gICAgICAgIHNldExh
eWVyUmVuZGVyZXJSZWN1cnNpdmUobGF5ZXItPnJlcGxpY2FMYXllcigpKTsKLQotICAgIGxheWVy
LT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotfQotCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Z2V0RnJhbWVidWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogewogICAgIEFTU0VSVChyZWN0Lm1heFgoKSA8PSB2aWV3cG9ydFdpZHRoKCkgJiYgcmVjdC5t
YXhZKCkgPD0gdmlld3BvcnRIZWlnaHQoKSk7CkBAIC05NDgsNyArOTMwLDcgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIpCiAKIE1hbmFnZWRUZXh0dXJlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmdldE9m
ZnNjcmVlbkxheWVyVGV4dHVyZSgpCiB7Ci0gICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRl
T2Zmc2NyZWVuICYmIG1fcm9vdENDTGF5ZXJJbXBsID8gbV9yb290Q0NMYXllckltcGwtPnJlbmRl
clN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOworICAgIHJldHVybiBzZXR0aW5ncygp
LmNvbXBvc2l0ZU9mZnNjcmVlbiAmJiByb290TGF5ZXJJbXBsKCkgPyByb290TGF5ZXJJbXBsKCkt
PnJlbmRlclN1cmZhY2UoKS0+Y29udGVudHNUZXh0dXJlKCkgOiAwOwogfQogCiB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y29weU9mZnNjcmVlblRleHR1cmVUb0Rpc3BsYXkoKQpAQCAtMTI5
OSw3ICsxMjgxLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmR1bXBSZW5kZXJTdXJm
YWNlcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCwgY29uc3QKICAgICAgICAgZHVtcFJlbmRl
clN1cmZhY2VzKHRzLCBpbmRlbnQsIGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpKTsKIH0KIAot
Ym9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkKK2Jv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0NvbnRleHRMb3N0KCkKIHsKICAgICByZXR1cm4g
KG1fY29udGV4dC5nZXQoKS0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVz
QVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmgKaW5kZXggMmQ4MDQwM2RkNTI2YmNlZWM4NGIzZTljYTRjODA5MjYx
YWMxNzVmZC4uYzJjNzJiZGUxYjMxMjJmMTRmZWRkZTU0YTc5MjYxMjYzMDBmMjQ3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRl
ICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
I2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1BsdWdpbkxheWVySW1wbC5oIgogI2luY2x1ZGUg
ImNjL0NDVmlkZW9MYXllckltcGwuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNjMs
NyArNjQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDSGVhZHNVcERpc3BsYXk7
CiBjbGFzcyBDQ0xheWVySW1wbDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKK2Ns
YXNzIENDTGF5ZXJUcmVlSG9zdDsgLy8gVE9ETzogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMKIGNs
YXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKQEAgLTcyLDExICs3MywxNSBAQCBjbGFzcyBOb25Db21wb3NpdGVk
Q29udGVudEhvc3Q7CiAvLyBDbGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVk
IHJlbmRlciBsYXllcnMgdXNpbmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gOiBw
dWJsaWMgUmVmQ291bnRlZDxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgQ0NM
YXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKworICAg
IC8vIE11c3QgYmUgY2FsbGVkIGluIG9yZGVyIHRvIGFsbG93IHRoZSBMYXllclJlbmRlcmVyQ2hy
b21pdW0gdG8gZGVzdHJ1Y3QKKyAgICB2b2lkIGNsb3NlKCk7CiAKICAgICB2aXJ0dWFsIH5MYXll
clJlbmRlcmVyQ2hyb21pdW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lci0+c2V0dGluZ3MoKTsgfQorICAgIGNvbnN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJp
bGl0aWVzOyB9CiAKICAgICBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgeyByZXR1cm4gbV9vd25l
cjsgfQogICAgIGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogb3duZXIoKSBjb25zdCB7IHJldHVybiBt
X293bmVyOyB9CkBAIC04NCwxNCArODksMTcgQEAgcHVibGljOgogICAgIEdyYXBoaWNzTGF5ZXIq
IHJvb3RMYXllcigpIHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAgICAgY29uc3Qg
R3JhcGhpY3NMYXllciogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lci0+cm9vdExh
eWVyKCk7IH0KIAorICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgeyByZXR1cm4gbV9v
d25lckltcGwtPnJvb3RMYXllcigpOyB9CisgICAgY29uc3QgQ0NMYXllckltcGwqIHJvb3RMYXll
ckltcGwoKSBjb25zdCB7IHJldHVybiBtX293bmVySW1wbC0+cm9vdExheWVyKCk7IH0KKwogICAg
IEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7Ci0gICAgYm9vbCBjb250ZXh0U3VwcG9ydHNN
YXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsgfQorICAgIGJv
b2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXMu
dXNpbmdNYXBTdWI7IH0KIAogI2lmIFVTRShTS0lBKQogICAgIEdyQ29udGV4dCogc2tpYUNvbnRl
eHQoKSB7IHJldHVybiBtX3NraWFDb250ZXh0LmdldCgpOyB9CiAjZW5kaWYKIAotICAgIGNvbnN0
IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXItPnZpZXdwb3J0U2l6ZSgp
OyB9CisgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgeyByZXR1cm4gbV9vd25lcklt
cGwtPnZpZXdwb3J0U2l6ZSgpOyB9CiAgICAgaW50IHZpZXdwb3J0V2lkdGgoKSB7IHJldHVybiB2
aWV3cG9ydFNpemUoKS53aWR0aCgpOyB9CiAgICAgaW50IHZpZXdwb3J0SGVpZ2h0KCkgeyByZXR1
cm4gdmlld3BvcnRTaXplKCkuaGVpZ2h0KCk7IH0KIApAQCAtMTQyLDI0ICsxNTAsMTcgQEAgcHVi
bGljOgogCiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0
dXJuIHRydWUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCi0gICAgYm9v
bCBpc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwog
CiAgICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZv
cm1hdCgpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5
ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVy
TGlzdDsKIAotICAgIHZvaWQgY2xlYXJSb290Q0NMYXllckltcGwoKTsKIHByaXZhdGU6Ci0gICAg
Ly8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdElt
cGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9v
dENDTGF5ZXJJbXBsOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9z
dCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQg
dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKQEAgLTE5Miw5ICsxOTMsMTMgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUo
Q0NMYXllckltcGwqKTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJl
ZUhvc3RJbXBsCisgICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhvc3QgZmllbGQKICAg
ICBDQ0xheWVyVHJlZUhvc3QqIG1fb3duZXI7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBt
X293bmVySW1wbDsKKworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRp
ZXM7CisKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKQEAgLTIzNCw4ICsyMzksNiBA
QCBwcml2YXRlOgogICAgIE93blB0cjxHckNvbnRleHQ+IG1fc2tpYUNvbnRleHQ7CiAjZW5kaWYK
IAotICAgIGJvb2wgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7Ci0KICAgICBDQ1JlbmRlclN1cmZh
Y2UqIG1fZGVmYXVsdFJlbmRlclN1cmZhY2U7CiAKICAgICBDQ0xheWVyU29ydGVyIG1fbGF5ZXJT
b3J0ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKaW5kZXggMjZj
ZThiNWQ5MTk3YmEzNjg2OTQyOWU2YjBjMWY0NmM0OGIwYWE1Ni4uYzZlYTdiYzFlYzNmZTg3OTll
ZjE5YTcxYTEzODBmNGIyZDQzYTAyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuaApAQCAtODAsNyArODAsNiBAQCBwcml2YXRlOgogICAgIExheWVyVGV4dHVyZVN1
YkltYWdlIG1fdGV4U3ViSW1hZ2U7CiB9OwogCi0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKICNpZiBVU0UoU0tJQSkKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUgOiBw
dWJsaWMgTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZSk7CkBAIC0xMTAsNyArMTA5LDYgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOyAvLyBHUFUgYWNjZWxlcmF0ZWQg
Y2FudmFzLgogfTsKICNlbmRpZiAvLyBTS0lBCi0jZW5kaWYgLy8gIVRIUkVBREVEX0NPTVBPU0lU
SU5HCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCAzZTEwMmVj
ODY1Njk1ZjgzYmI3MDgxZTNiZmY2MTkxYmJhZDllMmMzLi5hNzllYTEyYzRkNzRjMTkxZWM0ZDYw
N2ViZmQ0OGFkNWUzN2RmODNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTE0MSw3ICsxNDEsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiAKICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0
KTsKIAotICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7Cisg
ICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJl
c3RUZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0
ZXIoKS0+b3JpZW50YXRpb24oKTsKICAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVV
cGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGls
ZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHAKaW5kZXggNjUyZDI4ZGZiM2M2MjM2ZTcwM2MxOTNkNGVlNTc2ZTE2OTk4ZDFjZi4uMTZi
NTBiMTcyYzA2MmMyMmE5YjUxOWMzZTBkMGNlNzE4NzBmNzdhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgYm9vbCBWaWRlb0xheWVyQ2hyb21p
dW06OnJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLCBHQzNE
ZW4KICAgICBBU1NFUlQoZnJhbWUpOwogICAgIEFTU0VSVCh0ZXh0dXJlRm9ybWF0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKIAotICAgIGludCBtYXhUZXh0dXJlU2l6ZSA9
IG1fbGF5ZXJUcmVlSG9zdC0+bWF4VGV4dHVyZVNpemUoKTsKKyAgICBpbnQgbWF4VGV4dHVyZVNp
emUgPSBtX2xheWVyVHJlZUhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5tYXhUZXh0
dXJlU2l6ZTsKIAogICAgIGZvciAodW5zaWduZWQgcGxhbmUgPSAwOyBwbGFuZSA8IGZyYW1lLT5w
bGFuZXMoKTsgcGxhbmUrKykgewogICAgICAgICBJbnRTaXplIHJlcXVpcmVkVGV4dHVyZVNpemUg
PSBmcmFtZS0+cmVxdWlyZWRUZXh0dXJlU2l6ZShwbGFuZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZh
c0xheWVySW1wbC5jcHAKaW5kZXggYTg2NmExNzlhNzA5OTU1ZWRjZjU4YzgwZDcxMjk0ZWVhMDI1
OTI3NC4uMGU3NTcyNDg3NDZmZjZlMjRmMzFlZDA5MTdmZDdmZDQ4YTMwNDg4OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJj
Yy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTUwLDcgKzUwLDcgQEAgQ0NDYW52YXNMYXllckltcGw6On5DQ0NhbnZh
c0xheWVySW1wbCgpCiAKIHZvaWQgQ0NDYW52YXNMYXllckltcGw6OmRyYXcoKQogewotICAgIEFT
U0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NF
UlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkp
OwogICAgIGNvbnN0IENDQ2FudmFzTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlcigpLT5jYW52YXNMYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBw
cm9ncmFtLT5pbml0aWFsaXplZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmlu
ZGV4IDVkNmJjOWMzMjczNTI2NzllNTg2NGFjODJiZTViYmY0NGVlNTJlNmYuLmY1OWY0NWE5ZjQy
MzhjY2NhZjdhZmY4MGMxMDYyNWQwMzRiOWFmNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcApAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSAiTGF5ZXJQYWludGVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJOb25D
b21wb3NpdGVkQ29udGVudEhvc3QuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbG9yLmgiCiAjaW5j
bHVkZSAiVHJhY2VFdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5oIgorI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorI2lu
Y2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRQcm94eS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDI4ICs0OCwzMCBAQCBQYXNzUmVmUHRyPENDTGF5
ZXJUcmVlSG9zdD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiBjbGllbgogfQogCiBDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIGNsaWVudCwgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCi0gICAgOiBt
X3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQoZmFsc2UpCi0gICAgLCBtX21heFRleHR1cmVTaXpl
KDApCi0gICAgLCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YihmYWxzZSkKLSAgICAsIG1fYW5pbWF0
aW5nKGZhbHNlKQorICAgIDogbV9hbmltYXRpbmcoZmFsc2UpCiAgICAgLCBtX2NsaWVudChjbGll
bnQpCiAgICAgLCBtX2ZyYW1lTnVtYmVyKDApCiAgICAgLCBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdChOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OmNyZWF0ZShtX2NsaWVudC0+Y3JlYXRlUm9v
dExheWVyUGFpbnRlcigpKSkKICAgICAsIG1fc2V0dGluZ3Moc2V0dGluZ3MpCisgICAgLCBtX3Zp
c2libGUodHJ1ZSkKIHsKIH0KIAogYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQog
ewotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAo
IW1fbGF5ZXJSZW5kZXJlcikKKyAgICBpZiAobV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhy
ZWFkKSB7CisgICAgICAgIC8vIEFjY2VsZXJhdGVkIFBhaW50aW5nIGlzIG5vdCBzdXBwb3J0ZWQg
aW4gdGhyZWFkZWQgbW9kZS4gVHVybiBpdCBvZmYuCisgICAgICAgIG1fc2V0dGluZ3MuYWNjZWxl
cmF0ZVBhaW50aW5nID0gZmFsc2U7CisgICAgICAgIG1fcHJveHkgPSBDQ1RocmVhZFByb3h5Ojpj
cmVhdGUodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fcHJveHkgPSBDQ1NpbmdsZVRocmVh
ZFByb3h5OjpjcmVhdGUodGhpcyk7CisgICAgbV9wcm94eS0+c3RhcnQoKTsKKworICAgIGlmICgh
bV9wcm94eS0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIodGhpcykpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIC8vIEZJWE1FOiBJbiB0aGUgdGhyZWFkZWQgY2FzZSwgdGhlc2UgdmFsdWVz
IHdpbGwgbmVlZCB0byBiZSBpbml0aWFsaXplZAotICAgIC8vIGJ5IHNvbWV0aGluZyBvdGhlciB0
aGFuIG1fbGF5ZXJSZW5kZXJlci4KLSAgICBtX21heFRleHR1cmVTaXplID0gbV9sYXllclJlbmRl
cmVyLT5tYXhUZXh0dXJlU2l6ZSgpOwotICAgIG1fYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9y
bUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKSk7Ci0g
ICAgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHRTdXBw
b3J0c01hcFN1YigpOworICAgIC8vIFVwZGF0ZSBtX3NldHRpbmdzIGJhc2VkIG9uIGNhcGFiaWxp
dGllcyB0aGF0IHdlIGdvdCBiYWNrIGZyb20gdGhlIHJlbmRlcmVyLgorICAgIG1fc2V0dGluZ3Mu
YWNjZWxlcmF0ZVBhaW50aW5nID0gbV9wcm94eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nQWNjZWxlcmF0ZWRQYWludGluZzsKIAogICAgIG1fcm9vdExheWVyID0gR3JhcGhpY3NM
YXllcjo6Y3JlYXRlKDApOwogI2lmbmRlZiBOREVCVUcKQEAgLTc3LDEyICs4MSw4IEBAIGJvb2wg
Q0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIAogICAgIG1fcm9vdExheWVyLT5hZGRDaGls
ZChtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpKTsKIAotCi0jaWYg
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIG1fcHJveHkgPSBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OmNyZWF0ZSh0aGlzKTsKLSAgICBBU1NFUlQobV9wcm94eS0+aXNTdGFydGVkKCkp
OworICAgIC8vIFdlIGNoYW5nZWQgdGhlIHJvb3QgbGF5ZXIuIFRlbGwgdGhlIHByb3h5IGEgY29t
bWl0IGlzIG5lZWRlZC4KICAgICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwot
I2VuZGlmCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkwLDYyICs5MCw4MCBAQCBib29sIEND
TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiBDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJl
ZUhvc3QoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6On5DQ0xheWVyVHJl
ZUhvc3QiLCB0aGlzLCAwKTsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAgICAgbV9w
cm94eS0+c3RvcCgpOwogICAgIG1fcHJveHkuY2xlYXIoKTsKLSNlbmRpZgogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdDo6YmVnaW5Db21taXQoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1h
dGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIG1fYW5pbWF0aW5nID0g
dHJ1ZTsKKyAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Cisg
ICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnByZUNv
bW1pdChDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKIHsKKyAgICBob3N0SW1wbC0+c2V0
VmlzaWJsZShtX3Zpc2libGUpOworICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNp
emUoKSk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRDb21wbGV0ZSgpCit2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwp
CiB7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBUUkFDRV9FVkVO
VCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRoaXMsIDApOworICAgIGhvc3RJbXBsLT5z
ZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigpKTsKKworICAgIC8vIFN5bmNocm9uaXpl
IHRyZWVzLCBpZiBvbmUgZXhpc3RzIGF0IGFsbC4uLgorICAgIGlmIChyb290TGF5ZXIoKSkKKyAg
ICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIo
KSkpOworICAgIGVsc2UKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcigwKTsKKwogICAg
IG1fZnJhbWVOdW1iZXIrKzsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRM
YXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQorUGFzc093blB0cjxDQ1RocmVhZD4gQ0NMYXll
clRyZWVIb3N0OjpjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkKIHsKLSAgICBtX2FuaW1hdGluZyA9
IHRydWU7Ci0gICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwot
ICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVDb21w
b3NpdG9yVGhyZWFkKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKQorUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVI
b3N0Q29udGV4dDNEKCkKIHsKLSAgICAvLyBGSVhNRTogb25seSBjYWxsZWQgaW4gdGhyZWFkaW5n
IGNhc2UsIGZpeCB3aGVuIHBvc3NpYmxlLgotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogfQogCi1QYXNzT3du
UHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50KQorUGFzc093blB0cjxD
Q0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCkKIHsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcihtX2xh
eWVyUmVuZGVyZXIpOwotICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY2xp
ZW50LCByZW5kZXJlcik7CisgICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZSht
X3NldHRpbmdzKTsKIH0KIAotR3JhcGhpY3NDb250ZXh0M0QqIENDTGF5ZXJUcmVlSG9zdDo6Y29u
dGV4dCgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
Ym9vbCBzdWNjZXNzKQogewotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsK
KyAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoc3VjY2Vzcyk7CiB9CiAK
LXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKK3Zv
aWQgQ0NMYXllclRyZWVIb3N0OjpzY2hlZHVsZUNvbXBvc2l0ZSgpCiB7Ci0jaWYgVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzLgot
I2Vsc2UKLSAgICBjb21wb3NpdGUoZmFsc2UpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJh
bWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKKyAgICBtX2NsaWVudC0+c2NoZWR1bGVDb21w
b3NpdGUoKTsKK30KICNlbmRpZgorCisvLyBUZW1wb3JhcnkgaGFjayB1bnRpbCBXZWJWaWV3SW1w
bCBjb250ZXh0IGNyZWF0aW9uIGdldHMgc2ltcGxpZmllZAorR3JhcGhpY3NDb250ZXh0M0QqIEND
TGF5ZXJUcmVlSG9zdDo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX3NldHRpbmdzLmVuYWJs
ZUNvbXBvc2l0b3JUaHJlYWQpOworICAgIHJldHVybiBtX3Byb3h5LT5jb250ZXh0KCk7Cit9CisK
K2Jvb2wgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbXBvc2l0ZUFu
ZFJlYWRiYWNrKHBpeGVscywgcmVjdCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpmaW5p
c2hBbGxSZW5kZXJpbmcoKQogewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICAv
LyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgbV9sYXllclJlbmRl
cmVyLT5maW5pc2goKTsKLSNlbmRpZgorICAgIG1fcHJveHktPmZpbmlzaEFsbFJlbmRlcmluZygp
OwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29u
c3QgSW50UmVjdCYgZGlydHlSZWN0KQpAQCAtMTUzLDYgKzE3MSwxMSBAQCB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6aW52YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0
KQogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlUmVjdChkaXJ0eVJl
Y3QpOwogfQogCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhv
c3Q6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX3By
b3h5LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVI
b3N0OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCiB7CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQpAQCAtMTc3LDEzICsyMDAsMTcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFJv
b3RMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250
ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICBpZiAo
bGF5ZXIpIHsKKyAgICBpZiAobGF5ZXIpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LT5ncmFwaGljc0xheWVyKCktPmFkZENoaWxkKGxheWVyKTsKLSAgICAgICAgbGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcihtX2xheWVyUmVuZGVyZXIuZ2V0KCkpOwot
ICAgIH0gZWxzZQotICAgICAgICBsYXllclJlbmRlcmVyKCktPmNsZWFyUm9vdENDTGF5ZXJJbXBs
KCk7Cit9CiAKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogQ0NMYXllclRyZWVIb3N0Ojpza2lh
Q29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fc2V0dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nKTsK
KyAgICByZXR1cm4gbV9wcm94eS0+c2tpYUNvbnRleHQoKTsKIH0KKyNlbmRpZgogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBj
b25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlv
bikKIHsKQEAgLTE5MywxMTQgKzIyMCwzMyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Vmll
d3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBJbnRTaXplJiBjbwogICAg
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3Np
dGlvbik7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+
c2V0U2l6ZShjb250ZW50c1NpemUpOwogCi0gICAgaWYgKHZpc2libGVSZWN0Q2hhbmdlZCkgewor
ICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpCiAgICAgICAgIG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LT5pbnZhbGlkYXRlRW50aXJlTGF5ZXIoKTsKLSAgICAgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikKLSAgICAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7Ci0g
ICAgfQogCiAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAogdm9pZCBDQ0xheWVy
VHJlZUhvc3Q6OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQogewotI2lmICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCi0gICAgaWYgKCF2aXNpYmxlKQotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnJlbGVhc2VUZXh0dXJlcygpOwotI2VuZGlmCisgICAgbV92aXNpYmxlID0gdmlzaWJsZTsKKyAg
ICBtX3Byb3h5LT5zZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogfQogCi1QYXNzUmVmUHRyPExh
eWVyUmVuZGVyZXJDaHJvbWl1bT4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclJlbmRlcmVy
KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQogewotICAg
IC8vIEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIDAsIGlu
IHRoYXQgY2FzZSBmYWxsIGJhY2sgdG8gc29mdHdhcmUuCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gbV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0Qo
KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gQWN0dWFs
bHkgY3JlYXRlIHRoZSByZW5kZXJlci4KLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVt
PiBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29u
dGV4dCk7Ci0KLSAgICAvLyBJZiBjcmVhdGlvbiBmYWlsZWQsIGFuZCB3ZSBoYWQgYXNrZWQgZm9y
IGFjY2VsZXJhdGVkIHBhaW50aW5nLCBkaXNhYmxlIGFjY2VsZXJhdGVkIHBhaW50aW5nCi0gICAg
Ly8gYW5kIHRyeSBjcmVhdGluZyB0aGUgcmVuZGVyZXIgYWdhaW4uCi0gICAgaWYgKG1fc2V0dGlu
Z3MuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fc2V0
dGluZ3MuYWNjZWxlcmF0ZVBhaW50aW5nID0gZmFsc2U7Ci0gICAgICAgIGxheWVyUmVuZGVyZXIg
PSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbGF5ZXJSZW5kZXJlcjsKKyAgICBtX3Byb3h5LT5sb3NlQ29tcG9zaXRvckNv
bnRleHQoKTsKIH0KIAogVGV4dHVyZU1hbmFnZXIqIENDTGF5ZXJUcmVlSG9zdDo6Y29udGVudHNU
ZXh0dXJlTWFuYWdlcigpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgY2xhc3Mgc2hvdWxk
IG93biB0aGUgY29udGVudHMgdGV4dHVyZSBtYW5hZ2VyCi0gICAgaWYgKCFtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGVudHNUZXh0dXJl
TWFuYWdlcigpOwogfQogCiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLXZvaWQgQ0NM
YXllclRyZWVIb3N0Ojpkb0NvbXBvc2l0ZSgpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9z
aXRlKGJvb2wpCiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVy
ZXIpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJl
bmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKLXsKLSAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdp
bGwgcmVxdWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAg
IC8vIGluIGNyZWF0aW5nIGEgbmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJl
cigpOwotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBv
c2l0b3IgY29udGV4dCBpcyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIt
PmlzQ29tcG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQot
ICAgICAgICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnByZXNlbnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0
b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250
ZXh0IHJpZ2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBk
aWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwg
b25seSBiZQotICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBt
ZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMg
aGVyZS4gSW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAg
IC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBs
b29wIGl0ZXJhdGlvbgotICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWlu
LgotICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3ND
b250ZXh0ID0gdHJ1ZTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5k
ZXJlcigpCi17Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJl
ciA9IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAg
ICAgICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJS
ZWN1cnNpdmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRl
cmVyID0gbGF5ZXJSZW5kZXJlcjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNz
Q29udGV4dCh0cnVlKTsKKyAgICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRo
cmVhZCk7CisgICAgc3RhdGljX2Nhc3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0
KCkpLT5jb21wb3NpdGVJbW1lZGlhdGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURf
Q09NUE9TSVRJTkcpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5
NGQ4MzY0MTQ4M2I0OWQ5M2M2OTBmYjFlYWJhZThjNi4uZWJiNjU3ZmE0ODcyNTE1NmYwOTk1NDM3
ZWRlYTVhNDA4MWI3NjRkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDE3
ICsyNywxOSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHku
aCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFz
cyBHckNvbnRleHQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xh
eWVyVHJlZUhvc3RJbXBsOwotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNz
IENDVGhyZWFkOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllckNocm9taXVt
OwpAQCAtNjUsMzUgKzY3LDY0IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRpbmdz
KCkKICAgICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAg
LCBjb21wb3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0
b3JUaHJlYWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAg
ICAgICAgICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBh
Y2NlbGVyYXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgYm9v
bCBlbmFibGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAg
Ym9vbCBzaG93UGxhdGZvcm1MYXllclRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlv
biBvbiBhbiBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVy
VHJlZUhvc3QKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkKKyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAg
ICAgICAsIHVzaW5nTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWlu
dGluZyhmYWxzZSkKKyAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0Rl
bnVtIGJlc3RUZXh0dXJlRm9ybWF0OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1
c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsKKwog
Y2xhc3MgQ0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0
PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVh
dGUoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1
YWwgfkNDTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFz
c093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIC8v
IENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1hdGVB
bmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lkIHByZUNvbW1pdChDQ0xh
eWVyVHJlZUhvc3RJbXBsKik7IC8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnVwZGF0ZUxheWVycyBpcyBzcGxpdCBhcGFydC4KKyAgICB2b2lkIGNvbW1pdFRvKEND
TGF5ZXJUcmVlSG9zdEltcGwqKTsKKyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21w
b3NpdG9yVGhyZWFkKCk7CisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0
SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICB2b2lkIGRpZFJlY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKKyAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIAorICAgIC8vIENDTGF5
ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gV2ViVmlldy4KICAgICBib29sIGFuaW1hdGluZygpIGNv
bnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBh
bmltYXRpbmcpIHsgbV9hbmltYXRpbmcgPSBhbmltYXRpbmc7IH0gLy8gQ2FuIGJlIHJlbW92ZWQg
d2hlbiBub24tdGhyZWFkZWQgc2NoZWR1bGluZyBtb3ZlcyBpbnNpZGUuCiAKICAgICBDQ0xheWVy
VHJlZUhvc3RDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKKyNpZiAhVVNF
KFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsK
KyNlbmRpZgorCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKIAotICAgIHZvaWQg
Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
Ly8gQ29tcG9zaXRlcyBhbmQgYXR0ZW1wdHMgdG8gcmVhZCBiYWNrIHRoZSByZXN1bHQgaW50byB0
aGUgcHJvdmlkZWQKKyAgICAvLyBidWZmZXIuIElmIGl0IHdhc24ndCBwb3NzaWJsZSwgZS5nLiBk
dWUgdG8gY29udGV4dCBsb3N0LCB3aWxsIHJldHVybgorICAgIC8vIGZhbHNlLgorICAgIGJvb2wg
Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAKICAg
ICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwogCkBAIC0xMDEsNiArMTMyLDkgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpOwogCisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworICAgIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0
KCk7CisKICAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiAgICAgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOwogCkBAIC0xMTAsNiArMTQ0LDEyIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9zZXR0aW5nczsgfQogCisg
ICAgLy8gSG9ycmlibGUgdWdseSBoYWNrIHRvIGFsbG93IG1haW4gdGhyZWFkZWQgY29kZSB0byBn
ZXQgdG8gdGhlIEdyQ29udGV4dAorICAgIC8vIGZvciBhY2NlbGVyYXRlZCBwYWludGluZy4gUmVt
b3ZlIHRoaXMgQVNBUC4KKyNpZiBVU0UoU0tJQSkKKyAgICBHckNvbnRleHQqIHNraWFDb250ZXh0
KCk7CisjZW5kaWYKKwogICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3Bv
cnRTaXplLCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUsIGNvbnN0IEludFBvaW50JiBzY3Jv
bGxQb3NpdGlvbik7CiAKICAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7
IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQpAQCAtMTE3LDIxICsxNTcsOCBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKLSAgICAvLyBUZW1wb3JhcnkgaG9tZSBmb3Ig
dGhlIG5vbi10aHJlYWRlZCByZW5kZXJpbmcgcGF0aC4KLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQotICAgIHZvaWQgY29tcG9zaXRlKGJvb2wgZmluaXNoKTsKLQotICAgIHZvaWQgbG9z
ZUNvbXBvc2l0b3JDb250ZXh0KCk7Ci0KLSAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KLSNlbmRp
ZgotCiAgICAgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KiBub25Db21wb3NpdGVkQ29udGVudEhv
c3QoKSBjb25zdCB7IHJldHVybiBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5nZXQoKTsgfQog
Ci0gICAgYm9vbCBjb250ZXh0U3VwcG9ydHNNYXBTdWIoKSBjb25zdCB7IHJldHVybiBtX2NvbnRl
eHRTdXBwb3J0c01hcFN1YjsgfQotICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KLSAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgp
IHsgcmV0dXJuIG1fYmVzdFRleHR1cmVGb3JtYXQ7IH0KLQogcHJvdGVjdGVkOgogICAgIENDTGF5
ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBjb25zdCBDQ1NldHRpbmdzJik7CiAK
QEAgLTE0MCwyNiArMTY3LDEzIEBAIHByaXZhdGU6CiAKICAgICBQYXNzUmVmUHRyPExheWVyUmVu
ZGVyZXJDaHJvbWl1bT4gY3JlYXRlTGF5ZXJSZW5kZXJlcigpOwogCi0gICAgLy8gVGVtcG9yYXJ5
IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShUSFJF
QURFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGRvQ29tcG9zaXRlKCk7Ci0gICAgdm9pZCByZWFs
bG9jYXRlUmVuZGVyZXIoKTsKLQotICAgIGJvb2wgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0
OwotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IG1fbGF5ZXJSZW5kZXJlcjsKLSNl
bmRpZgotCi0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGVudW0gbV9iZXN0VGV4
dHVyZUZvcm1hdDsKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAgYm9v
bCBtX2FuaW1hdGluZzsKIAogICAgIENDTGF5ZXJUcmVlSG9zdENsaWVudCogbV9jbGllbnQ7CiAK
ICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk+IG1fcHJveHk7CisgICAgT3duUHRyPENDUHJveHk+IG1fcHJveHk7CiAKICAgICBPd25Q
dHI8R3JhcGhpY3NMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgT3duUHRyPE5vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdD4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Q7CkBAIC0xNjcsNiArMTgxLDcg
QEAgcHJpdmF0ZToKICAgICBDQ1NldHRpbmdzIG1fc2V0dGluZ3M7CiAKICAgICBJbnRTaXplIG1f
dmlld3BvcnRTaXplOworICAgIGJvb2wgbV92aXNpYmxlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDcyZGQ3MTRiZTdlMzg0YzhlZjllMTA5MjRmZjVjZDIwNTg2OTliZWEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKLSAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgot
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVBhc3NPd25QdHI8Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyPiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI6OmNyZWF0ZSgpCi17
Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSk7Ci19
Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjb21taXQoQ0NMYXllclRyZWVIb3N0
KiBob3N0LCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBob3N0SW1wbCkKLXsKLSAgICBob3N0SW1wbC0+
c2V0U291cmNlRnJhbWVOdW1iZXIoaG9zdC0+ZnJhbWVOdW1iZXIoKSk7Ci19Ci0KLX0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGJjMzE4YTRhNzE0MjMyZDMxODRkMmZlZDRhZDgwOTUxNzU4M2NjOTkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVm
IENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcl9oCi0jZGVmaW5lIENDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlcl9oCi0KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJUcmVlSG9z
dDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7Ci0KLS8vIEZJWE1FOiBtZXJnZSBpbiBUcmVl
U3luY2hyb25pemVyIGNvZGUgaW50byBoZXJlCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcik7
Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
PiBjcmVhdGUoKTsKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIoKSB7IH0K
LQotICAgIHZpcnR1YWwgdm9pZCBjb21taXQoQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVI
b3N0SW1wbCopOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkg
eyB9Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAppbmRleCA0ZTJkMWI4NDNjMTgzMmNmYWZhMTQzNTQ4NjJjYmZhMTUzODY2OWFlLi5mZWE0
MzUzMmIxNDVmOGJmZDcyMTgzZmI1OWNhNzJlZmRkNGJjYWRhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAtMzgsMjQgKzM4LDIzIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogY2xpZW50LCBQYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIpCitQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncykKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdElt
cGwoY2xpZW50LCByZW5kZXJlcikpOworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRy
ZWVIb3N0SW1wbCggc2V0dGluZ3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXll
clRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6
OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBt
X3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQotICAgICwgbV9j
bGllbnQoY2xpZW50KQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXll
clJlbmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwg
bV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5
ZXJUcmVlSG9zdEltcGwoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBs
Ojp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKQEAgLTY0LDcxICs2MywxMDYgQEAgdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogewotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwot
ICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJh
d0xheWVycygpCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4
dCgpCiB7Ci0gICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMg
aXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNh
dXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBt
YWluIHRocmVhZC4KLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47Cisg
ICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpIDog
MDsKK30KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwot
ICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNl
OworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXIt
Pm93bmVyKCktPnJvb3RMYXllcigpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXll
cnMoKTsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6
OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2
ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFp
blRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVl
SG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAg
ICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVyOworfQogCi0gICAg
ICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVu
ZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+
ZmluaXNoKCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAg
ICAgICAgaWYgKGNvbnRleHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJD
aHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQor
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sKKyAgICBBU1NFUlQo
bV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5pc0NvbnRleHRM
b3N0KCk7Cit9CiAKLSAgICArK21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsK
IH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXNlbnQoKQogewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDAp
OworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAg
bV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhNRTogbW92ZSB0aGUg
cmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRl
IHRocm90dGxpbmcvYW5pbWF0aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVu
dFRpbWUoKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5yZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0
KQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCBy
ZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCit2
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBsYXllcikKIHsKLSAgICBpZiAobV9yZWRyYXdQZW5kaW5nIHx8IG1fY29tbWl0UGVuZGlu
ZykKLSAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOworfQogCi0g
ICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3IiwgdGhp
cywgMCk7Ci0gICAgbV9yZWRyYXdQZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+cG9zdERy
YXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRW
aXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyICYmICF2aXNp
YmxlKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0
aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRleHRMb3N0KQorYm9vbCBDQ0xheWVyVHJl
ZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIGltcGxI
YWNrLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gSWYgbV9sYXllclJlbmRlcmVyIGV4aXN0cywgdGhl
biB3ZSBhcmUgcmVjb3ZlcmluZyBmcm9tIGEgbG9zdCBjb250ZXh0CisgICAgYm9vbCByZWNyZWF0
aW5nUmVuZGVyZXIgPSBtX2xheWVyUmVuZGVyZXI7CisKKyAgICAvLyBGaXJzdCB0aW1lIGxheWVy
UmVuZGVyZXIgY3JlYXRpb24KKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXll
clJlbmRlcmVyOworICAgIGlmICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICBsYXllclJl
bmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNv
bnRleHQpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7
CisKKworICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNj
ZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBh
bmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KKyAgICBpZiAoIWxheWVyUmVuZGVy
ZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgbV9zZXR0aW5n
cy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXJlY3JlYXRpbmdS
ZW5kZXJlcikKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xh
eWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRleHQpOworICAgIH0KIAotICAgIGlmICht
X2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQo
KTsKKyAgICAvLyBJZiByZWNyZWF0aW5nIHJlbmRlcmVyLCB1cGRhdGUgdGhlIGxheWVycyB0byBw
b2ludCBhdCB0aGUgbmV3IHJlbmRlcmVyCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5zZXRMYXll
clJlbmRlcmVyUmVjdXJzaXZlKGxheWVyUmVuZGVyZXIuZ2V0KCkpOwogCi0gICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAg
ICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NS
ZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9IGVs
c2UKLSAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFs
KCk7CisgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKKyAgICByZXR1cm4gbV9s
YXllclJlbmRlcmVyOworfQorCisvLyBGSVhNRTogbW92ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5
ZXJUcmVlSG9zdAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKQorewor
ICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKK3sKKyAgICBib29s
IGNoYW5nZWQgPSB2aWV3cG9ydFNpemUgIT0gbV92aWV3cG9ydFNpemU7CisgICAgbV92aWV3cG9y
dFNpemUgPSB2aWV3cG9ydFNpemU7CisgICAgaWYgKGNoYW5nZWQpCisgICAgICAgIG1fbGF5ZXJS
ZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaAppbmRleCBjNDExY2NjNzM1NTRmMWRkMzJiY2NlMmUxNWU0OGRiZWNhYzRh
ODhlLi5kNjhiYjhkNjA3MzM5MGViZDA4NGU5MTRjYWIwMTkyNjFmYTkwNzg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0yNSw1NiArMjUsNjkgQEAKICNpZm5kZWYg
Q0NMYXllclRyZWVIb3N0SW1wbF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogCi0j
aW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OworY2xhc3MgQ0NMYXll
ckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07Ci0KLS8vIFByb3ZpZGVzIHNjaGVk
dWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAotY2xhc3MgQ0NM
YXllclRyZWVIb3N0SW1wbENsaWVudCAgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwb3N0
RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0
RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwotCi1w
cm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCgpIHsgfQot
fTsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOwogCiAvLyBDQ0xheWVyVHJlZUhv
c3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJl
bmRlcmluZyBzdGF0ZQogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxD
bGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShjb25zdCBDQ1NldHRpbmdzJik7
CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lk
IGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAKKyAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOworCiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7
CiAKKyAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgIGludCBmcmFtZU51bWJlcigp
IGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXcoKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgYm9vbCBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOworICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIHsgcmV0dXJuIG1fbGF5ZXJSZW5k
ZXJlci5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKworICAgIHZvaWQgcHJlc2VudCgpOworCisg
ICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKworICAgIEND
TGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CisK
KyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIo
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3Vy
Y2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZy
YW1lTnVtYmVyOyB9CiAKKyAgICB2b2lkIHVwZGF0ZUxheWVycygpOworCisgICAgdm9pZCBzZXRW
aWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpOworICAgIGNvbnN0IEludFNpemUm
IHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CisKIHByb3Rl
Y3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQq
LCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZHJhd0xheWVy
c09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGNvbnRleHRMb3N0KTsKKyAg
ICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICBp
bnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAogcHJpdmF0
ZToKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKLSAgICBib29sIG1f
Y29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVy
UmVuZGVyZXI7Ci0gICAgYm9vbCBtX3JlZHJhd1BlbmRpbmc7CisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBtX3Jvb3RMYXllckltcGw7CisgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOworICAgIElu
dFNpemUgbV92aWV3cG9ydFNpemU7CiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2
NjkyODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2NjJlOTguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKLQotI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRl
ICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCi0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgewotQ0NUaHJlYWQqIGNjVGhyZWFkOwotaW50
IG51bVByb3hpZXMgPSAwOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCi0gICAgOiBt
X2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9z
dCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OwotICAgIG51bVByb3hpZXMrKzsKLSAgICBpZiAoIWNjVGhyZWFkKQotICAgICAgICBjY1RocmVh
ZCA9IGxheWVyVHJlZUhvc3QtPmNsaWVudCgpLT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkubGVh
a1B0cigpOwotfQotCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCi17
Ci0gICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50
IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0
aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7
Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eSgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3Qp
OyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCi0KLSAgICBudW1Qcm94aWVzLS07Ci0g
ICAgaWYgKCFudW1Qcm94aWVzKSB7Ci0gICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKLSAgICAgICAg
Y2NUaHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OmlzU3RhcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19
Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5k
aW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fY29t
bWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJl
ZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNl
dE5lZWRzUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhy
ZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCi0gICAgQ0NDb21wbGV0
aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJl
YWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9z
ZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAg
IGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsg
Ly8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4KLSAgICBtX2xheWVyVHJlZUhvc3QgPSAw
OwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNr
T25DQ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9s
YXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1l
QW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25D
Q1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYg
KG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3Jl
YXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkpOwotfQotCi0jaWZuZGVmIE5ERUJVRwot
Ym9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpCi17Ci0gICAgcmV0
dXJuIDo6aXNNYWluVGhyZWFkKCk7Ci19Ci0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
Ci1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKLXsKLSAgICBy
ZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOwotfQotI2Vsc2UK
LW5hbWVzcGFjZSB7Ci1ib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7Ci19Ci0KLWJvb2wgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKQotewotICAgIHJldHVybiBmYWtl
SW1wbFRocmVhZDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxU
aHJlYWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBmYWtlSW1wbFRocmVhZCA9IHZhbHVlOwotfQotI2Vu
ZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vICFOREVCVUcKLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBp
ZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywg
MCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRl
QW5kTGF5b3V0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFu
ZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgfQotCi0gICAgbV9jb21taXRQZW5kaW5nID0g
ZmFsc2U7Ci0KLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIg
PSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKLSAgICBt
X2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7Ci0KLSAgICAvLyBCbG9ja2luZyBjYWxsIHRv
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29tcGxldGlv
bkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFk
VGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5nZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci0KLSAgICBjb21t
aXR0ZXIuY2xlYXIoKTsKLQotICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsK
LX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwot
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7Ci0gICAgewotICAgICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAgICAgICAg
Y29tbWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdl
dCgpKTsKLSAgICB9Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci0KLSAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0g
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkK
LSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOwotfQotCi12b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
KCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhp
cywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwp
OwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7Ci19Ci0KLXZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqIGNvbXBsZXRpb24pCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5j
cmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsK
LX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRP
bkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhy
ZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLmNsZWFyKCk7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQwMjA3ZTU2MTc2MmFjMWRkZjlkZDg3ODM3OGQ1NDYzNTZjNzg3
YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0jZGVmaW5lIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eV9oCi0KLSNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgotI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NMYXllclRyZWVIb3N0OwotY2xhc3MgQ0NM
YXllclRyZWVIb3N0Q29tbWl0dGVyOwotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQotICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0gICAgdm9pZCBzZXROZWVk
c1JlZHJhdygpOwotCi0gICAgdm9pZCBzdGFydCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUg
dXNpbmcgdGhlIHByb3h5LgotICAgIHZvaWQgc3RvcCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZv
cmUgZGVsZXRpbmcgdGhlIHByb3h5LgotCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50
IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rh
c2tPbkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBz
dGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKLSAgICBzdGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQo
KTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZha2UgdGhyZWFkZWQg
Y29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29ycmVjdCB1c2FnZS4KLSAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlmCi0jZW5kaWYKLQotcHJvdGVjdGVkOgot
ICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsK
LSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJU
cmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29uc3QgeyBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIG9uIEND
TWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJl
Z2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2b2lkIGNvbW1pdE9u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsK
LSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBpbml0SW1wbE9uQ0NU
aHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7Ci0g
ICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCop
OwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wgbV9jb21taXRQ
ZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KLSAgICBDQ0xh
eWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQotICAgIC8vIFVzZWQgb24gdGhlIENDVGhy
ZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1
dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdElt
cGw7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4
IGZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2MjgwZWFjOGEuLjRjMzNiYWEwN2FkZDM1
NzczOWRkYjUxNzYxZTg0N2I3NGU1MWMzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNr
LmgKQEAgLTE1OCw2ICsxNTgsODggQEAgcHJpdmF0ZToKICAgICBQMyBtX3BhcmFtZXRlcjM7CiB9
OwogCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVu
YW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitjbGFzcyBNYWluVGhyZWFkVGFzazQgOiBwdWJsaWMgQ0NN
YWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2Qp
KE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazQ8VCwgUDEs
IE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4gTWFpblRocmVhZFRhc2tJbXBsOworICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBh
cmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBh
cmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFp
dHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKworICAgIHN0YXRpYyBQYXNzT3du
UHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIz
LCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcg
TWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRl
cjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFp
blRocmVhZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVy
NCkKKyAgICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9t
ZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJh
bWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0
aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1l
dGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1l
dGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQs
IHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIE1haW5UaHJl
YWRUYXNrNSA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVk
ZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVk
ZWYgTWFpblRocmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQs
IFA1LCBNUDU+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFt
MzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFt
VHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVh
ZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJh
bWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0
cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBh
cmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9k
LCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIz
LCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIDogQ0NNYWlu
VGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAg
ICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFy
YW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBt
X3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVy
NSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7
CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJh
bWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFt
ZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEg
bV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7
CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1fcGFyYW1ldGVyNTsKK307CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFp
blRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVlLApAQCAtMjE1LDYgKzI5Nyw0NiBAQCBQ
YXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAg
ICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0
eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBl
bmFtZSBNUDQ+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVh
ZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwg
TVAyLCBNUDMsIE1QNCksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDIm
IHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBh
cmFtZXRlcjQpCit7CisgICAgcmV0dXJuIE1haW5UaHJlYWRUYXNrNDxULCB0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAz
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAg
ICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpj
b3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFy
YW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0
KSk7CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1Q
MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywg
dHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bh
c3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBU
KiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0
LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0
ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0
LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBl
LCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRl
KAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
Mj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29w
eShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFt
ZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkp
OworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENDTWFpblRocmVh
ZFRhc2tfaAorI2VuZGlmIC8vIE1haW5UaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmNwcAppbmRleCA2M2VkY2YwZDY3YTY4NGY1ZGJlMGExMmQ1ZDlkMjYyYTBiMTRh
YzIzLi5hOWY0NTBlZDQ4MjQ1ZDgxYjBjNDMwNzJjYTM5MzcxMmQwZGQzNzg2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNj
L0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDgsNyArNDgsNyBAQCBDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2lu
TGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNT
RVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7
CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJl
bmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHBy
b2dyYW0tPmluaXRpYWxpemVkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjFhMmU1
M2VkMjMwZjk2N2VlMWQ4NWRkMDgzY2JhY2Y5YzI2NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiY2MvQ0NQcm94eS5oIgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIK
KyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5k
ZWYgTkRFQlVHCitib29sIENDUHJveHk6OmlzTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIDo6
aXNNYWluVGhyZWFkKCk7Cit9CisKK25hbWVzcGFjZSB7Citib29sIGZha2VJbXBsVGhyZWFkID0g
ZmFsc2U7CitzdGF0aWMgV1RGOjpUaHJlYWRJZGVudGlmaWVyIGltcGxUaHJlYWRJRDsKK30KKwor
Ym9vbCBDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKQoreworICAgIHJldHVybiBmYWtlSW1wbFRocmVh
ZCB8fCBjdXJyZW50VGhyZWFkKCkgPT0gaW1wbFRocmVhZElEOworfQorCit2b2lkIENDUHJveHk6
OnNldEltcGxUaHJlYWQoYm9vbCBpc0ltcGxUaHJlYWQpCit7CisgICAgZmFrZUltcGxUaHJlYWQg
PSBpc0ltcGxUaHJlYWQ7Cit9CisKK3ZvaWQgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChXVEY6OlRo
cmVhZElkZW50aWZpZXIgaWQpCit7CisgICAgaW1wbFRocmVhZElEID0gaWQ7Cit9CisKKyNlbmRp
ZiAvLyAhTkRFQlVHCisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDVkMmNkYWMwYTlmOTNh
MTg5ZjRhMTAzNzJlZDA3ZDVhYTg4YmViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC0wLDAgKzEsMTAz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUHJveHlfaAorI2RlZmluZSBDQ1Byb3h5X2gK
KworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRl
eHQ7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RocmVhZDsKK2Ns
YXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitzdHJ1
Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOworCisv
LyBBYnN0cmFjdCBjbGFzcyByZXNwb25zaWJsZSBmb3IgcHJveHlpbmcgY29tbWFuZHMgZnJvbSB0
aGUgbWFpbi10aHJlYWQgc2lkZSBvZgorLy8gdGhlIGNvbXBvc2l0b3Igb3ZlciB0byB0aGUgY29t
cG9zaXRvciBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIENDUHJveHkgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKENDUHJveHkpOworcHVibGljOgorICAgIHZpcnR1YWwgfkNDUHJveHkoKSB7IH0K
KworICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5n
KCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93
bmVySGFjaykgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOworCisgICAgdmlydHVh
bCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBz
ZXROZWVkc1JlZHJhdygpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsgLy8g
TXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KKyAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4K
KworICAgIC8vIERlYnVnIGhvb2tzCisjaWZuZGVmIE5ERUJVRworICAgIHN0YXRpYyBib29sIGlz
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyBib29sIGlzSW1wbFRocmVhZCgpOworI2VuZGlmCisK
KyAgICAvLyBUZXN0aW5nIGhvb2tzCisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29u
dGV4dCgpID0gMDsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRo
cmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVh
bCBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgPSAwOworI2VuZGlmCisKKyAgICAvLyBUZW1wb3Jh
cnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxsIGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NM
YXllclRyZWVIb3N0TWFpblRocmVhZEkKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KCkgPSAwOworCisgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1
bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bXMKKyAgICB2aXJ0dWFs
IFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgPSAwOworCitwcm90ZWN0
ZWQ6CisgICAgQ0NQcm94eSgpIHsgfQorICAgIGZyaWVuZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhy
ZWFkOworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wp
OworICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyKTsK
KyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNThmNTE3MjE0MmFiOTJhY2ZmODFhZTE2N2M1NTQ5YmZlZWUy
YTY2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisg
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRU
YXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBX
VEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7
CitwdWJsaWM6CisgICAgU2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0K
KyAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9Cit9OworCitQ
YXNzT3duUHRyPENDUHJveHk+IENDU2luZ2xlVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1Npbmds
ZVRocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30KKworQ0NTaW5nbGVUaHJlYWRQcm94eTo6
Q0NTaW5nbGVUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAg
OiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhm
YWxzZSkKKyAgICAsIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dChmYWxzZSkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVI
b3N0SW1wbCgpOworfQorCitDQ1NpbmdsZVRocmVhZFByb3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94
eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6On5DQ1NpbmdsZVRo
cmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ug
c3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpj
b21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CisgICAgaWYgKCFkb0NvbXBvc2l0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhwaXhlbHMsIHJlY3QpOworCisgICAgaWYg
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ1Npbmds
ZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0
SW1wbC0+Y29udGV4dCgpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVu
ZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBtX2xheWVyVHJl
ZUhvc3RJbXBsOworfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICB7CisgICAgICAgIFNj
b3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgfQor
fQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5
OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQoKQoreworICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRy
dWU7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVu
ZGluZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisg
ICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vsc2UKKyAgICAvLyBT
aW5nbGUgdGhyZWFkZWQgb25seSB3b3JrcyB3aXRoIFRIUkVBREVEX0NPTVBPU0lUSU5HLgorICAg
IENSQVNIKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVk
c1JlZHJhdygpCit7CisgICAgLy8gRklYTUU6IE9uY2Ugd2UgbW92ZSByZW5kZXJfd2lkZ2V0IHNj
aGVkdWxpbmcgaW50byB0aGlzIGNsYXNzLCB3ZSBjYW4KKyAgICAvLyB0cmVhdCByZWRyYXcgcmVx
dWVzdHMgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNvbW1pdEFuZFJlZHJhdyByZXF1ZXN0cy4KKyAg
ICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9w
IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICB7CisgICAgICAg
IFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5j
bGVhcigpOworICAgIH0KKyAgICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCisjaWYgVVNFKFNL
SUEpCitHckNvbnRleHQqIENDU2luZ2xlVGhyZWFkUHJveHk6OnNraWFDb250ZXh0KCkKK3sKKyAg
ICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4
dCgpOworfQorI2VuZGlmCisKK1RleHR1cmVNYW5hZ2VyKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1w
bC0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Cit9CisKKyNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1
bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykK
K3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQoreworICAg
IC8vIENvbXBvc2l0ZUlmTmVlZGVkIHdpbGwgbm90IG9jY3VyIGlmICFtX2NvbW1pdFBlbmRpbmcu
IFNvLCBzZXQgdGhlIGJpdCBzbworICAgIC8vIGl0IHN1Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdv
IGF3YXkgb25jZSB0aGUgcHJveGllcyBhc3N1bWUgZnVsbAorICAgIC8vIHNjaGVkdWxpbmcgcmVz
cG9uc2liaWxpdHkuCisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0
ZUlmTmVlZGVkKCk7Cit9CisjZW5kaWYKKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21w
b3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykgeworICAgICAgICAv
LyBVcGRhdGUKKyAgICAgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1l
KTsKKworICAgICAgICAvLyBQcmVjb21taXQgaXMgYSB0ZW1wb3Jhcnkgc3RlcCB3ZSBuZWVkIHRv
IHBlcmZvcm0gdG8gcHVzaCB0aGluZ3MgbGlrZQorICAgICAgICAvLyB0aGUgdmlld3BvcnQgdG8g
dGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCisgICAgICAgIC8vIExheWVyVHJlZUhvc3RJ
bXBsOjp1cGRhdGVMYXllcnMoKSBpc24ndCBzcGxpdCBpbnRvIGhvc3QgYW5kIGltcGwgcGFydHMu
CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlQ29tbWl0KG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlY29tZSBtX2xheWVyVHJl
ZUhvc3QtPnVwZGF0ZUxheWVycygpIG9uY2Ugd2Ugc3BsaXQgYXBhcnQKKyAgICAgICAgLy8gTGF5
ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycy4KKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8gQ29tbWl0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNv
bW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICAgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERy
YXcKKyAgICAgICAgaWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5wcmVzZW50KCk7CisgICAgfQorfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6
OmRvQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7
CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVl
SG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgICAgICBBU1NFUlQoY29u
dGV4dC0+aGFzT25lUmVmKCkpOworICAgICAgICBib29sIG9rID0gIW1fbGF5ZXJUcmVlSG9zdElt
cGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKDAsIGNvbnRleHQpOworICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3
TGF5ZXJzKCk7CisgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgp
KSB7CisgICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVy
ZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8gZGllZC4gVGhpcyBp
cyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAg
ICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxv
b3AsIHJldmVydGluZyBvdXIKKyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJ
bnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAgICAgICAvLyBy
ZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBp
dGVyYXRpb24KKyAgICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgor
ICAgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAgICAg
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzRlODNhYTM4NzQ2MzYyZDYyOGUyZGY3ZWIy
NWU5NGU3NzZmNmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTaW5nbGVUaHJlYWRQcm94eV9oCisjZGVmaW5l
IENDU2luZ2xlVGhyZWFkUHJveHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQu
aCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQ
cm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHkgOiBw
dWJsaWMgQ0NQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcm94eT4g
Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZpcnR1YWwgfkNDU2luZ2xlVGhyZWFkUHJv
eHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wg
Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
dmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBm
aW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7
CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9z
dCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmly
dHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEhv
cnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRo
ZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlz
IEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0
KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1z
IGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBU
ZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOworCisgICAgLy8gU3BlY2lh
bCBjYXNlIGZ1bmN0aW9ucy4KKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZv
aWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGV4cGxp
Y2l0IENDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisgICAgdm9pZCBjb21w
b3NpdGVJZk5lZWRlZCgpOworICAgIGJvb2wgZG9Db21wb3NpdGUoKTsKKworICAgIC8vIEFjY2Vz
c2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJl
ZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFp
biB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgorICAgIE93blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOworCisgICAgYm9vbCBtX2NvbW1p
dFBlbmRpbmc7CisgICAgYm9vbCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7Cit9OworCit9
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDBmYmVl
NDFmZmFmOTY1Yzg5YzU3MzRlNGM3MjRhN2U3ZTRhMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5j
cHAKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJU
cmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJj
Yy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBu
YW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CitDQ1Ro
cmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NQ
cm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkUHJveHkobGF5ZXJUcmVlSG9z
dCkpOworfQorCitDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5
ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFjY1RocmVhZCkgeworICAgICAgICBjY1Ro
cmVhZCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpLmxlYWtQdHIo
KTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoY2NUaHJl
YWQtPnRocmVhZElEKCkpOworI2VuZGlmCisgICAgfQorfQorCitDQ1RocmVhZFByb3h5Ojp+Q0NU
aHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6On5DQ1RocmVh
ZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NF
UlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQu
CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBj
YWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAg
ICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKwor
Ym9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitHcmFwaGljc0NvbnRleHQzRCogQ0NUaHJlYWRQcm94eTo6Y29udGV4
dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDVGhyZWFkUHJv
eHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQor
eworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9z
dC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7CisK
KyAgICAvLyBMZWFrIHRoZSBjb250ZXh0IHBvaW50ZXIgc28gd2UgY2FuIHRyYW5zZmVyIG93bmVy
c2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0UHRyID0gY29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpOworICAgIEFTU0VSVChjb250
ZXh0UHRyLT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0byBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2Fs
bAorICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgaW5pdGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2Fw
YWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxlcy4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOworICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRlZDsKKyAgICBMYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9u
Q0NUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKG93bmVySGFjayksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29u
dGV4dFB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
aW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNhcGFiaWxpdGll
cykpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIGlmIChpbml0aWFsaXplU3VjY2Vl
ZGVkKQorICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weSA9
IGNhcGFiaWxpdGllczsKKyAgICByZXR1cm4gaW5pdGlhbGl6ZVN1Y2NlZWRlZDsKK30KKworY29u
c3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllc01haW5UaHJlYWRDb3B5OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6Omxvc2VDb21w
b3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBj
Y1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpz
dGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxl
dGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhy
ZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2Fp
dCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisgICAgQ0NDb21w
bGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NU
aHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0
aW9uLndhaXQoKTsKKworICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlm
eSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKwor
I2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBDQ1RocmVhZFByb3h5Ojpza2lhQ29udGV4dCgpCit7
CisgICAgLy8gTm90IHN1cHBvcnRlZCBvbiB0aGUgaW1wbCB0aHJlYWQuCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitU
ZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NU
aHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNF
X0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRo
aXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgLy8gRklYTUU6IGNhbGwgYmVnaW5GcmFtZUFuZENvbW1pdCBvbiBtYWluIHRo
cmVhZAorfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoZG91Ymxl
IGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYg
KCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICB7Cisg
ICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0
aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1l
QmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKworICAg
IC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxs
b3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQo
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Cisg
ICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKK30K
Kwordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1w
bCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25D
Q1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNT
RVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRo
aXMsIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJv
eHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkND
VGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2xh
eWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1w
bCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVy
SGFjaywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBj
b21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKiBjYXBhYmlsaXRpZXMpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6
OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0
KGFkb3B0UmVmKGNvbnRleHRQdHIpKTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4
dCk7CisgICAgaWYgKCppbml0aWFsaXplU3VjY2VlZGVkKQorICAgICAgICAqY2FwYWJpbGl0aWVz
ID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAg
IGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJl
ZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXll
clRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI2YzQ0OGIwY2VhZTdlYmJkNDY4
MjY0OWFhNzkyMDVkNGFjNTExOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ1Ro
cmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NM
YXllclRyZWVIb3N0OworCitjbGFzcyBDQ1RocmVhZFByb3h5IDogcHVibGljIENDUHJveHkgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqKTsKKworICAgIHZpcnR1YWwgfkNDVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDUHJv
eHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2so
dm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlu
aXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2
aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0
KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBh
bGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBm
b3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEp
CisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8v
IFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBM
YXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVu
dHNUZXh0dXJlTWFuYWdlcigpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDVGhyZWFkUHJv
eHkoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFkCisg
ICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAg
ICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRPbkND
VGhyZWFkKCk7CisgICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7
CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdGlhbGl6ZUlt
cGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBpbml0aWFsaXplTGF5
ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiwgR3JhcGhpY3NDb250ZXh0M0Qq
LCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMqKTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25D
Q1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9p
ZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisg
ICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5n
OworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJl
ZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1f
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5OworCisgICAgLy8gVXNlZCBv
biB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFs
aXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXll
clRyZWVIb3N0SW1wbDsKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCmlu
ZGV4IDkxYzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNiZTEwOTU3OGYxODMuLmQ4ZGU0YWIwMzQ2
OTg4NzY5ZmJlMjY3NGZkMzIzNjEwYzQ1ZDcyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBA
IC0xOTgsNiArMTk4LDQ4IEBAIHByaXZhdGU6CiAgICAgUDQgbV9wYXJhbWV0ZXI0OwogfTsKIAor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUg
UDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQs
IHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIENDVGhyZWFk
VGFzazUgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9p
ZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgQ0NU
aHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1
PiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNr
VHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFt
NDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFt
VHlwZSBQYXJhbTU7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBj
cmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJh
bTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJh
bTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJl
YWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IENDVGhyZWFkVGFzazUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0
ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0
ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5j
ZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBh
cmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwg
bV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRl
cjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19j
YXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIy
LCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQ
MiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVy
NDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFz
c093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0
IGNhbGxlZSwKQEAgLTI3NCw2ICszMTYsMjcgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4g
Y3JlYXRlQ0NUaHJlYWRUYXNrKAogCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0
eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRh
c2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAy
LCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQ
MiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYg
cGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gQ0NU
aHJlYWRUYXNrNTxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQ
ND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+
OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9z
c1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFk
Q29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNv
cHkocGFyYW1ldGVyNCksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6Y29weShwYXJh
bWV0ZXI1KSk7CisKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ0NU
aHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggYmYyM2Jk
ZWZkOWYzZjVjYjgxMTg2NDgwZGZmODFjMzcyNjkxOTllMi4uNWY1YjI1NjQzYThiZjg0ZGMwZTZh
NGY1ODFjZDBkYzYzNDQyMTI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAK
QEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCA0YTU1YmNhMGEz
NjdkNzBmMzg3NGM2MDgzZDUzNjNiNWM2NGQ2YmYxLi45ZmYxZmNjYzk3MTZjMTI0MmZlMzVmZTY5
MGEyYTgwMjE2MGQyZjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAt
MzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1By
b3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJl
KHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnMKIAogdm9pZCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVh
ZCgpKTsKIAogICAgIGlmIChtX3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAwNDZmYjEzYzliNzhmODBjYjljZmEyYWMxYTYwMDA1NjcyM2Y1
ODdjLi43NWY3M2MwMTAwZGQ3NDhiZDE2YjAwNDAxNzUwYTdkNjViZTlmNGFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTA4LTI2ICBOYXQgRHVjYSAg
PG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVjZSBDQ0xh
eWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5k
ZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViVmlld0ltcGw6OnNldFJvb3RHcmFwaGljc0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk6CisgICAgICAg
ICogdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToK
KwogMjAxMS0wOC0yNyAgUGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVGVhY2ggdGhlIHVwZGF0ZSBhbmQgYnVpbGQgc2NyaXB0cyBob3cgdG8gaGFuZGxlIGRl
cGVuZGVuY2llcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmll
d0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmlu
ZGV4IGNlNGIzZjFlZWM5NDNmNGIyYmU5NDcyYzQ0OGJkMTQ1ZTlhYmVhZTQuLmRkMjIzOTY3ODJi
Mzg0N2QyNjZlNjM0ZGJjY2E0NzI4NWI1Y2FjZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTI1MTcsOSArMjUxNyw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldFJvb3RHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogICAgICAgICBt
X2xheWVyVHJlZUhvc3QtPnNldFJvb3RMYXllcihsYXllcik7CiAKICAgICBJbnRSZWN0IGRhbWFn
ZWRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCwgbV9zaXplLmhlaWdodCk7Ci0gICAgaWYgKG1faXNB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKQotICAgICAgICBpbnZhbGlkYXRlUm9vdExheWVy
UmVjdChkYW1hZ2VkUmVjdCk7Ci0gICAgZWxzZQorICAgIGlmICghbV9pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUpCiAgICAgICAgIG1fY2xpZW50LT5kaWRJbnZhbGlkYXRlUmVjdChkYW1h
Z2VkUmVjdCk7CiB9CiAKQEAgLTI2MTAsNiArMjYwOCwxMSBAQCB2b2lkIFdlYlZpZXdJbXBsOjpz
ZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIFdl
YkNvcmU6OkNDU2V0dGluZ3MgY2NTZXR0aW5nczsKICAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVy
YXRlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJs
ZWQoKTsKICAgICAgICAgY2NTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygp
LT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVkKCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lU
SU5HKQorICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOwor
I2Vsc2UKKyAgICAgICAgY2NTZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7
CisjZW5kaWYKICAgICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCkt
PnNob3dGUFNDb3VudGVyKCk7CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJU
cmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCmluZGV4IDFjNWY4
NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5NjNiNTc3YzIuLmQ5OTQzZTcxM2EyMGE0ZDdiMDkw
NDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAg
TU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBpbnQgYTIpKTsKICAgICBNT0NLX01F
VEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzKSk7CiAgICAgTU9DS19N
RVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7Cisg
ICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50
IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRo
b2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVN
ZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOwog
ICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwgNykpLlRpbWVzKDEpOwogICAgIEVY
UEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywgNikpLlRpbWVzKDEpOworICAgIEVYUEVD
VF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwgNywgNiwgNSkpLlRpbWVzKDEpOwogCiAgICAgY3Jl
YXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMCktPnBlcmZvcm1UYXNrKCk7CiAg
ICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMSwgOSktPnBlcmZvcm1U
YXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMiwgOSwg
OCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6
bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNr
KCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnBlcmZvcm1UYXNrKCk7CisgICAg
Y3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNSwgOSwgOCwgNywgNiwgNSkt
PnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105536</attachid>
            <date>2011-08-29 15:55:29 -0700</date>
            <delta_ts>2011-08-29 16:08:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66807-20110829155528.patch</filename>
            <type>text/plain</type>
            <size>121279</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMmFkMDIwMGZjNGY1ZWJj
NDA0MTJkNmM5MTgzOTg4NjZhM2E0ZGJjLi5iNjI0YTcxNDhkMjFiMzNkMWQzYjk1N2E4N2E0MTc5
OTFmOGM0ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFpblRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5
ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRlbnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVw
ZGF0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
OjpnZXRPZmZzY3JlZW5MYXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhv
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVU
ZXh0dXJlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRy
YXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVl
SG9zdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGlu
Z3M6OkNDU2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllczo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVI
b3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRD
b21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVz
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTWFpblRocmVhZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNr
NDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVh
ZFRhc2s0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6TWFpblRocmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVNYWluVGhyZWFkVGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5M
YXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVh
ZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDUHJveHk6OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFNldEltcGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U2NvcGVkU2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBv
c2l0b3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnNldE5lZWRzUmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFk
UHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tp
YUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVu
dHNUZXh0dXJlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21wb3NpdGVJbW1lZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVh
ZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRo
cmVhZFByb3h5Ojpkb0NvbXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHku
aC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RocmVhZFByb3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFk
UHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojppc1N0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6
c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1RocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25D
Q1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5
ZXJSZW5kZXJlck9uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6
bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFz
ay5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRUYXNrNTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q0NUaHJlYWRUYXNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OmRyYXcpOgorCiAyMDExLTA4LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogPGJ1dHRvbiBoaWRkZW4+Li48
L2J1dHRvbj4gaGFzIGEgZGlmZmVyZW50IGNvbXB1dGVkICJkaXNwbGF5IiB2YWx1ZSB0aGFuICJu
b25lIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGMwNmNlNGI2MzJlYjUyZTJlYjYxNDUzMWJiNmZiOGY1
MDM2Nzg2NTAuLmNkY2Y1OWVlOTcxNGU2MmM5MjE5NWNlYmJlZGYyOTliYTk1YWY5NDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTM1MzUsMjAgKzM1MzUsMjIgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UGx1Z2luTGF5ZXJJbXBsLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcm94eS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNTljMmNjYTFkOTJjZDNhZWY2M2E0NzAxZTA1YmQxZmJhYWNi
ODRlNy4uZGI1ZTAzNDZmNmI3NTJjZmNjYjViNGU0YzY5NTNlNWI3ZDQ5MGIyMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcApAQCAtMTIwLDE2ICsxMjAsMTggQEAgYm9vbCBD
b250ZW50TGF5ZXJDaHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0
KiBob3N0KQogewotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEp
CisgICAgLy8gTm90ZSB0aGF0IGhvc3QtPnNraWFDb250ZXh0KCkgd2lsbCBjcmFzaCBpZiBjYWxs
ZWQgd2hpbGUgaW4gdGhyZWFkZWQKKyAgICAvLyBtb2RlLiBUaGlzIHRodXMgZGVwZW5kcyBvbiBD
Q0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUgdHVybmluZyBvZmYKKyAgICAvLyBhY2NlbGVyYXRl
UGFpbnRpbmcgdG8gcHJldmVudCB0aGlzIGZyb20gY3Jhc2hpbmcuCiAgICAgaWYgKGhvc3QtPnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIg
PSBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRl
cjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkp
OworICAgICAgICBHckNvbnRleHQqIGNvbnRleHQgPSBjb25zdF9jYXN0PENDTGF5ZXJUcmVlSG9z
dCo+KGhvc3QpLT5za2lhQ29udGV4dCgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNy
ZWF0ZShtX293bmVyKSwgY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCi0gICAgbV90ZXh0dXJl
VXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQ
YWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsK
KyAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRl
KENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhlYzU3ODE5ZDJjYzVi
Yy4uNzFiYzBiNmI5ZGI2NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUxheWVyQ2hyb21pdW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9vbCBJbWFnZUxheWVy
Q2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVt
OjpjcmVhdGVUZXh0dXJlVXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0g
ICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhv
c3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1h
Z2VMYXllclRleHR1cmVVcGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpLnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA5
NTYzZWFhNTdmNTY3M2M4NTk5ZDRkYmFhYzg4YjkyZDljNDk0MzQ4Li5lZWVhYmIyMTBhYTFiMzI1
ODljNjcxYjhjMzcxMTE0NDkyYjAzMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtOTYs
NiArOTYsMTkgQEAgdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKIH0K
IAordm9pZCBMYXllckNocm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbigpLnNpemUoKTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zZXRMYXllclJl
bmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAg
ICAgbWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworICAg
IGlmIChyZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnNldExheWVyUmVu
ZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworCisgICAgc2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJl
cik7Cit9CisKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRl
cmVyQ2hyb21pdW0qIHJlbmRlcmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVy
IHJlbmRlcmVycyB0aGVuIHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKaW5kZXggNThlZDFiMDQwOTZkYWMzZTFiZjZlNzc5NmFmNTkwNmI4Mzg4Y2M4NS4u
ZmUyZTRjNzEzNzNiZTUyNWQ1OGM2M2I3Y2UwYTgxZWE4ZTFlNWM4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaApAQCAtMTUzLDYgKzE1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUm9vdExheWVy
KGJvb2wgaXNSb290TGF5ZXIpIHsgbV9pc1Jvb3RMYXllciA9IGlzUm9vdExheWVyOyB9CiAgICAg
Ym9vbCBpc1Jvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1faXNSb290TGF5ZXI7IH0KIAorICAg
IHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsK
KwogICAgIC8vIERlcml2ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5
IG5lZWQgdG8gcmVhY3QgdG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNo
cm9taXVtLgogICAgIC8vIEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVIb3N0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNzBhMDVkY2EwOTAxMGE2Y2I1
OWZjZjViMWRhZTMxMDJkOGY2ZGRmZC4uMGIyY2YzNzM1NzhiZDcxOTExNjc4Y2FkOWRkNzA0ZGNi
NzRmMjhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2
ICs0NSw3IEBACiAjaW5jbHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1
ZGUgIk5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFu
YWdlci5oIgpAQCAtNDQ5LDEzICs0NTAsMTMgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVy
YXRlZFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogfQogI2VuZGlmCiAKLVBh
c3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KQorUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJUcmVlSG9z
dEltcGwqIG93bmVySW1wbCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkK
IHsKICNpZiBVU0UoU0tJQSkKICAgICBpZiAob3duZXItPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBh
aW50aW5nICYmICFjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0
KCkpKQogICAgICAgICByZXR1cm4gMDsKICNlbmRpZgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IGxheWVyUmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1
bShvd25lciwgY29udGV4dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBs
YXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIG93
bmVySW1wbCwgY29udGV4dCkpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmluaXRpYWxpemUo
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTQ2Myw4ICs0NjQsMTAgQEAgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCoKIH0KIAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hy
b21pdW0oQ0NMYXllclRyZWVIb3N0KiBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1wbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9vd25l
ckltcGwob3duZXJJbXBsKQogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwg
bV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAg
LTQ4MywxNCArNDg2LDE4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXpl
KCkKICAgICAgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMg
aW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CiAgICAgICAgIG1fc2tp
YUNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4
VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJh
dGVkUGFpbnRpbmcgPSB0cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgV2ViQ29yZTo6RXh0ZW5z
aW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1f
bWFwX3N1YiIpOwotICAgIGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKKyAgICBtX2NhcGFi
aWxpdGllcy51c2luZ01hcFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9t
YXBfc3ViIik7CisgICAgaWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQogICAgICAgICBl
eHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAKKyAgICBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgbV9j
YXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVy
ZUZvcm1hdChtX2NvbnRleHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxNCwxMSArNTIxLDEwIEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1w
bFJlY3Vyc2l2ZShDQ0xheWVySW1wCiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQor
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290Q0NM
YXllckltcGwpCi0gICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVh
cigpOworICAgIGlmIChyb290TGF5ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFj
ZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBoaWNz
Q29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU5LDYgKzU2
NSw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogCiB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAoIXJv
b3RMYXllckltcGwoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fb3duZXItPnZpZXdw
b3J0U2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NjcsMTMgKzU3Niw2
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIC8vIFJl
bmRlcldpZGdldC4KICAgICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRp
bWUoKSk7CiAKLSAgICAvLyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIu
IFRoaXMgbWF5IGJlY29tZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQg
b2ZmIGR1cmluZyBhIHBhaW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIXJvb3RMYXllcigpKSB7Ci0g
ICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KICAgICB1cGRhdGVMYXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAK
QEAgLTU4MiwxMiArNTg0LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXll
cnMoKQogICAgIGlmICghcm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVl
cyIsIHRoaXMsIDApOwotICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV9yb290
Q0NMYXllckltcGwuZ2V0KCkpOwotICAgIH0KLQotCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXModGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVz
IC0gbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CiAg
ICAgZHJhd0xheWVyc0ludGVybmFsKCk7CiAKQEAgLTczMiw3ICs3MjgsNyBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRo
aXMsIDApOwotICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290Q0NMYXllcklt
cGwuZ2V0KCk7CisgICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSByb290TGF5ZXJJbXBs
KCk7CiAgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXIt
PnJlbmRlclN1cmZhY2UoKSkKQEAgLTg0MCwyMCArODM2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnByZXNlbnQoKQogICAgIG1faGVhZHNVcERpc3BsYXktPm9uUHJlc2VudCgpOwog
fQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2
ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0TGF5ZXJSZW5k
ZXJlclJlY3Vyc2l2ZShjaGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tM
YXllcigpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5
ZXIoKSk7Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwotCi0gICAgbGF5ZXItPnNl
dExheWVyUmVuZGVyZXIodGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpn
ZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CiAgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFko
KSA8PSB2aWV3cG9ydEhlaWdodCgpKTsKQEAgLTk0OCw3ICs5MzAsNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBs
YXllcikKIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2Ny
ZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZz
Y3JlZW4gJiYgbV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3Vy
ZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29t
cG9zaXRlT2Zmc2NyZWVuICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RMYXllckltcGwoKS0+cmVu
ZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCkBAIC0xMjk5LDcg
KzEyODEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2Vz
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3Vy
ZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9j
b250ZXh0LmdldCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAppbmRleCAyZDgwNDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3
NWZkLi40MzA1OTAzMWE0Yjg1NGE3MWMwOWZlZGIyMjIxZjUxZDZlYWExMjFmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNj
L0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNs
YXNzIENDTGF5ZXJJbXBsOwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0OyAvLyBGSVhNRTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CkBAIC03MiwxMSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0OwogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVI
b3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5
ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAv
LyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9t
aXVtIHRvIGRlc3RydWN0CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJS
ZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXItPnNldHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxp
dGllczsgfQogCiAgICAgQ0NMYXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7
IH0KICAgICBjb25zdCBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lcjsgfQpAQCAtODQsMTQgKzg5LDE3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiBy
b290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXll
cigpOyB9CiAKKyAgICBDQ0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3du
ZXJJbXBsLT5yb290TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJ
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFw
U3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29s
IGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVz
aW5nTWFwU3ViOyB9CiAKICNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0
KCkgeyByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJ
bnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsg
fQorICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBs
LT52aWV3cG9ydFNpemUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmll
d3BvcnRTaXplKCkud2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJu
IHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTE0MiwyNCArMTUwLDE3IEBAIHB1Ymxp
YzoKIAogICAgIFN0cmluZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAotICAgIC8vIFJldHVy
biB0cnVlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaGFzIGFuIGVycm9yLgotICAgIGJvb2wg
aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAog
ICAgIHZvaWQgcmVsZWFzZVRleHR1cmVzKCk7CiAKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXJS
ZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSopOwotCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3Jt
YXQoKTsKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVy
TGlzdDsKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxp
c3Q7CiAKLSAgICB2b2lkIGNsZWFyUm9vdENDTGF5ZXJJbXBsKCk7CiBwcml2YXRlOgotICAgIC8v
IEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBs
IHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RD
Q0xheWVySW1wbDsKLQotICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3Qq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9t
aXVtKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVw
ZGF0ZUxheWVycyhMYXllckNocm9taXVtKik7CkBAIC0xOTIsOSArMTkzLDEzIEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKEND
TGF5ZXJJbXBsKik7CiAKLSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gQ0NMYXllclRyZWVI
b3N0SW1wbAorICAgIC8vIEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCiAgICAg
Q0NMYXllclRyZWVIb3N0KiBtX293bmVyOwogCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9v
d25lckltcGw7CisKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVz
OworCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4OwogCkBAIC0yMzQsOCArMjM5LDYgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8R3JDb250ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAK
LSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNl
KiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29y
dGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCmluZGV4IDI2Y2U4
YjVkOTE5N2JhMzY4Njk0MjllNmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3YmMxZWMzZmU4Nzk5ZWYx
OWE3MWExMzgwZjRiMmQ0M2EwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVy
Q2FudmFzLmgKQEAgLTgwLDcgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJ
bWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CiAjaWYgVVNFKFNLSUEpCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVi
bGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcgKzEwOSw2IEBAIHByaXZh
dGU6CiAgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsgLy8gR1BVIGFjY2VsZXJhdGVkIGNh
bnZhcy4KIH07CiAjZW5kaWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElO
RwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2
NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5ZTJjMy4uYTc5ZWExMmM0ZDc0YzE5MWVjNGQ2MDdl
YmZkNDhhZDVlMzdkZjgzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0x
NDEsNyArMTQxLDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3Qo
Q0NMYXllclRyZWVIb3N0KiBob3N0KQogCiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoaG9zdCk7
CiAKLSAgICBtX3RleHR1cmVGb3JtYXQgPSBob3N0LT5iZXN0VGV4dHVyZUZvcm1hdCgpOworICAg
IG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0
VGV4dHVyZUZvcm1hdDsKICAgICBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVy
KCktPm9yaWVudGF0aW9uKCk7CiAgICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBk
YXRlcigpLT5zYW1wbGVkVGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3RpbGVy
ID0gQ0NMYXllclRpbGluZ0RhdGE6OmNyZWF0ZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDY1MmQyOGRmYjNjNjIzNmU3MDNjMTkzZDRlZTU3NmUxNjk5OGQxY2YuLjE2YjUw
YjE3MmMwNjJjMjJhOWI1MTljM2UwZDBjZTcxODcwZjc3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmNwcApAQCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVt
OjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVu
CiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBt
X2xheWVyVHJlZUhvc3QtPm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1heFRleHR1cmVTaXpl
ID0gbV9sYXllclRyZWVIb3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVy
ZVNpemU7CiAKICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxh
bmVzKCk7IHBsYW5lKyspIHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0g
ZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwCmluZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTky
NzQuLjBlNzU3MjQ4NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNM
YXllckltcGwoKQogCiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NF
UlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJU
KENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsK
ICAgICBjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJv
Z3JhbS0+aW5pdGlhbGl6ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRl
eCA1ZDZiYzljMzI3MzUyNjc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi45N2Q2NTFhMWY3Y2M5
YjQ3YzA5MWE0ZTM5NDY1ZWIyOTQzMWUzMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1
ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
aCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNs
dWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1JlZlB0cjxDQ0xheWVy
VHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCog
Y2xpZW4KIH0KIAogQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVI
b3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9y
ZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgw
KQotICAgICwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGlu
ZyhmYWxzZSkKKyAgICA6IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50
KQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QoTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RM
YXllclBhaW50ZXIoKSkpCiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV92aXNp
YmxlKHRydWUpCiB7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsK
LSAgICBtX2xheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFt
X2xheWVyUmVuZGVyZXIpCisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVh
ZCkgeworICAgICAgICAvLyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qgc3VwcG9ydGVkIGlu
IHRocmVhZGVkIG1vZGUuIFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJh
dGVQYWludGluZyA9IGZhbHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJlYWRQcm94eTo6Y3Jl
YXRlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6Y3JlYXRlKHRoaXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisKKyAgICBpZiAoIW1f
cHJveHktPmluaXRpYWxpemVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAvLyBGSVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRoZXNlIHZhbHVlcyB3
aWxsIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhh
biBtX2xheWVyUmVuZGVyZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJl
ci0+bWF4VGV4dHVyZVNpemUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1D
b2xvcjo6YmVzdFRleHR1cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCkpOwotICAg
IG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0U3VwcG9y
dHNNYXBTdWIoKTsKKyAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRp
ZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBtX3NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51
c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5
ZXI6OmNyZWF0ZSgwKTsKICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEsOCBAQCBib29sIEND
TGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQo
bV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7CiAKLQotI2lmIFVT
RShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpjcmVhdGUodGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsK
KyAgICAvLyBXZSBjaGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1p
dCBpcyBuZWVkZWQuCiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSNl
bmRpZgogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODAgQEAgYm9vbCBDQ0xh
eWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0IiwgdGhpcywgMCk7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIG1fcHJv
eHktPnN0b3AoKTsKICAgICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRy
dWU7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAg
IG1fYW5pbWF0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21t
aXQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9zdEltcGwtPnNldFZp
c2libGUobV92aXNpYmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXpl
KCkpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQordm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQog
eworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQo
IkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0
U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0
cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExheWVyKCkpCisgICAg
ICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkp
KTsKKyAgICBlbHNlCisgICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CisKICAgICBt
X2ZyYW1lTnVtYmVyKys7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK1Bhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJU
cmVlSG9zdDo6Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpCiB7Ci0gICAgbV9hbmltYXRpbmcgPSB0
cnVlOwotICAgIG1fY2xpZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKLSAg
ICBtX2FuaW1hdGluZyA9IGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlQ29tcG9z
aXRvclRocmVhZCgpOwogfQogCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4g
Q0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkKK1Bhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dENvbnRleHQzRCgpCiB7Ci0gICAgLy8gRklYTUU6IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBj
YXNlLCBmaXggd2hlbiBwb3NzaWJsZS4KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bV9jbGllbnQtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKIH0KIAotUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhv
c3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKK1Bhc3NPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1w
bCgpCiB7Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXll
clJlbmRlcmVyKTsKLSAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVu
dCwgcmVuZGVyZXIpOworICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUobV9z
ZXR0aW5ncyk7CiB9CiAKLUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRl
eHQoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJv
b2wgc3VjY2VzcykKIHsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JiByZWN0KQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lk
IENDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotI2lmIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKLSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNl
bHNlCi0gICAgY29tcG9zaXRlKGZhbHNlKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1l
YnVmZmVyUGl4ZWxzKHBpeGVscywgcmVjdCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9z
aXRlKCk7Cit9CiAjZW5kaWYKKworLy8gVGVtcG9yYXJ5IGhhY2sgdW50aWwgV2ViVmlld0ltcGwg
Y29udGV4dCBjcmVhdGlvbiBnZXRzIHNpbXBsaWZpZWQKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ0xh
eWVyVHJlZUhvc3Q6OmNvbnRleHQoKQoreworICAgIEFTU0VSVCghbV9zZXR0aW5ncy5lbmFibGVD
b21wb3NpdG9yVGhyZWFkKTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOworfQorCiti
b29sIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVBbmRS
ZWFkYmFjayhwaXhlbHMsIHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNo
QWxsUmVuZGVyaW5nKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgLy8g
RklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1fbGF5ZXJSZW5kZXJl
ci0+ZmluaXNoKCk7Ci0jZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsK
IH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0
IEludFJlY3QmIGRpcnR5UmVjdCkKQEAgLTE1Myw2ICsxNzEsMTEgQEAgdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
ICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0
KTsKIH0KIAorY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0
OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm94
eS0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJ
VElORykKQEAgLTE3NywxMyArMjAwLDE3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290
TGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNv
bXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgaWYgKGxh
eWVyKSB7CisgICAgaWYgKGxheWVyKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dC0+Z3JhcGhpY3NMYXllcigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIGxheWVyLT5wbGF0
Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXIobV9sYXllclJlbmRlcmVyLmdldCgpKTsKLSAg
ICB9IGVsc2UKLSAgICAgICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVhclJvb3RDQ0xheWVySW1wbCgp
OworfQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIENDTGF5ZXJUcmVlSG9zdDo6c2tpYUNv
bnRleHQoKQoreworICAgIEFTU0VSVChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyk7Cisg
ICAgcmV0dXJuIG1fcHJveHktPnNraWFDb250ZXh0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
CiB7CkBAIC0xOTMsMTE0ICsyMjAsMzMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdw
b3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY28KICAgICBt
X25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRp
b24pOwogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnNl
dFNpemUoY29udGVudHNTaXplKTsKIAotICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpIHsKKyAg
ICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVy
ZXIpCi0gICAgICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwotICAg
IH0KIAogICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQotICAgIGlmICghdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5y
ZWxlYXNlVGV4dHVyZXMoKTsKLSNlbmRpZgorICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CisgICAg
bV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAotUGFzc1JlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJSZW5kZXJlcigp
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKIHsKLSAgICAv
LyBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0
aGF0IGNhc2UgZmFsbCBiYWNrIHRvIHNvZnR3YXJlLgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFjdHVhbGx5
IGNyZWF0ZSB0aGUgcmVuZGVyZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4g
bGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRl
eHQpOwotCi0gICAgLy8gSWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBh
Y2NlbGVyYXRlZCBwYWludGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZwotICAgIC8v
IGFuZCB0cnkgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGFnYWluLgotICAgIGlmIChtX3NldHRpbmdz
LmFjY2VsZXJhdGVQYWludGluZyAmJiAhbGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX3NldHRp
bmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOwotICAgICAgICBsYXllclJlbmRlcmVyID0g
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGxheWVyUmVuZGVyZXI7CisgICAgbV9wcm94eS0+bG9zZUNvbXBvc2l0b3JDb250
ZXh0KCk7CiB9CiAKIFRleHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4
dHVyZU1hbmFnZXIoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiB0aGlzIGNsYXNzIHNob3VsZCBv
d24gdGhlIGNvbnRlbnRzIHRleHR1cmUgbWFuYWdlcgotICAgIGlmICghbV9sYXllclJlbmRlcmVy
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZW50
c1RleHR1cmVNYW5hZ2VyKCk7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbnRlbnRzVGV4dHVyZU1h
bmFnZXIoKTsKIH0KIAogI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi12b2lkIENDTGF5
ZXJUcmVlSG9zdDo6ZG9Db21wb3NpdGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0
ZSgpCiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
SW1wbFRocmVhZCh0cnVlKTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwot
ICAgIG1fbGF5ZXJSZW5kZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJlbmRlcmVy
LT5kcmF3TGF5ZXJzKCk7Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0Ojpjb21wb3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3JlYXRpbmdH
cmFwaGljc0NvbnRleHQpIHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVx
dWVzdCBhIHJlcGFpbnQgd2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAgIC8vIGlu
IGNyZWF0aW5nIGEgbmV3IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJlcigpOwot
ICAgICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3Ig
Y29udGV4dCBpcyBhbHJlYWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29t
cG9zaXRvckNvbnRleHRMb3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQotICAgICAg
ICAvLyBQdXQgcmVzdWx0IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNl
bnQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250
ZXh0TG9zdCgpKSB7Ci0gICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJp
Z2h0IGhlcmUgd2lsbCBub3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBkaWVkLiBU
aGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBi
ZQotICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdl
IGxvb3AsIHJldmVydGluZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4g
SW5zdGVhZCwgd2UgZGV0YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAgIC8vIHJl
bmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0
ZXJhdGlvbgotICAgICAgICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgotICAg
ICAgICBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxv
c2VDb21wb3NpdG9yQ29udGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0
ID0gdHJ1ZTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcigp
Ci17Ci0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IGNy
ZWF0ZUxheWVyUmVuZGVyZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAg
bV9jbGllbnQtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNp
dmUobV9yb290TGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRlcmVyID0g
bGF5ZXJSZW5kZXJlcjsKLQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4
dCh0cnVlKTsKKyAgICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7
CisgICAgc3RhdGljX2Nhc3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5j
b21wb3NpdGVJbW1lZGlhdGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5NGQ4MzY0
MTQ4M2I0OWQ5M2M2OTBmYjFlYWJhZThjNi4uYWFkZDI1MDY0ZWU0MjYwMThjMTZkZTA1ODM1MDhj
ZTg3MjIwMTQ2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDE3ICsyNywx
OSBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNv
bnRleHQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOwotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIENDVGhy
ZWFkOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllckNocm9taXVtOwpAQCAt
NjUsMzUgKzY3LDY0IEBAIHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRpbmdzKCkKICAg
ICAgICAgICAgIDogYWNjZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBjb21w
b3NpdGVPZmZzY3JlZW4oZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJl
YWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAg
ICAgLCBzaG93UGxhdGZvcm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBhY2NlbGVy
YXRlUGFpbnRpbmc7CiAgICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgYm9vbCBlbmFi
bGVDb21wb3NpdG9yVGhyZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9vbCBz
aG93UGxhdGZvcm1MYXllclRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBh
biBJbXBsJ3MgcmVuZGVyaW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVyVHJlZUhv
c3QKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkKKyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAgICAgICAs
IHVzaW5nTWFwU3ViKGZhbHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyhm
YWxzZSkKKyAgICAgICAgLCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0RlbnVtIGJl
c3RUZXh0dXJlRm9ybWF0OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1c2luZ0Fj
Y2VsZXJhdGVkUGFpbnRpbmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsKKwogY2xhc3Mg
Q0NMYXllclRyZWVIb3N0IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NM
YXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkND
TGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91
YmxlIGZyYW1lQmVnaW5UaW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcj4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIC8vIENDTGF5
ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1hdGVBbmRMYXlv
dXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsKKyAgICB2b2lkIHByZUNvbW1pdChDQ0xheWVyVHJl
ZUhvc3RJbXBsKik7IC8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnVwZGF0ZUxheWVycyBpcyBzcGxpdCBhcGFydC4KKyAgICB2b2lkIGNvbW1pdFRvKENDTGF5ZXJU
cmVlSG9zdEltcGwqKTsKKyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3NpdG9y
VGhyZWFkKCk7CisgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4g
Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3ND
b250ZXh0KGJvb2wgc3VjY2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAg
ICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZW5kaWYKIAorICAgIC8vIENDTGF5ZXJUcmVl
SG9zdCBpbnRlcmZhY2UgdG8gV2ViVmlldy4KICAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRp
bmcpIHsgbV9hbmltYXRpbmcgPSBhbmltYXRpbmc7IH0gLy8gQ2FuIGJlIHJlbW92ZWQgd2hlbiBu
b24tdGhyZWFkZWQgc2NoZWR1bGluZyBtb3ZlcyBpbnNpZGUuCiAKICAgICBDQ0xheWVyVHJlZUhv
c3RDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlKCk7CisjZW5kaWYKKwogICAgIEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCk7CiAKLSAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIC8vIENvbXBvc2l0ZXMgYW5k
IGF0dGVtcHRzIHRvIHJlYWQgYmFjayB0aGUgcmVzdWx0IGludG8gdGhlIHByb3ZpZGVkCisgICAg
Ly8gYnVmZmVyLiBJZiBpdCB3YXNuJ3QgcG9zc2libGUsIGUuZy4gZHVlIHRvIGNvbnRleHQgbG9z
dCwgd2lsbCByZXR1cm4KKyAgICAvLyBmYWxzZS4KKyAgICBib29sIGNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBmaW5pc2hBbGxS
ZW5kZXJpbmcoKTsKIApAQCAtMTAxLDYgKzEzMiw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52
YWxpZGF0ZVJvb3RMYXllclJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAorICAgIGNv
bnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KSBjb25zdDsKKyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApA
QCAtMTEwLDYgKzE0NCwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0
aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIAorICAgIC8vIEhvcnJpYmxlIHVn
bHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRl
eHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisj
aWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKICAg
ICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50
U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCiAg
ICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9y
dFNpemU7IH0KQEAgLTExNywyMSArMTU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNp
YmxlKGJvb2wpOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQg
cmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICB2b2lk
IGNvbXBvc2l0ZShib29sIGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4
dCgpOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3Qg
eyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIE5vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1
cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAotICAgIGJvb2wgY29udGV4
dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7
IH0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVT
aXplOyB9Ci0gICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKSB7IHJldHVybiBtX2Jlc3RU
ZXh0dXJlRm9ybWF0OyB9Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXll
clRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYgKzE2Nywx
MyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNy
ZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21lIGZvciB0aGUgbm9u
LXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
Ci0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7
Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKLSAgICBSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0jZW5kaWYKLQotICAgIGludCBt
X21heFRleHR1cmVTaXplOwotICAgIEdDM0RlbnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7Ci0gICAg
Ym9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKLQogICAgIGJvb2wgbV9hbmltYXRpbmc7CiAK
ICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCiAgICAgaW50IG1fZnJhbWVO
dW1iZXI7CiAKLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5Owor
ICAgIE93blB0cjxDQ1Byb3h5PiBtX3Byb3h5OwogCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+
IG1fcm9vdExheWVyOwogICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtMTY3LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAg
Q0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKKyAg
ICBib29sIG1fdmlzaWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmRkNzE0
YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cj4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIENDTGF5ZXJU
cmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRy
ZWVIb3N0SW1wbCogaG9zdEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVt
YmVyKGhvc3QtPmZyYW1lTnVtYmVyKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMx
OGE0YTcxNDIzMmQzMTg0ZDJmZWQ0YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXJfaAotI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0jaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBDQ0xheWVy
VHJlZUhvc3RJbXBsOwotCi0vLyBGSVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2Rl
IGludG8gaGVyZQotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgotICAgIHN0
YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7Ci0gICAg
dmlydHVhbCB+Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLQotcHJv
dGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQotfQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNGUyZDFi
ODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1Mzg2NjlhZS4uNjNhNGViMjgwNWI5MGRkYTgwMjYz
Mjg3OGVlYzRjMzhkMWQ2OGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKQEAgLTM4LDI0ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVy
Q2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVy
ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGlu
Z3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xh
eWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNo
cm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdElt
cGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVy
KC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAg
ICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVy
KQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5n
cykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQog
ewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0
SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJl
Z2luQ29tbWl0KCkKQEAgLTY0LDcxICs2MywxMDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxl
dGUoKQogewotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3
KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGlj
c0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYg
YSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVz
dHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMg
Y3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBp
ZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJS
ZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJh
d1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXll
cigpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVz
ZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0g
ICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2so
Y3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53
YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5k
IHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3Zl
cGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hB
bGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAg
ICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRM
b3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBu
b3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsK
KyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICAr
K21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVl
SG9zdEltcGw6OnByZXNlbnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xh
eWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5w
cmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29t
bWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0
aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2Nv
bW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRP
bkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVh
ZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbGF5ZXJS
ZW5kZXJlci0+Z2V0RnJhbWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc1JlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OnNldFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKLSAg
ICBpZiAobV9yZWRyYXdQZW5kaW5nIHx8IG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJu
OworICAgIG1fcm9vdExheWVySW1wbCA9IGxheWVyOworfQogCi0gICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9yZWRy
YXdQZW5kaW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1Ro
cmVhZCgpOwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJs
ZSkKK3sKKyAgICBpZiAobV9sYXllclJlbmRlcmVyICYmICF2aXNpYmxlKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXItPnJlbGVhc2VUZXh0dXJlcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRp
b24sIGJvb2wqIGNvbnRleHRMb3N0KQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIGltcGxIYWNrLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgLy8gSWYgbV9sYXllclJlbmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3Zlcmlu
ZyBmcm9tIGEgbG9zdCBjb250ZXh0CisgICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xh
eWVyUmVuZGVyZXI7CisKKyAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24K
KyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOworICAgIGlm
ICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAgIGVsc2UK
KyAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1f
bGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisKKworICAgIC8vIElmIGNy
ZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcs
IGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRo
ZSByZW5kZXJlciBhZ2Fpbi4KKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5h
Y2NlbGVyYXRlUGFpbnRpbmcpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBmYWxzZTsKKworICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKKyAgICAgICAg
ICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFj
aywgdGhpcywgY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVy
KCksIHRoaXMsIGNvbnRleHQpOworICAgIH0KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93
bmVyKCktPnJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVy
cygpOwotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKyAgICAvLyBJZiByZWNy
ZWF0aW5nIHJlbmRlcmVyLCB1cGRhdGUgdGhlIGxheWVycyB0byBwb2ludCBhdCB0aGUgbmV3IHJl
bmRlcmVyCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVy
LT5yb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KGxheWVyUmVuZGVyZXIuZ2V0KCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0ID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgICpjb250ZXh0TG9zdCA9
IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRl
eHRMb3N0ID0gZmFsc2U7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgbV9sYXllclJl
bmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOworfQor
CisvLyBGSVhNRTogbW92ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5ZXJUcmVlSG9zdAordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKQoreworICAgIGlmIChtX3Jvb3RMYXll
ckltcGwgJiYgbV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0
ZUxheWVycygpOworfQorCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0KGNv
bnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSkKK3sKKyAgICBib29sIGNoYW5nZWQgPSB2aWV3cG9y
dFNpemUgIT0gbV92aWV3cG9ydFNpemU7CisgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNp
emU7CisgICAgaWYgKGNoYW5nZWQpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRD
aGFuZ2VkKCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRl
eCBjNDExY2NjNzM1NTRmMWRkMzJiY2NlMmUxNWU0OGRiZWNhYzRhODhlLi5kNjhiYjhkNjA3MzM5
MGViZDA4NGU5MTRjYWIwMTkyNjFmYTkwNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCkBAIC0yNSw1NiArMjUsNjkgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1w
bF9oCiAjZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogCi0jaW5jbHVkZSAiY2MvQ0NUaHJl
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKKyNpZiBVU0Uo
U0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OworY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXll
clJlbmRlcmVyQ2hyb21pdW07Ci0KLS8vIFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1
cmUgZm9yIGEgQ0NMYXllclRyZWVIb3N0SW1wbAotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENs
aWVudCAgewotcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkND
VGhyZWFkKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkND
VGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbENsaWVudCgpIHsgfQotfTsKK3N0cnVjdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzOwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIEND
TGF5ZXJJbXBsIHRyZWUgYXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQogY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXll
clRyZWVIb3N0SW1wbCk7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJU
cmVlSG9zdEltcGw+IGNyZWF0ZShjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NM
YXllclRyZWVIb3N0SW1wbCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAg
ICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7CiAKKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOworCiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKKyAgICB2b2lkIGZpbmlz
aEFsbFJlbmRlcmluZygpOwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJhbWVOdW1iZXI7IH0KIAotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLSAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4pOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1
bSogbGF5ZXJSZW5kZXJlcigpIHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorICAg
IGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMoKSBjb25zdDsKKworICAgIHZvaWQgcHJlc2VudCgpOworCisgICAgdm9pZCByZWFkYmFjayh2
b2lkKiBwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290TGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KKyAgICB2b2lkIHNl
dFJvb3RMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CisKKyAgICB2b2lkIHNldFZpc2li
bGUoYm9vbCk7CiAKICAgICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBt
X3NvdXJjZUZyYW1lTnVtYmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQg
ZnJhbWVOdW1iZXIpIHsgbV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKKyAg
ICB2b2lkIHVwZGF0ZUxheWVycygpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRT
aXplJiB2aWV3cG9ydFNpemUpOworICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmlld3BvcnRTaXplOyB9CisKIHByb3RlY3RlZDoKLSAgICBDQ0xheWVy
VHJlZUhvc3RJbXBsKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVy
UmVuZGVyZXJDaHJvbWl1bT4pOwotICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCosIGJvb2wqIGNvbnRleHRMb3N0KTsKKyAgICBleHBsaWNpdCBDQ0xheWVy
VHJlZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51
bWJlcjsKICAgICBpbnQgbV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKLSAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsQ2xpZW50KiBtX2NsaWVudDsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAg
ICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0gICAgYm9v
bCBtX3JlZHJhd1BlbmRpbmc7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllcklt
cGw7CisgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOworICAgIEludFNpemUgbV92aWV3cG9ydFNp
emU7CiB9OwogCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjkyODg1NjQ1OTZkODc4MjY3
NjYxZDNmOTQ2MWViZmI2NjJlOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKLQotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRU
YXNrLmgiCi0jaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL01haW5U
aHJlYWQuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgewotQ0NUaHJlYWQqIGNjVGhyZWFkOwotaW50IG51bVByb3hpZXMgPSAwOwot
fQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShD
Q0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFs
c2UpCi0gICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKLXsKLSAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHki
LCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG51bVByb3hpZXMr
KzsKLSAgICBpZiAoIWNjVGhyZWFkKQotICAgICAgICBjY1RocmVhZCA9IGxheWVyVHJlZUhvc3Qt
PmNsaWVudCgpLT5jcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkubGVha1B0cigpOwotfQotCi0KLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdGFydCgpCi17Ci0gICAgLy8gQ3JlYXRlIExh
eWVyVHJlZUhvc3RJbXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci19Ci0KLUNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eSIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFt
X2xheWVyVHJlZUhvc3RJbXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3Rv
cCgpIGdvdCBjYWxsZWQuCi0KLSAgICBudW1Qcm94aWVzLS07Ci0gICAgaWYgKCFudW1Qcm94aWVz
KSB7Ci0gICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKLSAgICAgICAgY2NUaHJlYWQgPSAwOwotICAg
IH0KLX0KLQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19Ci0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7
Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
LX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKLXsK
LSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVh
dGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNS
ZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpz
dG9wKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9w
IiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBTeW5jaHJv
bm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlv
bjsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgp
OwotCi0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhl
IGltcGwgZGVsZXRlZC4KLSAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwotfQotCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCi17Ci0g
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkK
LSAgICAgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOwotfQotCi12b2lk
IENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVh
ZChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdElt
cGwpCi0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBm
cmFtZUJlZ2luVGltZSkpOwotfQotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmlzTWFpblRocmVhZCgpCi17Ci0gICAgcmV0dXJuIDo6aXNNYWluVGhyZWFk
KCk7Ci19Ci0KLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi1ib29sIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRocmVh
ZCgpID09IGNjVGhyZWFkLT50aHJlYWRJRCgpOwotfQotI2Vsc2UKLW5hbWVzcGFjZSB7Ci1ib29s
IGZha2VJbXBsVGhyZWFkID0gZmFsc2U7Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojppc0ltcGxUaHJlYWQoKQotewotICAgIHJldHVybiBmYWtlSW1wbFRocmVhZDsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkK
LXsKLSAgICBmYWtlSW1wbFRocmVhZCA9IHZhbHVlOwotfQotI2VuZGlmIC8vIFVTRShUSFJFQURF
RF9DT01QT1NJVElORykKLQotI2VuZGlmIC8vICFOREVCVUcKLQotdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9z
dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgewotICAgICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywg
MCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2lu
VGltZSk7Ci0gICAgfQotCi0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3Qt
PmNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmJl
Z2luQ29tbWl0KCk7Ci0KLSAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6cGVyZm9ybUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247
Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKGNvbW1pdHRlci5nZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24p
KSk7Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci0KLSAgICBjb21taXR0ZXIuY2xlYXIoKTsKLQot
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyKiBjb21taXR0ZXIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmJlZ2luQ29tbWl0KCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXll
clRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAgICAgICAgY29tbWl0dGVyLT5jb21taXQo
bV9sYXllclRyZWVIb3N0LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0gICAg
Y29tcGxldGlvbi0+c2lnbmFsKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRD
b21wbGV0ZSgpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVy
c09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09u
Q0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXll
clRyZWVIb3N0SW1wbCk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRB
bmRSZWRyYXcoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRz
UmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJU
KGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPnNldE5lZWRzUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5Ojppbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24p
Ci17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBt
X2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
SW1wbCh0aGlzKTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLX0KLQotdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0g
ICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFy
KCk7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQwMjA3ZTU2MTc2MmFjMWRkZjlkZDg3ODM3OGQ1NDYzNTZjNzg3YmEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIC9kZXYv
bnVsbApAQCAtMSw5MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJUcmVl
SG9zdEltcGxQcm94eV9oCi0jZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0KLSNp
bmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQ0NMYXllclRyZWVIb3N0OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0
dGVyOwotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5KTsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkoKTsKLQotICAgIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwotCi0gICAg
dm9pZCBzdGFydCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5Lgot
ICAgIHZvaWQgc3RvcCgpOyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHBy
b3h5LgotCi0gICAgLy8gQ0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1Ro
cmVhZAotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZy
YW1lQmVnaW5UaW1lKTsKLQotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBpc01haW5U
aHJlYWQoKTsKLSAgICBzdGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZha2UgdGhyZWFkZWQgY29tcG9zaXRpbmcgc28gd2Ug
Y2FuIGNhdGNoIGluY29ycmVjdCB1c2FnZS4KLSAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFk
KGJvb2wpOwotI2VuZGlmCi0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7
Ci0gICAgQ0NMYXllclRyZWVIb3N0KiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVI
b3N0OyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAotICAgIHZv
aWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAv
LyBDYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyKiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGRyYXdMYXll
cnNPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9u
RXZlbnQqKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwot
ICAgIHZvaWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBsYXllclRyZWVI
b3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotCi0gICAgLy8gVXNlZCBv
biBtYWluLXRocmVhZCBvbmx5LgotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCi0gICAgLy8g
QWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4KLSAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5
ZXJUcmVlSG9zdDsKLQotICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBv
biBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCi0gICAgT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19OwotCi19Ci0KLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCmluZGV4IGZhYzZlNjQzZjA1YTE4YmJi
YWFkNTdiMjliYmMwM2E2MjgwZWFjOGEuLjRjMzNiYWEwN2FkZDM1NzczOWRkYjUxNzYxZTg0N2I3
NGU1MWMzMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTE1OCw2ICsxNTgs
ODggQEAgcHJpdmF0ZToKICAgICBQMyBtX3BhcmFtZXRlcjM7CiB9OwogCisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBN
UDQ+CitjbGFzcyBNYWluVGhyZWFkVGFzazQgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCk7CisgICAgdHlwZWRlZiBNYWluVGhyZWFkVGFzazQ8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMs
IE1QMywgUDQsIE1QND4gTWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Cisg
ICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUg
UGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6
UGFyYW1UeXBlIFBhcmFtNDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNr
SW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVy
NCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBs
KGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBh
cmFtZXRlcjQpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s0KFQqIGlu
c3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRl
cjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICAgICAgOiBDQ01h
aW5UaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihw
YXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAs
IG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFu
Y2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIz
LCBtX3BhcmFtZXRlcjQpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7
CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3Bh
cmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwg
dHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlw
ZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNSA6IHB1YmxpYyBD
Q01haW5UaHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhv
ZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s1
PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IE1haW5UaHJl
YWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
MT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFy
YW01OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUo
VCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFy
YW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFy
YW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRh
c2tJbXBsKGluc3RhbmNlLCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRl
cjMsIHBhcmFtZXRlcjQsIHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFp
blRocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVy
MSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVy
NCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1l
dGVyNCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGlj
X2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRl
cjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAg
IFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0
ZXI0OworICAgIFA1IG1fcGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQ
YXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAg
VCogY29uc3QgY2FsbGVlLApAQCAtMjE1LDYgKzI5Nyw0NiBAQCBQYXNzT3duUHRyPENDTWFpblRo
cmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVu
YW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitQYXNzT3du
UHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29u
c3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAg
Y29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQpCit7CisgICAg
cmV0dXJuIE1haW5UaHJlYWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQND46OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAg
ICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0
ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAor
ICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAg
IENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8Q0NNYWluVGhy
ZWFkOjpUYXNrPiBjcmVhdGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisg
ICAgdm9pZCAoVDo6Km1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAorICAgIGNvbnN0
IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAz
JiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNvbnN0IFA1JiBw
YXJhbWV0ZXI1KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1Q
MywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENy
b3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUs
CisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBh
cmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVy
MiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIENDTWFpblRocmVhZFRhc2tfaAorI2VuZGlmIC8v
IE1haW5UaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRl
eCA2M2VkY2YwZDY3YTY4NGY1ZGJlMGExMmQ1ZDlkMjYyYTBiMTRhYzIzLi5hOWY0NTBlZDQ4MjQ1
ZDgxYjBjNDMwNzJjYTM5MzcxMmQwZGQzNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXll
ckltcGwuY3BwCkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0ND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgs
NyArNDgsNyBAQCBDQ1BsdWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKIAogdm9p
ZCBDQ1BsdWdpbkxheWVySW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CiAgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NQbHVn
aW5MYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxh
eWVyUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVk
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1Byb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjFhMmU1M2VkMjMwZjk2N2VlMWQ4NWRk
MDgzY2JhY2Y5YzI2NzE4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5o
IgorCisjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitib29sIEND
UHJveHk6OmlzTWFpblRocmVhZCgpCit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9
CisKK25hbWVzcGFjZSB7Citib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7CitzdGF0aWMgV1RG
OjpUaHJlYWRJZGVudGlmaWVyIGltcGxUaHJlYWRJRDsKK30KKworYm9vbCBDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKQoreworICAgIHJldHVybiBmYWtlSW1wbFRocmVhZCB8fCBjdXJyZW50VGhyZWFk
KCkgPT0gaW1wbFRocmVhZElEOworfQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoYm9v
bCBpc0ltcGxUaHJlYWQpCit7CisgICAgZmFrZUltcGxUaHJlYWQgPSBpc0ltcGxUaHJlYWQ7Cit9
CisKK3ZvaWQgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIgaWQp
Cit7CisgICAgaW1wbFRocmVhZElEID0gaWQ7Cit9CisKKyNlbmRpZiAvLyAhTkRFQlVHCisKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDVkMmNkYWMwYTlmOTNhMTg5ZjRhMTAzNzJlZDA3ZDVh
YTg4YmViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDUHJveHlfaAorI2RlZmluZSBDQ1Byb3h5X2gKKworI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ1RocmVhZDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9z
dDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllczsKK2NsYXNzIFRleHR1cmVNYW5hZ2VyOworCisvLyBBYnN0cmFjdCBjbGFzcyBy
ZXNwb25zaWJsZSBmb3IgcHJveHlpbmcgY29tbWFuZHMgZnJvbSB0aGUgbWFpbi10aHJlYWQgc2lk
ZSBvZgorLy8gdGhlIGNvbXBvc2l0b3Igb3ZlciB0byB0aGUgY29tcG9zaXRvciBpbXBsZW1lbnRh
dGlvbi4KK2NsYXNzIENDUHJveHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJveHkp
OworcHVibGljOgorICAgIHZpcnR1YWwgfkNDUHJveHkoKSB7IH0KKworICAgIHZpcnR1YWwgYm9v
bCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCkgPSAwOworCisgICAgdmly
dHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworCisg
ICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0g
MDsKKworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIHVzaW5nIHRoZSBwcm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKworICAgIC8vIERlYnVnIGhv
b2tzCisjaWZuZGVmIE5ERUJVRworICAgIHN0YXRpYyBib29sIGlzTWFpblRocmVhZCgpOworICAg
IHN0YXRpYyBib29sIGlzSW1wbFRocmVhZCgpOworI2VuZGlmCisKKyAgICAvLyBUZXN0aW5nIGhv
b2tzCisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAg
IC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0
IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92
ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFD
b250ZXh0KCkgPSAwOworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5k
ZXJfd2lkZ2V0IHN0aWxsIGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRo
cmVhZEkKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOworCisg
ICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2Vz
IHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bXMKKyAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBj
b250ZW50c1RleHR1cmVNYW5hZ2VyKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQ0NQcm94eSgp
IHsgfQorICAgIGZyaWVuZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOworI2lmbmRlZiBOREVC
VUcKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOworICAgIHN0YXRpYyB2b2lk
IHNldEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyKTsKKyNlbmRpZgorfTsKKworfQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNThmNTE3MjE0MmFiOTJhY2ZmODFhZTE2N2M1NTQ5YmZlZWUyYTY2YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7CitwdWJsaWM6CisgICAgU2Nv
cGVkU2V0SW1wbFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94
eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1w
bFRocmVhZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1w
bFRocmVhZChmYWxzZSk7CisjZW5kaWYKKyAgICB9Cit9OworCitQYXNzT3duUHRyPENDUHJveHk+
IENDU2luZ2xlVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhv
c3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1NpbmdsZVRocmVhZFByb3h5KGxheWVy
VHJlZUhvc3QpKTsKK30KKworQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94
eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBtX2xheWVyVHJlZUhvc3Qo
bGF5ZXJUcmVlSG9zdCkKKyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVj
cmVhdGluZ0dyYXBoaWNzQ29udGV4dChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5n
bGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQo
KQoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworfQorCitD
Q1NpbmdsZVRocmVhZFByb3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywg
MCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVl
SG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNh
bGxlZC4KK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFj
ayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgaWYgKCFkb0Nv
bXBvc2l0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5yZWFkYmFjayhwaXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250
ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxU
aHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOwor
fQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jv
b2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCiti
b29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJU
cmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250
ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXll
clJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2Fw
YWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsK
K30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQor
eworICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NT
aW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0
dXJuOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclRyZWVIb3N0
LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworI2Vsc2UKKyAgICAvLyBTaW5nbGUgdGhyZWFkZWQgb25s
eSB3b3JrcyB3aXRoIFRIUkVBREVEX0NPTVBPU0lUSU5HLgorICAgIENSQVNIKCk7CisjZW5kaWYK
K30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAg
Ly8gRklYTUU6IE9uY2Ugd2UgbW92ZSByZW5kZXJfd2lkZ2V0IHNjaGVkdWxpbmcgaW50byB0aGlz
IGNsYXNzLCB3ZSBjYW4KKyAgICAvLyB0cmVhdCByZWRyYXcgcmVxdWVzdHMgbW9yZSBlZmZpY2ll
bnRseSB0aGFuIGNvbW1pdEFuZFJlZHJhdyByZXF1ZXN0cy4KKyAgICBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIH0KKyAg
ICBtX2xheWVyVHJlZUhvc3QgPSAwOworfQorCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIEND
U2luZ2xlVGhyZWFkUHJveHk6OnNraWFDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRy
ZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpOworfQorI2VuZGlmCisK
K1RleHR1cmVNYW5hZ2VyKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5h
Z2VyKCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigp
LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7Cit9CisKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBP
U0lUSU5HKQorLy8gQ2FsbGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdo
ZXJlIHJlbmRlcl93aWRnZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKK3ZvaWQgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkoKQoreworICAgIC8vIENvbXBvc2l0ZUlmTmVl
ZGVkIHdpbGwgbm90IG9jY3VyIGlmICFtX2NvbW1pdFBlbmRpbmcuIFNvLCBzZXQgdGhlIGJpdCBz
bworICAgIC8vIGl0IHN1Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdvIGF3YXkgb25jZSB0aGUgcHJv
eGllcyBhc3N1bWUgZnVsbAorICAgIC8vIHNjaGVkdWxpbmcgcmVzcG9uc2liaWxpdHkuCisgICAg
bV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Cit9Cisj
ZW5kaWYKKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCgpCit7
CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykgeworICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAg
ZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKworICAgICAgICAvLyBQ
cmVjb21taXQgaXMgYSB0ZW1wb3Jhcnkgc3RlcCB3ZSBuZWVkIHRvIHBlcmZvcm0gdG8gcHVzaCB0
aGluZ3MgbGlrZQorICAgICAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJ
bXBsLCBiZWNhdXNlCisgICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMo
KSBpc24ndCBzcGxpdCBpbnRvIGhvc3QgYW5kIGltcGwgcGFydHMuCisgICAgICAgIHsKKyAgICAg
ICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+cHJlQ29tbWl0KG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlY29tZSBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cygpIG9uY2Ugd2Ugc3BsaXQgYXBhcnQKKyAgICAgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVw
ZGF0ZUxheWVycy4KKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7
CisKKyAgICAgICAgLy8gQ29tbWl0CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29t
bWl0KCk7CisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVl
SG9zdEltcGwuZ2V0KCkpOworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0
Q29tcGxldGUoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIERyYXcKKyAgICAgICAgaWYgKGRv
Q29tcG9zaXRlKCkpCisgICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7
CisgICAgfQorfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKCkKK3sK
KyAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJU
cmVlSG9zdENvbnRleHQzRCgpOworICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkp
OworICAgICAgICBib29sIG9rID0gIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXll
clJlbmRlcmVyKDAsIGNvbnRleHQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250
ZXh0ID0gZmFsc2U7CisgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CisgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgICAgLy8g
VHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlm
IEdQVSBwcm9jZXNzCisgICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5u
ZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgICAvLyBjYWxsZWQg
YXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIK
KyAgICAgICAgICAvLyByZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2gg
dGhlIHJvb3QgbGF5ZXIgZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUg
dGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KKyAgICAgICAg
ICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICAgIG1fcmVjcmVh
dGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYzRlODNhYTM4NzQ2MzYyZDYyOGUyZGY3ZWIyNWU5NGU3NzZmNmIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisg
KiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQ0NTaW5nbGVUaHJlYWRQcm94eV9oCisjZGVmaW5lIENDU2luZ2xlVGhyZWFkUHJv
eHlfaAorCisjaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3Q7CisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVl
SG9zdCopOworICAgIHZpcnR1YWwgfkNDU2luZ2xlVGhyZWFkUHJveHkoKTsKKworICAgIC8vIEND
UHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29s
IGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAg
ICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250
ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0
byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAv
LyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNL
SUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAg
IC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0
byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29u
dGVudHNUZXh0dXJlTWFuYWdlcigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4K
KyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlSW1tZWRp
YXRlbHkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFk
UHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisgICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOwor
ICAgIGJvb2wgZG9Db21wb3NpdGUoKTsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFk
IG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBV
c2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGlu
aXRpYWxpemF0aW9uL3NodXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBt
X2xheWVyVHJlZUhvc3RJbXBsOworCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgYm9v
bCBtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZDBmYmVlNDFmZmFmOTY1Yzg5YzU3MzRl
NGM3MjRhN2U3ZTRhMmNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTAsMCArMSwyODMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0ND
VGhyZWFkUHJveHkuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVk
ZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1
ZGUgImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIK
KyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7Citp
bnQgbnVtUHJveGllcyA9IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NQcm94eT4gQ0NUaHJlYWRQcm94
eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDVGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1RocmVh
ZFByb3h5OjpDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAg
ICA6IG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRy
ZWVIb3N0KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5
IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVz
Kys7CisgICAgaWYgKCFjY1RocmVhZCkgeworICAgICAgICBjY1RocmVhZCA9IG1fbGF5ZXJUcmVl
SG9zdC0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKKyNpZm5kZWYgTkRFQlVH
CisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOwor
I2VuZGlmCisgICAgfQorfQorCitDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSgpCit7Cisg
ICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9z
dEltcGwpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisgICAgQVNTRVJUKCFtX2xh
eWVyVHJlZUhvc3QpOyAvLyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Q
cm94aWVzLS07CisgICAgaWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVh
ZDsKKyAgICAgICAgY2NUaHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ1RocmVhZFByb3h5
Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitH
cmFwaGljc0NvbnRleHQzRCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6
ZmluaXNoQWxsUmVuZGVyaW5nKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
Ym9vbCBDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xh
eWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXll
clJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVl
SG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBMZWFrIHRoZSBj
b250ZXh0IHBvaW50ZXIgc28gd2UgY2FuIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBpdCB0byB0aGUg
b3RoZXIgc2lkZS4uLgorICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyID0gY29udGV4
dC5yZWxlYXNlKCkubGVha1JlZigpOworICAgIEFTU0VSVChjb250ZXh0UHRyLT5oYXNPbmVSZWYo
KSk7CisKKyAgICAvLyBNYWtlIGEgYmxvY2tpbmcgY2FsbCB0byBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQuIFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbAorICAgIC8vIGFyZSBwdXNo
ZWQgaW50byB0aGUgaW5pdGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZh
cmlhYmxlcy4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgaW5p
dGlhbGl6ZVN1Y2NlZWRlZDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxp
dGllczsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KG93bmVySGFjayksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KCZjb21wbGV0aW9uKSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRl
ZCksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNhcGFiaWxpdGllcykpKTsKKyAgICBjb21wbGV0
aW9uLndhaXQoKTsKKworICAgIGlmIChpbml0aWFsaXplU3VjY2VlZGVkKQorICAgICAgICBtX2xh
eWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGllczsKKyAg
ICByZXR1cm4gaW5pdGlhbGl6ZVN1Y2NlZWRlZDsKK30KKworY29uc3QgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyYgQ0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRD
b3B5OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7Cisg
ICAgbV9jb21taXRQZW5kaW5nID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRl
Q0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09u
Q0NUaHJlYWQpKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgLy8g
Q3JlYXRlIExheWVyVHJlZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb21wbGV0aW9uKSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCit2b2lkIEND
VGhyZWFkUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpz
dG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5j
aHJvbm91c2x5IGRlbGV0ZXMgdGhlIGltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxl
dGlvbjsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZD
Q1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1Ro
cmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAg
IEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRl
bGV0ZWQuCisgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKK30KKworI2lmIFVTRShTS0lBKQorR3JD
b250ZXh0KiBDQ1RocmVhZFByb3h5Ojpza2lhQ29udGV4dCgpCit7CisgICAgLy8gTm90IHN1cHBv
cnRlZCBvbiB0aGUgaW1wbCB0aHJlYWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
Q1JBU0goKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitUZXh0dXJlTWFuYWdlciogQ0NU
aHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdlcigpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5G
cmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gRklY
TUU6IGNhbGwgYmVnaW5GcmFtZUFuZENvbW1pdCBvbiBtYWluIHRocmVhZAorfQorCit2b2lkIEND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3Qp
CisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpyZXF1
ZXN0RnJhbWVBbmRDb21taXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9
CisKKyAgICBtX2NvbW1pdFBlbmRpbmcgPSBmYWxzZTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwg
dG8gQ0NUaHJlYWRQcm94eTo6cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNv
bXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlz
LCAmQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9u
KQoreworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhv
c3RJbXBsLT5iZWdpbkNvbW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tbWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRp
b24tPnNpZ25hbCgpOworCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUo
KTsKKyAgICBzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ1RocmVhZFBy
b3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFk
UHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKKyAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+ZHJhd0xheWVycygpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkND
VGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDAp
OworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9z
dEltcGwpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJv
eHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhy
ZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBs
T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0g
bV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRp
b24tPnNpZ25hbCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJl
bmRlcmVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHRQdHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBp
bml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRp
ZXMpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJl
bmRlcmVyT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KGFkb3B0UmVmKGNvbnRleHRQ
dHIpKTsKKyAgICAqaW5pdGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlu
aXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgaWYgKCppbml0
aWFsaXplU3VjY2VlZGVkKQorICAgICAgICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVIb3N0
SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOworICAgIGNvbXBsZXRpb24tPnNpZ25h
bCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVh
cigpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmI2YzQ0OGIwY2VhZTdlYmJkNDY4MjY0OWFhNzkyMDVkNGFjNTEx
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
ICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIENDVGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ1RocmVhZFByb3h5X2gKKworI2lu
Y2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitj
bGFzcyBDQ1RocmVhZFByb3h5IDogcHVibGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKworICAgIHZp
cnR1YWwgfkNDVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50YXRpb24K
KyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRl
cmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRz
UmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0
b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVk
IGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFp
bnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNv
bnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdo
aWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21p
dW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigp
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0
Kik7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NNYWluVGhyZWFkCisgICAgdm9pZCBiZWdpbkZyYW1l
QW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NU
aHJlYWQKKyAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgdm9p
ZCBjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZCgpOworICAgIHZvaWQgaW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29t
cGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJl
YWQoQ0NMYXllclRyZWVIb3N0KiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ0NvbXBsZXRpb25FdmVu
dCosIGJvb2wqIGluaXRpYWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMq
KTsKKyAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZv
aWQgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xv
c2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBtYWlu
LXRocmVhZCBvbmx5LgorICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNjZXNz
ZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVl
SG9zdDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllc01haW5UaHJlYWRDb3B5OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1
dCBjaGVja2VkIG9uIG1haW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4K
KyAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKK307
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDkxYzU4ZTVkMjViN2Ji
Mjg2ZTIxNmM0ZTA2OGNiZTEwOTU3OGYxODMuLmQ4ZGU0YWIwMzQ2OTg4NzY5ZmJlMjY3NGZkMzIz
NjEwYzQ1ZDcyMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0xOTgsNiArMTk4LDQ4IEBA
IHByaXZhdGU6CiAgICAgUDQgbV9wYXJhbWV0ZXI0OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwg
dHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlw
ZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KK2NsYXNzIENDVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NU
aHJlYWQ6OlRhc2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAx
LCBNUDIsIE1QMywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrNTxULCBQMSwg
TVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDQ1RocmVhZFRhc2tJbXBs
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1U
eXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
Mj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7CisKKyAg
ICBzdGF0aWMgUGFzc093blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2Us
IE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFy
YW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5j
ZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0
LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhyZWFkVGFzazUoVCog
aW5zdGFuY2UsIE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1l
dGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1l
dGVyNSkKKyAgICAgICAgOiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9w
YXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgp
KS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1f
cGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9k
IG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cisg
ICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFt
ZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ1RocmVhZDo6
VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTI3NCw2
ICszMTYsMjcgQEAgUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNr
KAogCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEs
IHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5
cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNz
T3duUHRyPENDVGhyZWFkOjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAgVCogY29uc3Qg
Y2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwK
KyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAg
ICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBj
b25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNTxULCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6
VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVhdGUoCisgICAgICAg
IGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46
OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShw
YXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRl
cjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSk7CisKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ0NUaHJlYWRUYXNrX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggYmYyM2JkZWZkOWYzZjVjYjgxMTg2NDgw
ZGZmODFjMzcyNjkxOTllMi4uNWY1YjI1NjQzYThiZjg0ZGMwZTZhNGY1ODFjZDBkYzYzNDQyMTI3
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAK
IAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCA0YTU1YmNhMGEzNjdkNzBmMzg3NGM2MDgzZDUz
NjNiNWM2NGQ2YmYxLi45ZmYxZmNjYzk3MTZjMTI0MmZlMzVmZTY5MGEyYTgwMjE2MGQyZjA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc5LDcgKzc5
LDcgQEAgdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlSWQsIGNvbnMKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpk
cmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJl
YWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIGlmICht
X3NraXBzRHJhdykKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAwNDZmYjEzYzliNzhmODBjYjljZmEyYWMxYTYwMDA1NjcyM2Y1ODdjLi44MzgwMWQ1NWNjZTg0
ZjQ2ZDA1YmMxYzljNjg3Nzg5MmY5NGUwNTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE4IEBACisyMDExLTA4LTI5ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVjZSBDQ0xheWVyVHJlZUhvc3RJbXBsTWFp
blRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJl
ZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNv
bXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NM
YXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZGlkUmVjcmVh
dGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDgtMjcgIFBldGVyIEJldmVybG9v
ICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFRlYWNoIHRoZSB1cGRhdGUgYW5kIGJ1
aWxkIHNjcmlwdHMgaG93IHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0
NDhiZDE0NWU5YWJlYWU0Li5iZjc0ZDczOTdmNmUyYzljOTIyNGUwMTVkZGY4ZTMwMDE2ODczODgx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTUw
LDcgKzExNTAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXct
PmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29t
cG9zaXRlKGJvb2wgZmluaXNoKQordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB7
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0
ZShib29sIGZpbmlzaCkKICAgICBpZiAobV9wYWdlT3ZlcmxheSkKICAgICAgICAgbV9wYWdlT3Zl
cmxheS0+dXBkYXRlKCk7CiAKLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZShmaW5pc2gp
OworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7CiAjZW5kaWYKICNlbmRpZgogfQpA
QCAtMjUxNyw5ICsyNTE3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5
ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9v
dExheWVyKGxheWVyKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUpCi0gICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKLSAg
ICBlbHNlCisgICAgaWYgKCFtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAg
ICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIApAQCAtMjYx
MCw2ICsyNjA4LDExIEBAIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1Nl
dHRpbmdzOwogICAgICAgICBjY1NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+
c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpOwogICAgICAgICBjY1NldHRp
bmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRpbmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVu
YWJsZWQoKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgICAgIGNjU2V0dGlu
Z3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IHRydWU7CisjZWxzZQorICAgICAgICBjY1NldHRp
bmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBmYWxzZTsKKyNlbmRpZgogICAgICAgICBjY1Nl
dHRpbmdzLnNob3dGUFNDb3VudGVyID0gc2V0dGluZ3MoKS0+c2hvd0ZQU0NvdW50ZXIoKTsKICAg
ICAgICAgY2NTZXR0aW5ncy5zaG93UGxhdGZvcm1MYXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93
UGxhdGZvcm1MYXllclRyZWUoKTsKIApAQCAtMjY1OSwxMCArMjY2MiwxNSBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIAogdm9pZCBX
ZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewot
ICAgIC8vIEZvcmNlIFZpZXdIb3N0TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGlu
ZyB0byBiZSBzZW50IHNvCi0gICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFj
cXVpcmUgc3VyZmFjZXMuCi0gICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBm
YWxzZTsKKyAgICAvLyBGb3JjZSB0aGUgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUg
dG8gdGhlIG9wcG9zaXRlIG9mIHRoZQorICAgIC8vIGludGVuZGVkIHZhbHVlIHRvIHNob3J0LWNp
cmN1aXQgaXRzICJJJ20gYWxyZWFkeSBpbiB0aGlzIG1vZGUiIGxvZ2ljLgorICAgIG1faXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gIXN1Y2Nlc3M7CisKICAgICBzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoc3VjY2Vzcyk7CisKKyAgICAvLyBTd2l0Y2ggYmFjayB0byBz
b2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwgaWYgbmVjZXNzYXJ5CisgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllcigwKTsKICAgICBpZiAoc3VjY2VzcyAmJiBtX3Bh
Z2VPdmVybGF5KQogICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCmluZGV4IDFj
NWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5NjNiNTc3YzIuLmQ5OTQzZTcxM2EyMGE0ZDdi
MDkwNDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApAQCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAg
ICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQoaW50IGExLCBpbnQgYTIpKTsKICAgICBNT0NL
X01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzKSk7CiAgICAgTU9D
S19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7
CisgICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMywg
aW50IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVN
ZXRob2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRFU1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFi
bGVNZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEp
OwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDMoOSwgOCwgNykpLlRpbWVzKDEpOwogICAg
IEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwgOCwgNywgNikpLlRpbWVzKDEpOworICAgIEVY
UEVDVF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwgNywgNiwgNSkpLlRpbWVzKDEpOwogCiAgICAg
Y3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMCktPnBlcmZvcm1UYXNrKCk7
CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMSwgOSktPnBlcmZv
cm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMiwg
OSwgOCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9j
azo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRU
YXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwgOCwgNywgNiktPnBlcmZvcm1UYXNrKCk7Cisg
ICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNSwgOSwgOCwgNywgNiwg
NSktPnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105537</attachid>
            <date>2011-08-29 16:09:02 -0700</date>
            <delta_ts>2011-08-29 23:46:05 -0700</delta_ts>
            <desc>Edit changelog for nit</desc>
            <filename>bug-66807-20110829160901.patch</filename>
            <type>text/plain</type>
            <size>121249</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMmFkMDIwMGZjNGY1ZWJj
NDA0MTJkNmM5MTgzOTg4NjZhM2E0ZGJjLi4xNjZlYjBkOGZkMTM2MzZkNjA0NmM2OTAzOGI5MWRl
YWRmNzE2NzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBD
Q0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5M
YXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250
ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVhZFRhc2s0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRo
cmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVh
ZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYWluVGhyZWFk
VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5Ojppc0ltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFNldElt
cGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
U2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRv
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNr
NTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgor
CiAyMDExLTA4LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogPGJ1dHRvbiBoaWRkZW4+Li48L2J1dHRvbj4gaGFzIGEg
ZGlmZmVyZW50IGNvbXB1dGVkICJkaXNwbGF5IiB2YWx1ZSB0aGFuICJub25lIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGMwNmNlNGI2MzJlYjUyZTJlYjYxNDUzMWJiNmZiOGY1MDM2Nzg2NTAuLmNkY2Y1
OWVlOTcxNGU2MmM5MjE5NWNlYmJlZGYyOTliYTk1YWY5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1MzUsMjAgKzM1MzUsMjIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHku
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggNTljMmNjYTFkOTJjZDNhZWY2M2E0NzAxZTA1YmQxZmJhYWNiODRlNy4uZGI1ZTAzNDZm
NmI3NTJjZmNjYjViNGU0YzY5NTNlNWI3ZDQ5MGIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcApAQCAtMTIwLDE2ICsxMjAsMTggQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewotI2lm
ICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCisgICAgLy8gTm90ZSB0
aGF0IGhvc3QtPnNraWFDb250ZXh0KCkgd2lsbCBjcmFzaCBpZiBjYWxsZWQgd2hpbGUgaW4gdGhy
ZWFkZWQKKyAgICAvLyBtb2RlLiBUaGlzIHRodXMgZGVwZW5kcyBvbiBDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemUgdHVybmluZyBvZmYKKyAgICAvLyBhY2NlbGVyYXRlUGFpbnRpbmcgdG8gcHJl
dmVudCB0aGlzIGZyb20gY3Jhc2hpbmcuCiAgICAgaWYgKGhvc3QtPnNldHRpbmdzKCkuYWNjZWxl
cmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3du
ZXIpLCBob3N0LT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkpOworICAgICAgICBHckNv
bnRleHQqIGNvbnRleHQgPSBjb25zdF9jYXN0PENDTGF5ZXJUcmVlSG9zdCo+KGhvc3QpLT5za2lh
Q29udGV4dCgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwg
Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gU0tJQQotI2VuZGlm
IC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCi0gICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVV
cGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBh
aW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhlYzU3ODE5ZDJjYzViYy4uNzFiYzBiNmI5ZGI2
NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdz
Q29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgbV90ZXh0dXJlVXBk
YXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmNvbnRleHRTdXBw
b3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1hZ2VMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFw
U3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA5NTYzZWFhNTdmNTY3M2M4
NTk5ZDRkYmFhYzg4YjkyZDljNDk0MzQ4Li5lZWVhYmIyMTBhYTFiMzI1ODljNjcxYjhjMzcxMTE0
NDkyYjAzMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtOTYsNiArOTYsMTkgQEAgdm9p
ZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKIH0KIAordm9pZCBMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
cmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KHJlbmRlcmVyKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCkt
PnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
cmVuZGVyZXIpOworCisgICAgc2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJlcik7Cit9CisKIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJl
bmRlcmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVu
IHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXgg
NThlZDFiMDQwOTZkYWMzZTFiZjZlNzc5NmFmNTkwNmI4Mzg4Y2M4NS4uZmUyZTRjNzEzNzNiZTUy
NWQ1OGM2M2I3Y2UwYTgxZWE4ZTFlNWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTUzLDYg
KzE1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUm9vdExheWVyKGJvb2wgaXNSb290TGF5
ZXIpIHsgbV9pc1Jvb3RMYXllciA9IGlzUm9vdExheWVyOyB9CiAgICAgYm9vbCBpc1Jvb3RMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1faXNSb290TGF5ZXI7IH0KIAorICAgIHZvaWQgc2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKwogICAgIC8vIERlcml2
ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3Qg
dG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtLgogICAgIC8v
IEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVIb3N0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNzBhMDVkY2EwOTAxMGE2Y2I1OWZjZjViMWRhZTMxMDJk
OGY2ZGRmZC4uMGIyY2YzNzM1NzhiZDcxOTExNjc4Y2FkOWRkNzA0ZGNiNzRmMjhmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtNDQ5
LDEzICs0NTAsMTMgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1w
bCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsKICNpZiBVU0UoU0tJ
QSkKICAgICBpZiAob3duZXItPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFjb250
ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4
dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4
dCkpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTQ2Myw4ICs0NjQsMTAgQEAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCoKIH0K
IAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRy
ZWVIb3N0KiBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1wbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9vd25lckltcGwob3duZXJJbXBs
KQogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFt
ZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTQ4MywxNCArNDg2LDE4
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICAgICAgLy8g
TGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+
dGV4dHVyZSBjYWNoZS4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2Fj
aGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CiAgICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRl
eHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0
ZXMpOworICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcgPSB0
cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwotICAg
IGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ01h
cFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CisgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAKKyAgICBtX2NhcGFiaWxpdGllcy5t
YXhUZXh0dXJlU2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgbV9jYXBhYmlsaXRpZXMuYmVz
dFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRl
eHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxNCwxMSArNTIxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xh
eWVySW1wCiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290Q0NMYXllckltcGwpCi0gICAg
ICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKG1fcm9vdENDTGF5
ZXJJbXBsLmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOworICAgIGlmIChy
b290TGF5ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBs
UmVjdXJzaXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU5LDYgKzU2NSw5IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAoIXJvb3RMYXllckltcGwoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NjcsMTMgKzU3Niw2IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIC8vIFJlbmRlcldpZGdldC4KICAg
ICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7CiAKLSAgICAv
LyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29t
ZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBh
aW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIXJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fcm9vdEND
TGF5ZXJJbXBsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB1cGRhdGVM
YXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAKQEAgLTU4MiwxMiArNTg0
LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIGlmICgh
cm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwot
ICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0
KCkpOwotICAgIH0KLQotCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1l
bW9yeUxpbWl0Qnl0ZXModGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzIC0gbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CiAgICAgZHJhd0xheWVyc0lu
dGVybmFsKCk7CiAKQEAgLTczMiw3ICs3MjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290Q0NMYXllckltcGwuZ2V0KCk7CisgICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSByb290TGF5ZXJJbXBsKCk7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSkKQEAgLTg0MCwyMCArODM2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNl
bnQoKQogICAgIG1faGVhZHNVcERpc3BsYXktPm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNo
aWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShj
aGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAg
ICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYg
KGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2
ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIo
dGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBp
eGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJl
Y3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhl
aWdodCgpKTsKQEAgLTk0OCw3ICs5MzAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIAogTWFuYWdl
ZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJl
KCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290
Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
ICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
b3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCkBAIC0xMjk5LDcgKzEyODEsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRz
LCBpbnQgaW5kZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVu
dCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9jb250ZXh0LmdldCgpLT5n
ZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCAyZDgwNDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3NWZkLi40MzA1OTAzMWE0
Yjg1NGE3MWMwOWZlZGIyMjIxZjUxZDZlYWExMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3Bs
YXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1w
bC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBs
OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
OyAvLyBGSVhNRTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CkBAIC03MiwxMSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8g
Q2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVz
aW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxl
ZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0
CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVt
KCk7CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXItPnNldHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCiAgICAg
Q0NMYXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBjb25zdCBD
Q0xheWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQpAQCAtODQs
MTQgKzg5LDE3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJv
b3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKKyAgICBD
Q0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5
ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29sIGNvbnRleHRTdXBwb3J0
c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAK
ICNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgeyByZXR1cm4gbV9z
a2lhQ29udGV4dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsgfQorICAgIGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUo
KTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lk
dGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgp
LmhlaWdodCgpOyB9CiAKQEAgLTE0MiwyNCArMTUwLDE3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBj
b21wb3NpdG9yIGNvbnRleHQgaGFzIGFuIGVycm9yLgotICAgIGJvb2wgaXNDb21wb3NpdG9yQ29u
dGV4dExvc3QoKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIHZvaWQgcmVsZWFz
ZVRleHR1cmVzKCk7CiAKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSopOwotCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAogICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKLSAgICB2b2lk
IGNsZWFyUm9vdENDTGF5ZXJJbXBsKCk7CiBwcml2YXRlOgotICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFz
cyBleGlzdHMuCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKLQot
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVl
SG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
Pik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXll
ckNocm9taXVtKik7CkBAIC0xOTIsOSArMTkzLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNs
ZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAK
LSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgIC8v
IEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCiAgICAgQ0NMYXllclRyZWVIb3N0
KiBtX293bmVyOwogCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7CisKKyAg
ICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fd2luZG93TWF0cml4OwogCkBAIC0yMzQsOCArMjM5LDYgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8R3JDb250ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29u
dGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCmluZGV4IDI2Y2U4YjVkOTE5N2JhMzY4Njk0
MjllNmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3YmMxZWMzZmU4Nzk5ZWYxOWE3MWExMzgwZjRiMmQ0
M2EwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKQEAgLTgw
LDcgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1Yklt
YWdlOwogfTsKIAotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEp
CiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFNrQ2FudmFzPiBtX2NhbnZhczsgLy8gR1BVIGFjY2VsZXJhdGVkIGNhbnZhcy4KIH07CiAjZW5k
aWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUz
YmZmNjE5MWJiYWQ5ZTJjMy4uYTc5ZWExMmM0ZDc0YzE5MWVjNGQ2MDdlYmZkNDhhZDVlMzdkZjgz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0
KiBob3N0KQogCiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoaG9zdCk7CiAKLSAgICBtX3RleHR1
cmVGb3JtYXQgPSBob3N0LT5iZXN0VGV4dHVyZUZvcm1hdCgpOworICAgIG1fdGV4dHVyZUZvcm1h
dCA9IGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsK
ICAgICBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9u
KCk7CiAgICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVk
VGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGlu
Z0RhdGE6OmNyZWF0ZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MmQy
OGRmYjNjNjIzNmU3MDNjMTkzZDRlZTU3NmUxNjk5OGQxY2YuLjE2YjUwYjE3MmMwNjJjMjJhOWI1
MTljM2UwZDBjZTcxODcwZjc3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApA
QCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVy
ZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJUKGZy
YW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhvc3Qt
Pm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRyZWVI
b3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAgICBm
b3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKysp
IHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVk
VGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmlu
ZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4NzQ2
ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xh
eWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQogCiB2
b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0Nh
bnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFz
TGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZDZiYzljMzI3MzUy
Njc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi45N2Q2NTFhMWY3Y2M5YjQ3YzA5MWE0ZTM5NDY1
ZWIyOTQzMWUzMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDEw
ICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJU
cmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0KIAogQ0NM
YXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGll
bnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5nR3JhcGhp
Y3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwgbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAgICA6
IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcmFt
ZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSkp
CiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV92aXNpYmxlKHRydWUpCiB7CiB9
CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKLSAgICBtX2xheWVyUmVu
ZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIp
CisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkgeworICAgICAgICAv
LyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRocmVhZGVkIG1vZGUu
IFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZh
bHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKHRo
aXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisKKyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxp
emVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBG
SVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRoZXNlIHZhbHVlcyB3aWxsIG5lZWQgdG8gYmUg
aW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBtX2xheWVyUmVuZGVy
ZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlci0+bWF4VGV4dHVyZVNp
emUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1
cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCkpOwotICAgIG1fY29udGV4dFN1cHBv
cnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKTsKKyAg
ICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3Qg
YmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGlu
ZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVk
UGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsK
ICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEsOCBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7CiAKLQotI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGUo
dGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICAvLyBXZSBjaGFu
Z2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVkZWQuCiAg
ICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSNlbmRpZgogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODAgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6Omlu
aXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsKICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywgMCk7
Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIG1fcHJveHktPnN0b3AoKTsKICAg
ICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJl
Z2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7CisgICAgbV9jbGll
bnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5nID0g
ZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxl
KTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogeworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1i
ZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4
aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExheWVyKCkpCisgICAgICAgIGhvc3RJbXBsLT5z
ZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CisKICAgICBtX2ZyYW1lTnVtYmVyKys7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKK1Bhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
Q29tcG9zaXRvclRocmVhZCgpCiB7Ci0gICAgbV9hbmltYXRpbmcgPSB0cnVlOwotICAgIG1fY2xp
ZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKLSAgICBtX2FuaW1hdGluZyA9
IGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwog
fQogCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiB7
Ci0gICAgLy8gRklYTUU6IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBjYXNlLCBmaXggd2hlbiBw
b3NzaWJsZS4KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKIH0KIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCiB7Ci0gICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXllclJlbmRlcmVyKTsKLSAg
ICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwgcmVuZGVyZXIpOwor
ICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUobV9zZXR0aW5ncyk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQoKQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsK
LSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgbV9jbGllbnQtPmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCi12b2lkIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgY29tcG9z
aXRlKGZhbHNlKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBp
eGVscywgcmVjdCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7Cit9CiAjZW5k
aWYKKworLy8gVGVtcG9yYXJ5IGhhY2sgdW50aWwgV2ViVmlld0ltcGwgY29udGV4dCBjcmVhdGlv
biBnZXRzIHNpbXBsaWZpZWQKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNv
bnRleHQoKQoreworICAgIEFTU0VSVCghbV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFk
KTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOworfQorCitib29sIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMs
IHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkK
IHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8g
aW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Ci0j
ZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKQEAgLTE1Myw2ICsxNzEsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKIH0KIAorY29uc3Qg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTE3Nywx
MyArMjAwLDE3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNz
TGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgaWYgKGxheWVyKSB7CisgICAgaWYg
KGxheWVyKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXll
cigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNl
dExheWVyUmVuZGVyZXIobV9sYXllclJlbmRlcmVyLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVhclJvb3RDQ0xheWVySW1wbCgpOworfQogCisjaWYgVVNF
KFNLSUEpCitHckNvbnRleHQqIENDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQoKQoreworICAg
IEFTU0VSVChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyk7CisgICAgcmV0dXJuIG1fcHJv
eHktPnNraWFDb250ZXh0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29u
dGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CkBAIC0xOTMsMTE0
ICsyMjAsMzMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY28KICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnNldFNpemUoY29udGVudHNT
aXplKTsKIAotICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpIHsKKyAgICBpZiAodmlzaWJsZVJl
Y3RDaGFuZ2VkKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0
ZUVudGlyZUxheWVyKCk7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwotICAgIH0KIAogICAgIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IGlmICghdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMo
KTsKLSNlbmRpZgorICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CisgICAgbV9wcm94eS0+c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJSZW5kZXJlcigpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKIHsKLSAgICAvLyBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgZmFsbCBi
YWNrIHRvIHNvZnR3YXJlLgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFjdHVhbGx5IGNyZWF0ZSB0aGUgcmVu
ZGVyZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotCi0gICAgLy8g
SWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBhY2NlbGVyYXRlZCBwYWlu
dGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZwotICAgIC8vIGFuZCB0cnkgY3JlYXRp
bmcgdGhlIHJlbmRlcmVyIGFnYWluLgotICAgIGlmIChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWlu
dGluZyAmJiAhbGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQ
YWludGluZyA9IGZhbHNlOwotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxheWVy
UmVuZGVyZXI7CisgICAgbV9wcm94eS0+bG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CiB9CiAKIFRl
eHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiB0aGlzIGNsYXNzIHNob3VsZCBvd24gdGhlIGNvbnRlbnRz
IHRleHR1cmUgbWFuYWdlcgotICAgIGlmICghbV9sYXllclJlbmRlcmVyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCk7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKIH0KIAog
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9D
b21wb3NpdGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSgpCiB7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVl
KTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRo
cmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0
ZShib29sIGZpbmlzaCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21w
b3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQp
IHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQg
d2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAgIC8vIGluIGNyZWF0aW5nIGEgbmV3
IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotICAgICAgICBtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBhbHJl
YWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRM
b3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQotICAgICAgICAvLyBQdXQgcmVzdWx0
IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0g
ICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBu
b3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2Ug
R3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQotICAgICAgICAvLyBj
YWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGlu
ZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0
YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0
ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgotICAgICAg
ICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgotICAgICAgICBtX3JlY3JlYXRp
bmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29u
dGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcigpCi17Ci0gICAgUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVy
ZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZFJl
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsK
LQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKKyAgICBB
U1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7CisgICAgc3RhdGljX2Nh
c3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21wb3NpdGVJbW1lZGlh
dGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5NGQ4MzY0MTQ4M2I0OWQ5M2M2OTBm
YjFlYWJhZThjNi4uYWFkZDI1MDY0ZWU0MjYwMThjMTZkZTA1ODM1MDhjZTg3MjIwMTQ2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDE3ICsyNywxOSBAQAogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwotY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIENDVGhyZWFkOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllckNocm9taXVtOwpAQCAtNjUsMzUgKzY3LDY0IEBA
IHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRpbmdzKCkKICAgICAgICAgICAgIDogYWNj
ZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4o
ZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpCiAgICAg
ICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93UGxhdGZv
cm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAg
ICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgYm9vbCBlbmFibGVDb21wb3NpdG9yVGhy
ZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXll
clRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBhbiBJbXBsJ3MgcmVuZGVy
aW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QKK3N0cnVjdCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkK
KyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAgICAgICAsIHVzaW5nTWFwU3ViKGZh
bHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyhmYWxzZSkKKyAgICAgICAg
LCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0
OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRp
bmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgp
OwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRl
cmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKTsKKyAgICB2b2lkIHByZUNvbW1pdChDQ0xheWVyVHJlZUhvc3RJbXBsKik7IC8v
IFRlbXBvcmFyeSBoYWNrIHVudGlsIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyBp
cyBzcGxpdCBhcGFydC4KKyAgICB2b2lkIGNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsK
KyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CisgICAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwoKTsKKyAgICB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3Vj
Y2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2Ug
dG8gV2ViVmlldy4KICAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0
aW5nOyB9CiAgICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9hbmltYXRp
bmcgPSBhbmltYXRpbmc7IH0gLy8gQ2FuIGJlIHJlbW92ZWQgd2hlbiBub24tdGhyZWFkZWQgc2No
ZWR1bGluZyBtb3ZlcyBpbnNpZGUuCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgIHZvaWQgY29tcG9zaXRlKCk7CisjZW5kaWYKKwogICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCk7CiAKLSAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYpOworICAgIC8vIENvbXBvc2l0ZXMgYW5kIGF0dGVtcHRzIHRvIHJl
YWQgYmFjayB0aGUgcmVzdWx0IGludG8gdGhlIHByb3ZpZGVkCisgICAgLy8gYnVmZmVyLiBJZiBp
dCB3YXNuJ3QgcG9zc2libGUsIGUuZy4gZHVlIHRvIGNvbnRleHQgbG9zdCwgd2lsbCByZXR1cm4K
KyAgICAvLyBmYWxzZS4KKyAgICBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKIApA
QCAtMTAxLDYgKzEzMiw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAorICAgIGNvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2
b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApAQCAtMTEwLDYgKzE0NCwx
MiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0dGluZ3M7IH0KIAorICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxv
dyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3Ig
YWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisg
ICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKICAgICB2b2lkIHNldFZpZXdw
b3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCiAgICAgY29uc3QgSW50U2l6
ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KQEAgLTEx
NywyMSArMTU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCi0g
ICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGgu
Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGNvbXBvc2l0ZShib29s
IGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwotCi0gICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
clJlbmRlcmVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3Vi
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KLSAgICBpbnQgbWF4
VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVTaXplOyB9Ci0gICAgR0Mz
RGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKSB7IHJldHVybiBtX2Jlc3RUZXh0dXJlRm9ybWF0OyB9
Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYgKzE2NywxMyBAQCBwcml2YXRlOgog
CiAgICAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZUxheWVyUmVuZGVy
ZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRl
cmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkb0Nv
bXBvc2l0ZSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0KLSAgICBib29sIG1f
cmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0jZW5kaWYKLQotICAgIGludCBtX21heFRleHR1cmVTaXpl
OwotICAgIEdDM0RlbnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7Ci0gICAgYm9vbCBtX2NvbnRleHRT
dXBwb3J0c01hcFN1YjsKLQogICAgIGJvb2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKLSAgICBP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5OworICAgIE93blB0cjxDQ1By
b3h5PiBtX3Byb3h5OwogCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwog
ICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0OwpAQCAtMTY3LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgQ0NTZXR0aW5ncyBtX3Nl
dHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBib29sIG1fdmlzaWJs
ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEw
OTI0ZmY1Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9z
dEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZyYW1l
TnVtYmVyKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMxOGE0YTcxNDIzMmQzMTg0
ZDJmZWQ0YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwot
Ci0vLyBGSVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQotY2xh
c3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5
ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLQotcHJvdGVjdGVkOgotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNGUyZDFiODQzYzE4MzJjZmFmYTE0
MzU0ODYyY2JmYTE1Mzg2NjlhZS4uNjNhNGViMjgwNWI5MGRkYTgwMjYzMjg3OGVlYzRjMzhkMWQ2
OGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTM4LDI0
ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRl
cmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVyZXIpKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MpKTsKIH0KIAotQ0NM
YXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJl
cikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0
aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9m
cmFtZU51bWJlcigwKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9jb21taXRQZW5k
aW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9yZWRy
YXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIAogQ0NM
YXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogewogICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywg
MCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5j
bG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKQEAg
LTY0LDcxICs2MywxMDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgp
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogewotICAgIG1f
Y29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGljc0NvbnRleHQzRCogQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYgYSBjb21taXQgaXMgcGVu
ZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAot
ICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxv
Y2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBpZiAobV9jb21taXRQZW5k
aW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOwotICAg
IG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwor
ICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKQorICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7
Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29u
dGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVh
ZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQs
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgKytt
X2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVj
dCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxl
bnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQor
eworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6
IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRMb3N0KQotICAgICAgICAg
ICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRl
eHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRl
eHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9s
YXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICArK21fZnJhbWVOdW1iZXI7
Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjps
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJl
bmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXNl
bnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYg
IWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Cit9CiAK
LSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhl
cmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCi0gICAgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1l
QmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJh
bWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXROZWVkc1JlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RM
YXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKLSAgICBpZiAobV9yZWRyYXdQ
ZW5kaW5nIHx8IG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExh
eWVySW1wbCA9IGxheWVyOworfQogCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9yZWRyYXdQZW5kaW5nID0gdHJ1
ZTsKLSAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAo
bV9sYXllclJlbmRlcmVyICYmICF2aXNpYmxlKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJl
bGVhc2VUZXh0dXJlcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRl
eHRMb3N0KQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIGltcGxIYWNrLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gSWYgbV9s
YXllclJlbmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3ZlcmluZyBmcm9tIGEgbG9zdCBj
b250ZXh0CisgICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xheWVyUmVuZGVyZXI7CisK
KyAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAgICBSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOworICAgIGlmICghcmVjcmVhdGluZ1Jl
bmRlcmVyKQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXJS
ZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+
b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisKKworICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwg
YW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxl
cmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fp
bi4KKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKKyAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRl
eHQpOworICAgIH0KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXll
cigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKyAgICAvLyBJZiByZWNyZWF0aW5nIHJlbmRlcmVy
LCB1cGRhdGUgdGhlIGxheWVycyB0byBwb2ludCBhdCB0aGUgbmV3IHJlbmRlcmVyCisgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+
cGxhdGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyUmVuZGVyZXIu
Z2V0KCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUjsKLSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7
Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJS
ZW5kZXJlcjsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOworfQorCisvLyBGSVhNRTogbW92
ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5ZXJUcmVlSG9zdAordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjp1cGRhdGVMYXllcnMoKQoreworICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9sYXll
clJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZp
ZXdwb3J0U2l6ZSkKK3sKKyAgICBib29sIGNoYW5nZWQgPSB2aWV3cG9ydFNpemUgIT0gbV92aWV3
cG9ydFNpemU7CisgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNpemU7CisgICAgaWYgKGNo
YW5nZWQpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBjNDExY2NjNzM1NTRm
MWRkMzJiY2NlMmUxNWU0OGRiZWNhYzRhODhlLi5kNjhiYjhkNjA3MzM5MGViZDA4NGU5MTRjYWIw
MTkyNjFmYTkwNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0y
NSw1NiArMjUsNjkgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAjZGVmaW5lIEND
TGF5ZXJUcmVlSG9zdEltcGxfaAogCi0jaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdy
Q29udGV4dDsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQ29tcGxl
dGlvbkV2ZW50OworY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW07Ci0KLS8vIFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXll
clRyZWVIb3N0SW1wbAotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCAgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCgpIHsgfQotfTsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzOwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
YXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQogY2xhc3MgQ0NMYXllclRyZWVI
b3N0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZShjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENvbXBsZXRlKCk7CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwor
CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKKyAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygp
OwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0K
IAotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhv
c3QqIG93bmVySGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wg
aXNDb250ZXh0TG9zdCgpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
cigpIHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKwor
ICAgIHZvaWQgcHJlc2VudCgpOworCisgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPik7CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKICAg
ICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVt
YmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsg
bV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKKyAgICB2b2lkIHVwZGF0ZUxh
eWVycygpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUpOworICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRTaXplOyB9CisKIHByb3RlY3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4pOwotICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCos
IGJvb2wqIGNvbnRleHRMb3N0KTsKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKGNv
bnN0IENDU2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQg
bV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
KiBtX2NsaWVudDsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0gICAgYm9vbCBtX3JlZHJhd1BlbmRp
bmc7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CisgICAgQ0NTZXR0
aW5ncyBtX3NldHRpbmdzOworICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiB9OwogCiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjkyODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2
NjJlOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuaCIKLQotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCi0jaW5jbHVk
ZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2Ugewot
Q0NUaHJlYWQqIGNjVGhyZWFkOwotaW50IG51bVByb3hpZXMgPSAwOwotfQotCi1DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3Qq
IGxheWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2xh
eWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG51bVByb3hpZXMrKzsKLSAgICBpZiAoIWNj
VGhyZWFkKQotICAgICAgICBjY1RocmVhZCA9IGxheWVyVHJlZUhvc3QtPmNsaWVudCgpLT5jcmVh
dGVDb21wb3NpdG9yVGhyZWFkKCkubGVha1B0cigpOwotfQotCi0KLXZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzdGFydCgpCi17Ci0gICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBs
LgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpp
bml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7
Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQu
Ci0KLSAgICBudW1Qcm94aWVzLS07Ci0gICAgaWYgKCFudW1Qcm94aWVzKSB7Ci0gICAgICAgIGRl
bGV0ZSBjY1RocmVhZDsKLSAgICAgICAgY2NUaHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dyIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFk
KSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKLXsKLSAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMg
dGhlIGltcGwuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgQVNTRVJU
KCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4K
LSAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIEND
TWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkp
OwotfQotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omlz
TWFpblRocmVhZCgpCi17Ci0gICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Ci19Ci0KLSNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFk
LT50aHJlYWRJRCgpOwotfQotI2Vsc2UKLW5hbWVzcGFjZSB7Ci1ib29sIGZha2VJbXBsVGhyZWFk
ID0gZmFsc2U7Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJl
YWQoKQotewotICAgIHJldHVybiBmYWtlSW1wbFRocmVhZDsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBmYWtlSW1w
bFRocmVhZCA9IHZhbHVlOwotfQotI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LQotI2VuZGlmIC8vICFOREVCVUcKLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgfQot
Ci0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb21taXR0ZXIoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7Ci0K
LSAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9y
bUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5n
ZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxl
dGlvbi53YWl0KCk7Ci0KLSAgICBjb21taXR0ZXIuY2xlYXIoKTsKLQotICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIs
IENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29t
bWl0KCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXQiLCB0aGlzLCAwKTsKLSAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0
LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0gICAgY29tcGxldGlvbi0+c2ln
bmFsKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwotfQot
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJh
d0xheWVycygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7
Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLX0K
LQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgp
ICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5l
ZWRzUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1w
bE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhp
cywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKLSAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7Ci0gICAgY29tcGxl
dGlvbi0+c2lnbmFsKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjA3ZTU2MTc2MmFj
MWRkZjlkZDg3ODM3OGQ1NDYzNTZjNzg3YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9o
Ci0jZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0KLSNpbmNsdWRlICJjYy9DQ0Nv
bXBsZXRpb25FdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NM
YXllclRyZWVIb3N0OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwotCi1jbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQotICAg
IGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwotCi0gICAgdm9pZCBzdGFydCgpOyAv
LyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgotICAgIHZvaWQgc3RvcCgp
OyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgotCi0gICAgLy8g
Q0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1
YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
LQotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKLSAgICBz
dGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQotICAgIC8vIEZha2UgdGhyZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29y
cmVjdCB1c2FnZS4KLSAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlm
Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eShDQ0xheWVyVHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRy
ZWVIb3N0KiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZh
dGU6Ci0gICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1l
QW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NU
aHJlYWQKLSAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
KiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7
Ci0gICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBv
bmx5LgotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFp
biB0aHJlYWQgb25seS4KLSAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQot
ICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBk
dXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NNYWluVGhyZWFkVGFzay5oCmluZGV4IGZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2
MjgwZWFjOGEuLjRjMzNiYWEwN2FkZDM1NzczOWRkYjUxNzYxZTg0N2I3NGU1MWMzMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTE1OCw2ICsxNTgsODggQEAgcHJpdmF0ZToK
ICAgICBQMyBtX3BhcmFtZXRlcjM7CiB9OwogCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitjbGFzcyBNYWlu
VGhyZWFkVGFzazQgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgdHlwZWRl
ZiBNYWluVGhyZWFkVGFzazQ8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4g
TWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNr
VHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFt
NDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRo
b2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2so
aW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1l
dGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChw
YXJhbWV0ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9k
KShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJh
bWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAg
UDQgbV9wYXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIE1QNT4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNSA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRh
c2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1Q
MywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAy
LCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQ
YXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQ
YXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0z
IHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNl
LCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQs
IHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s1KFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFt
ZXRlcjUpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMo
cGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3Rh
bmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVy
MywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBN
ZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVy
MjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1f
cGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDTWFp
blRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVl
LApAQCAtMjE1LDYgKzI5Nyw0NiBAQCBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3Jl
YXRlTWFpblRocmVhZFRhc2soCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShw
YXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitQYXNzT3duUHRyPENDTWFpblRocmVh
ZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAg
IHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCksCisgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFt
ZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQpCit7CisgICAgcmV0dXJuIE1haW5UaHJl
YWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46
OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5h
bWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVh
dGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1l
dGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAor
ICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQorewor
ICAgIHJldHVybiBNYWluVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAy
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhv
ZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIENDTWFpblRocmVhZFRhc2tfaAorI2VuZGlmIC8vIE1haW5UaHJlYWRUYXNr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCA2M2VkY2YwZDY3YTY4
NGY1ZGJlMGExMmQ1ZDlkMjYyYTBiMTRhYzIzLi5hOWY0NTBlZDQ4MjQ1ZDgxYjBjNDMwNzJjYTM5
MzcxMmQwZGQzNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNyArNDgsNyBAQCBDQ1Bs
dWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1BsdWdpbkxheWVy
SW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOwog
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNjFhMmU1M2VkMjMwZjk2N2VlMWQ4NWRkMDgzY2JhY2Y5YzI2NzE4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorCisjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUg
ImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitib29sIENDUHJveHk6OmlzTWFpblRo
cmVhZCgpCit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9CisKK25hbWVzcGFjZSB7
Citib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7CitzdGF0aWMgV1RGOjpUaHJlYWRJZGVudGlm
aWVyIGltcGxUaHJlYWRJRDsKK30KKworYm9vbCBDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKQorewor
ICAgIHJldHVybiBmYWtlSW1wbFRocmVhZCB8fCBjdXJyZW50VGhyZWFkKCkgPT0gaW1wbFRocmVh
ZElEOworfQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCBpc0ltcGxUaHJlYWQp
Cit7CisgICAgZmFrZUltcGxUaHJlYWQgPSBpc0ltcGxUaHJlYWQ7Cit9CisKK3ZvaWQgQ0NQcm94
eTo6c2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIgaWQpCit7CisgICAgaW1wbFRo
cmVhZElEID0gaWQ7Cit9CisKKyNlbmRpZiAvLyAhTkRFQlVHCisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NDVkMmNkYWMwYTlmOTNhMTg5ZjRhMTAzNzJlZDA3ZDVhYTg4YmViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUHJv
eHlfaAorI2RlZmluZSBDQ1Byb3h5X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYg
VVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ1RocmVhZDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKK2Ns
YXNzIFRleHR1cmVNYW5hZ2VyOworCisvLyBBYnN0cmFjdCBjbGFzcyByZXNwb25zaWJsZSBmb3Ig
cHJveHlpbmcgY29tbWFuZHMgZnJvbSB0aGUgbWFpbi10aHJlYWQgc2lkZSBvZgorLy8gdGhlIGNv
bXBvc2l0b3Igb3ZlciB0byB0aGUgY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIEND
UHJveHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJveHkpOworcHVibGljOgorICAg
IHZpcnR1YWwgfkNDUHJveHkoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzU3Rh
cnRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworCisgICAgdmlydHVhbCBjb25z
dCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBw
cm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKworICAgIC8vIERlYnVnIGhvb2tzCisjaWZuZGVmIE5E
RUJVRworICAgIHN0YXRpYyBib29sIGlzTWFpblRocmVhZCgpOworICAgIHN0YXRpYyBib29sIGlz
SW1wbFRocmVhZCgpOworI2VuZGlmCisKKyAgICAvLyBUZXN0aW5nIGhvb2tzCisgICAgdmlydHVh
bCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAgIC8vIEhvcnJpYmxlIHVn
bHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRl
eHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisj
aWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgPSAwOwor
I2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxs
IGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOworCisgICAgLy8gVGVtcG9yYXJ5
IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVy
ZXJDaHJvbWl1bXMKKyAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQ0NQcm94eSgpIHsgfQorICAgIGZyaWVu
ZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQo
V1RGOjpUaHJlYWRJZGVudGlmaWVyKTsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThmNTE3MjE0MmFi
OTJhY2ZmODFhZTE2N2M1NTQ5YmZlZWUyYTY2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7CitwdWJsaWM6CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVh
ZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAg
eworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7
CisjZW5kaWYKKyAgICB9Cit9OworCitQYXNzT3duUHRyPENDUHJveHk+IENDU2luZ2xlVGhyZWFk
UHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ1NpbmdsZVRocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30K
KworQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkK
KyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVjcmVhdGluZ0dyYXBoaWNz
Q29udGV4dChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6
Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRy
ZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworfQorCitDQ1NpbmdsZVRocmVhZFBy
b3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xl
VGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1f
bGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9v
bCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgaWYgKCFkb0NvbXBvc2l0ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhw
aXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOworfQorCit2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJU
cmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVy
SGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIG1fcmVjcmVh
dGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOworI2Vsc2UKKyAgICAvLyBTaW5nbGUgdGhyZWFkZWQgb25seSB3b3JrcyB3aXRoIFRI
UkVBREVEX0NPTVBPU0lUSU5HLgorICAgIENSQVNIKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgLy8gRklYTUU6IE9uY2Ug
d2UgbW92ZSByZW5kZXJfd2lkZ2V0IHNjaGVkdWxpbmcgaW50byB0aGlzIGNsYXNzLCB3ZSBjYW4K
KyAgICAvLyB0cmVhdCByZWRyYXcgcmVxdWVzdHMgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNvbW1p
dEFuZFJlZHJhdyByZXF1ZXN0cy4KKyAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQor
Cit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q1NpbmdsZVRocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIH0KKyAgICBtX2xheWVyVHJlZUhv
c3QgPSAwOworfQorCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnNraWFDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpOworfQorI2VuZGlmCisKK1RleHR1cmVNYW5hZ2Vy
KiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkKK3sKKyAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7Cit9CisKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorLy8gQ2Fs
bGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRn
ZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9z
aXRlSW1tZWRpYXRlbHkoKQoreworICAgIC8vIENvbXBvc2l0ZUlmTmVlZGVkIHdpbGwgbm90IG9j
Y3VyIGlmICFtX2NvbW1pdFBlbmRpbmcuIFNvLCBzZXQgdGhlIGJpdCBzbworICAgIC8vIGl0IHN1
Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdvIGF3YXkgb25jZSB0aGUgcHJveGllcyBhc3N1bWUgZnVs
bAorICAgIC8vIHNjaGVkdWxpbmcgcmVzcG9uc2liaWxpdHkuCisgICAgbV9jb21taXRQZW5kaW5n
ID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Cit9CisjZW5kaWYKKwordm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29t
bWl0UGVuZGluZykgeworICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAgZG91YmxlIGZyYW1lQmVn
aW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRl
QW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKworICAgICAgICAvLyBQcmVjb21taXQgaXMgYSB0
ZW1wb3Jhcnkgc3RlcCB3ZSBuZWVkIHRvIHBlcmZvcm0gdG8gcHVzaCB0aGluZ3MgbGlrZQorICAg
ICAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCisg
ICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKSBpc24ndCBzcGxpdCBp
bnRvIGhvc3QgYW5kIGltcGwgcGFydHMuCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlQ29tbWl0
KG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMg
c2hvdWxkIGJlY29tZSBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpIG9uY2Ugd2Ugc3Bs
aXQgYXBhcnQKKyAgICAgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycy4KKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8g
Q29tbWl0CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
KyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkp
OworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIERyYXcKKyAgICAgICAgaWYgKGRvQ29tcG9zaXRlKCkpCisg
ICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgfQorfQorCiti
b29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOworICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgICAgICBib29s
IG9rID0gIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKDAsIGNv
bnRleHQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Cisg
ICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAgICBpZiAobV9sYXllclRyZWVI
b3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292
ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisg
ICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9y
TWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRl
cmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKKyAgICAgICAgICAvLyBy
ZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIg
ZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0
IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KKyAgICAgICAgICAvLyBhbmQgcmVxdWVz
dCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzRl
ODNhYTM4NzQ2MzYyZDYyOGUyZGY3ZWIyNWU5NGU3NzZmNmIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTaW5n
bGVUaHJlYWRQcm94eV9oCisjZGVmaW5lIENDU2luZ2xlVGhyZWFkUHJveHlfaAorCisjaW5jbHVk
ZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CisKK2NsYXNz
IENDU2luZ2xlVGhyZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZp
cnR1YWwgfkNDU2luZ2xlVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50
YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXll
clJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2
b2lkIHN0b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRo
cmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVh
bCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBo
YWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVy
Q2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFu
YWdlcigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4KKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRy
ZWVIb3N0Kik7CisgICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOworICAgIGJvb2wgZG9Db21w
b3NpdGUoKTsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NM
YXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1Ro
cmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3No
dXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJ
bXBsOworCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgYm9vbCBtX3JlY3JlYXRpbmdH
cmFwaGljc0NvbnRleHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hZDBmYmVlNDFmZmFmOTY1Yzg5YzU3MzRlNGM3MjRhN2U3ZTRhMmNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRo
cmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9
IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NQcm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
VGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1RocmVhZFByb3h5OjpDQ1RocmVh
ZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVu
ZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFj
Y1RocmVhZCkgeworICAgICAgICBjY1RocmVhZCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJv
eHk6OnNldEltcGxUaHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworI2VuZGlmCisgICAgfQor
fQorCitDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtl
IHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAv
LyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAg
aWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NU
aHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitHcmFwaGljc0NvbnRleHQz
RCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVy
aW5nKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBDQ1RocmVhZFBy
b3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBs
OworfQorCitib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5
ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChj
b250ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBMZWFrIHRoZSBjb250ZXh0IHBvaW50ZXIg
c28gd2UgY2FuIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyID0gY29udGV4dC5yZWxlYXNlKCkubGVh
a1JlZigpOworICAgIEFTU0VSVChjb250ZXh0UHRyLT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBN
YWtlIGEgYmxvY2tpbmcgY2FsbCB0byBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQu
IFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbAorICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgaW5p
dGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxlcy4KKyAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRl
ZDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG93bmVySGFjayksIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoJmNhcGFiaWxpdGllcykpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKwor
ICAgIGlmIChpbml0aWFsaXplU3VjY2VlZGVkKQorICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGllczsKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZVN1Y2NlZWRlZDsKK30KKworY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NU
aHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5OworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5k
aW5nID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30K
Kwordm9pZCBDQ1RocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJl
ZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5p
dGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnN0
b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0
ZXMgdGhlIGltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29t
cGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCisgICAgbV9s
YXllclRyZWVIb3N0ID0gMDsKK30KKworI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBDQ1RocmVh
ZFByb3h5Ojpza2lhQ29udGV4dCgpCit7CisgICAgLy8gTm90IHN1cHBvcnRlZCBvbiB0aGUgaW1w
bCB0aHJlYWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZgorCitUZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94eTo6Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1l
QW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gRklYTUU6IGNhbGwgYmVnaW5G
cmFtZUFuZENvbW1pdCBvbiBtYWluIHRocmVhZAorfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21t
aXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1p
dFBlbmRpbmcgPSBmYWxzZTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94
eTo6cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikp
KTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpjb21t
aXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNv
bW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBzZXROZWVk
c1JlZHJhd09uQ0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXll
cnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
ZHJhd0xheWVycygpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5l
ZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
SW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0
LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
fQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQ
dHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2Vl
ZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KGFkb3B0UmVmKGNvbnRleHRQdHIpKTsKKyAgICAqaW5p
dGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgaWYgKCppbml0aWFsaXplU3VjY2VlZGVk
KQorICAgICAgICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBs
ZXRpb24tPnNpZ25hbCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmI2YzQ0OGIwY2VhZTdlYmJkNDY4MjY0OWFhNzkyMDVkNGFjNTExOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhy
ZWFkUHJveHlfaAorI2RlZmluZSBDQ1RocmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29t
cGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBDQ1RocmVhZFBy
b3h5IDogcHVibGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
UHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKworICAgIHZpcnR1YWwgfkNDVGhyZWFk
UHJveHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJv
b2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8v
IEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRv
IHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0
aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250
ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21p
dW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVh
bCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICAvLyBD
YWxsZWQgb24gQ0NNYWluVGhyZWFkCisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lk
IGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBjb21taXRPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7
CisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0KiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRp
YWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKKyAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5Lgor
ICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJl
YWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJl
YWRDb3B5OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1h
aW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDkxYzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNi
ZTEwOTU3OGYxODMuLmQ4ZGU0YWIwMzQ2OTg4NzY5ZmJlMjY3NGZkMzIzNjEwYzQ1ZDcyMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0xOTgsNiArMTk4LDQ4IEBAIHByaXZhdGU6CiAgICAg
UDQgbV9wYXJhbWV0ZXI0OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIE1QNT4KK2NsYXNzIENDVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgewor
cHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0
LCBNUDUpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQ
MywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQ
YXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQ
YXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMs
IFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJh
bWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhyZWFkVGFzazUoVCogaW5zdGFuY2UsIE1ldGhv
ZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBh
cmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICAgICAg
OiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIy
KHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFt
ZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisg
ICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1f
cGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9w
YXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAg
IFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0
ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NU
aHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTI3NCw2ICszMTYsMjcgQEAgUGFz
c093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAogCiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0
eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBl
bmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDVGhyZWFk
OjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZv
aWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFy
YW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1l
dGVyNSkKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNTxULCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpU
eXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAg
ICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSk7CisKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gQ0NUaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAKaW5kZXggYmYyM2JkZWZkOWYzZjVjYjgxMTg2NDgwZGZmODFjMzcyNjkxOTll
Mi4uNWY1YjI1NjQzYThiZjg0ZGMwZTZhNGY1ODFjZDBkYzYzNDQyMTI3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCA0YTU1YmNhMGEzNjdkNzBmMzg3NGM2MDgzZDUzNjNiNWM2NGQ2YmYxLi45
ZmYxZmNjYzk3MTZjMTI0MmZlMzVmZTY5MGEyYTgwMjE2MGQyZjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQsIGNvbnMKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBB
U1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwNDZmYjEzYzliNzhm
ODBjYjljZmEyYWMxYTYwMDA1NjcyM2Y1ODdjLi5lZWUwNTc1MmRhYTc0ZTI4NGY3NDIzYTM4ZTU4
ZWY0YTI0ODU5YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTA4LTI5ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIEludHJvZHVjZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUg
TGF5ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAq
IHRlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisK
IDIwMTEtMDgtMjcgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFRlYWNoIHRoZSB1cGRhdGUgYW5kIGJ1aWxkIHNjcmlwdHMgaG93IHRvIGhhbmRsZSBkZXBl
bmRlbmNpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRl
eCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0NDhiZDE0NWU5YWJlYWU0Li5iZjc0ZDczOTdmNmUy
YzljOTIyNGUwMTVkZGY4ZTMwMDE2ODczODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTUwLDcgKzExNTAsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsK
IH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQordm9pZCBXZWJW
aWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTExNjMsNyArMTE2Myw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICBpZiAobV9wYWdl
T3ZlcmxheSkKICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CiAKLSAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbXBvc2l0ZShmaW5pc2gpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9z
aXRlKCk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMjUxNyw5ICsyNTE3LDcgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKGxheWVyKTsKIAogICAgIEludFJlY3Qg
ZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICBpZiAo
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpCi0gICAgICAgIGludmFsaWRhdGVSb290
TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKLSAgICBlbHNlCisgICAgaWYgKCFtX2lzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKIH0KIApAQCAtMjYxMCw2ICsyNjA4LDExIEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAg
ICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwogICAgICAgICBjY1NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpOwogICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRp
bmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKKyNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisgICAgICAgIGNjU2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IHRy
dWU7CisjZWxzZQorICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBm
YWxzZTsKKyNlbmRpZgogICAgICAgICBjY1NldHRpbmdzLnNob3dGUFNDb3VudGVyID0gc2V0dGlu
Z3MoKS0+c2hvd0ZQU0NvdW50ZXIoKTsKICAgICAgICAgY2NTZXR0aW5ncy5zaG93UGxhdGZvcm1M
YXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKIApAQCAtMjY1
OSwxMCArMjY2MiwxNSBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGlj
c0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewotICAgIC8vIEZvcmNlIFZpZXdIb3N0TXNnX0RpZEFj
dGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCi0gICAgLy8gdGhhdCB0
aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCi0gICAgbV9pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKKyAgICAvLyBGb3JjZSB0aGUgbV9pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgdG8gdGhlIG9wcG9zaXRlIG9mIHRoZQorICAgIC8v
IGludGVuZGVkIHZhbHVlIHRvIHNob3J0LWNpcmN1aXQgaXRzICJJJ20gYWxyZWFkeSBpbiB0aGlz
IG1vZGUiIGxvZ2ljLgorICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gIXN1
Y2Nlc3M7CisKICAgICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoc3VjY2Vzcyk7
CisKKyAgICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwgaWYgbmVj
ZXNzYXJ5CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllcigw
KTsKICAgICBpZiAoc3VjY2VzcyAmJiBtX3BhZ2VPdmVybGF5KQogICAgICAgICBtX3BhZ2VPdmVy
bGF5LT51cGRhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwCmluZGV4IDFjNWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5
NjNiNTc3YzIuLmQ5OTQzZTcxM2EyMGE0ZDdiMDkwNDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQo
aW50IGExLCBpbnQgYTIpKTsKICAgICBNT0NLX01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEs
IGludCBhMiwgaW50IGEzKSk7CiAgICAgTU9DS19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGEx
LCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7CisgICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZv
aWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1Qo
Q0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRF
U1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1v
Y2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhv
ZDMoOSwgOCwgNykpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwg
OCwgNywgNikpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwg
NywgNiwgNSkpLlRpbWVzKDEpOwogCiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9j
azo6bWV0aG9kMCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2Nr
LCAmTW9jazo6bWV0aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRU
YXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMiwgOSwgOCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3Jl
YXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1U
YXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwg
OCwgNywgNiktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAm
TW9jazo6bWV0aG9kNSwgOSwgOCwgNywgNiwgNSktPnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105589</attachid>
            <date>2011-08-29 23:46:10 -0700</date>
            <delta_ts>2011-08-31 16:26:02 -0700</delta_ts>
            <desc>Win ews failure likely flake</desc>
            <filename>bug-66807-20110829234608.patch</filename>
            <type>text/plain</type>
            <size>121249</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM5NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMmFkMDIwMGZjNGY1ZWJj
NDA0MTJkNmM5MTgzOTg4NjZhM2E0ZGJjLi4xNjZlYjBkOGZkMTM2MzZkNjA0NmM2OTAzOGI5MWRl
YWRmNzE2NzRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBD
Q0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5M
YXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250
ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVhZFRhc2s0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRo
cmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVh
ZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYWluVGhyZWFk
VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5Ojppc0ltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFNldElt
cGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
U2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRv
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNr
NTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgor
CiAyMDExLTA4LTI5ICBBbGV4YW5kZXIgUGF2bG92ICA8YXBhdmxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogPGJ1dHRvbiBoaWRkZW4+Li48L2J1dHRvbj4gaGFzIGEg
ZGlmZmVyZW50IGNvbXB1dGVkICJkaXNwbGF5IiB2YWx1ZSB0aGFuICJub25lIgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGMwNmNlNGI2MzJlYjUyZTJlYjYxNDUzMWJiNmZiOGY1MDM2Nzg2NTAuLmNkY2Y1
OWVlOTcxNGU2MmM5MjE5NWNlYmJlZGYyOTliYTk1YWY5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTM1MzUsMjAgKzM1MzUsMjIgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVGlsaW5nRGF0YS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eS5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWQuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHku
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5j
cHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xl
VGhyZWFkUHJveHkuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5oJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZC5oJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgnLAorICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggNTljMmNjYTFkOTJjZDNhZWY2M2E0NzAxZTA1YmQxZmJhYWNiODRlNy4uZGI1ZTAzNDZm
NmI3NTJjZmNjYjViNGU0YzY5NTNlNWI3ZDQ5MGIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXll
ckNocm9taXVtLmNwcApAQCAtMTIwLDE2ICsxMjAsMTggQEAgYm9vbCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKIAogdm9pZCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewotI2lm
ICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCisgICAgLy8gTm90ZSB0
aGF0IGhvc3QtPnNraWFDb250ZXh0KCkgd2lsbCBjcmFzaCBpZiBjYWxsZWQgd2hpbGUgaW4gdGhy
ZWFkZWQKKyAgICAvLyBtb2RlLiBUaGlzIHRodXMgZGVwZW5kcyBvbiBDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemUgdHVybmluZyBvZmYKKyAgICAvLyBhY2NlbGVyYXRlUGFpbnRpbmcgdG8gcHJl
dmVudCB0aGlzIGZyb20gY3Jhc2hpbmcuCiAgICAgaWYgKGhvc3QtPnNldHRpbmdzKCkuYWNjZWxl
cmF0ZVBhaW50aW5nKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVV
cGRhdGVyU2tQaWN0dXJlOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3du
ZXIpLCBob3N0LT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCkpOworICAgICAgICBHckNv
bnRleHQqIGNvbnRleHQgPSBjb25zdF9jYXN0PENDTGF5ZXJUcmVlSG9zdCo+KGhvc3QpLT5za2lh
Q29udGV4dCgpOworICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRl
clNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwg
Y29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gU0tJQQotI2VuZGlm
IC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCi0gICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGhvc3QtPmNvbnRleHRTdXBwb3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVV
cGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6Y3JlYXRlKENvbnRlbnRMYXllclBh
aW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
LnVzaW5nTWFwU3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggMjNjODU1NWY1MGJlMTZlOGY4YmYzMTkxZjhlYzU3ODE5ZDJjYzViYy4uNzFiYzBiNmI5ZGI2
NTZiYzQ2MGY0Zjg1NjU0OTRmYTU3YWI1MGI4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCkBAIC0xODEsNyArMTgxLDcgQEAgYm9vbCBJbWFnZUxheWVyQ2hyb21pdW06OmRyYXdz
Q29udGVudCgpIGNvbnN0CiAKIHZvaWQgSW1hZ2VMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJl
VXBkYXRlcihjb25zdCBDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7Ci0gICAgbV90ZXh0dXJlVXBk
YXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmNvbnRleHRTdXBw
b3J0c01hcFN1YigpKTsKKyAgICBtX3RleHR1cmVVcGRhdGVyID0gSW1hZ2VMYXllclRleHR1cmVV
cGRhdGVyOjpjcmVhdGUoaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLnVzaW5nTWFw
U3ViKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAppbmRleCA5NTYzZWFhNTdmNTY3M2M4
NTk5ZDRkYmFhYzg4YjkyZDljNDk0MzQ4Li5lZWVhYmIyMTBhYTFiMzI1ODljNjcxYjhjMzcxMTE0
NDkyYjAzMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcApAQCAtOTYsNiArOTYsMTkgQEAgdm9p
ZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKIH0KIAordm9pZCBMYXllckNo
cm9taXVtOjpzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKExheWVyUmVuZGVyZXJDaHJvbWl1bSog
cmVuZGVyZXIpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbigpLnNpemUo
KTsgKytpKQorICAgICAgICBjaGlsZHJlbigpW2ldLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KHJlbmRlcmVyKTsKKworICAgIGlmIChtYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyKCkt
PnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUocmVuZGVyZXIpOworICAgIGlmIChyZXBsaWNhTGF5
ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
cmVuZGVyZXIpOworCisgICAgc2V0TGF5ZXJSZW5kZXJlcihyZW5kZXJlcik7Cit9CisKIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJl
bmRlcmVyKQogewogICAgIC8vIElmIHdlJ3JlIGNoYW5naW5nIGxheWVyIHJlbmRlcmVycyB0aGVu
IHdlIG5lZWQgdG8gZnJlZSB1cCBhbnkgcmVzb3VyY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXgg
NThlZDFiMDQwOTZkYWMzZTFiZjZlNzc5NmFmNTkwNmI4Mzg4Y2M4NS4uZmUyZTRjNzEzNzNiZTUy
NWQ1OGM2M2I3Y2UwYTgxZWE4ZTFlNWM4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTUzLDYg
KzE1Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzUm9vdExheWVyKGJvb2wgaXNSb290TGF5
ZXIpIHsgbV9pc1Jvb3RMYXllciA9IGlzUm9vdExheWVyOyB9CiAgICAgYm9vbCBpc1Jvb3RMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1faXNSb290TGF5ZXI7IH0KIAorICAgIHZvaWQgc2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qKTsKKwogICAgIC8vIERlcml2
ZWQgdHlwZXMgbXVzdCBvdmVycmlkZSB0aGlzIG1ldGhvZCBpZiB0aGV5IG5lZWQgdG8gcmVhY3Qg
dG8gYSBjaGFuZ2UKICAgICAvLyBpbiB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtLgogICAgIC8v
IEZJWE1FLCByZXBsYWNlIHdpdGggQ0NMYXllclRyZWVIb3N0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNzBhMDVkY2EwOTAxMGE2Y2I1OWZjZjViMWRhZTMxMDJk
OGY2ZGRmZC4uMGIyY2YzNzM1NzhiZDcxOTExNjc4Y2FkOWRkNzA0ZGNiNzRmMjhmZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIgogI2luY2x1ZGUgIk5vbkNvbXBvc2l0
ZWRDb250ZW50SG9zdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2lu
Y2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgpAQCAtNDQ5
LDEzICs0NTAsMTMgQEAgYm9vbCBjb250ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQorUGFz
c1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdCogb3duZXIsIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1w
bCwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKIHsKICNpZiBVU0UoU0tJ
QSkKICAgICBpZiAob3duZXItPnNldHRpbmdzKCkuYWNjZWxlcmF0ZVBhaW50aW5nICYmICFjb250
ZXh0U3VwcG9ydHNBY2NlbGVyYXRlZFBhaW50aW5nKGNvbnRleHQuZ2V0KCkpKQogICAgICAgICBy
ZXR1cm4gMDsKICNlbmRpZgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVy
UmVuZGVyZXIoYWRvcHRSZWYobmV3IExheWVyUmVuZGVyZXJDaHJvbWl1bShvd25lciwgY29udGV4
dCkpKTsKKyAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFk
b3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIG93bmVySW1wbCwgY29udGV4
dCkpKTsKICAgICBpZiAoIWxheWVyUmVuZGVyZXItPmluaXRpYWxpemUoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAKQEAgLTQ2Myw4ICs0NjQsMTAgQEAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hy
b21pdW0+IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCoKIH0K
IAogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRy
ZWVIb3N0KiBvd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdEltcGwqIG93bmVySW1wbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9vd25lckltcGwob3duZXJJbXBs
KQogICAgICwgbV9jdXJyZW50UmVuZGVyU3VyZmFjZSgwKQogICAgICwgbV9vZmZzY3JlZW5GcmFt
ZWJ1ZmZlcklkKDApCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKQEAgLTQ4MywxNCArNDg2LDE4
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplKCkKICAgICAgICAgLy8g
TGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+
dGV4dHVyZSBjYWNoZS4KICAgICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2Fj
aGVCeXRlcyA9IDUwICogMTAyNCAqIDEwMjQ7CiAgICAgICAgIG1fc2tpYUNvbnRleHQtPnNldFRl
eHR1cmVDYWNoZUxpbWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0
ZXMpOworICAgICAgICBtX2NhcGFiaWxpdGllcy51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcgPSB0
cnVlOwogICAgIH0KICNlbmRpZgogCiAgICAgV2ViQ29yZTo6RXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwotICAg
IGlmIChtX2NvbnRleHRTdXBwb3J0c01hcFN1YikKKyAgICBtX2NhcGFiaWxpdGllcy51c2luZ01h
cFN1YiA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CisgICAg
aWYgKG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViKQogICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9DSFJPTUlVTV9tYXBfc3ViIik7CiAKKyAgICBtX2NhcGFiaWxpdGllcy5t
YXhUZXh0dXJlU2l6ZSA9IG1heFRleHR1cmVTaXplKCk7CisgICAgbV9jYXBhYmlsaXRpZXMuYmVz
dFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRl
eHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxNCwxMSArNTIxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xh
eWVySW1wCiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQordm9pZCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290Q0NMYXllckltcGwpCi0gICAg
ICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKG1fcm9vdENDTGF5
ZXJJbXBsLmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOworICAgIGlmIChy
b290TGF5ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBs
UmVjdXJzaXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU5LDYgKzU2NSw5IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogCiB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAoIXJvb3RMYXllckltcGwoKSkK
KyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG1fb3duZXItPnZpZXdwb3J0U2l6ZSgpLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC01NjcsMTMgKzU3Niw2IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoKQogICAgIC8vIFJlbmRlcldpZGdldC4KICAg
ICBtX2hlYWRzVXBEaXNwbGF5LT5vbkZyYW1lQmVnaW4oY3VycmVudFRpbWUoKSk7CiAKLSAgICAv
LyBSZWNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBhIHJvb3QgbGF5ZXIuIFRoaXMgbWF5IGJlY29t
ZSBudWxsIGlmCi0gICAgLy8gY29tcG9zaXRpbmcgZ2V0cyB0dXJuZWQgb2ZmIGR1cmluZyBhIHBh
aW50IG9wZXJhdGlvbi4KLSAgICBpZiAoIXJvb3RMYXllcigpKSB7Ci0gICAgICAgIG1fcm9vdEND
TGF5ZXJJbXBsLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICB1cGRhdGVM
YXllcnMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSk7CiB9CiAKQEAgLTU4MiwxMiArNTg0
LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMoKQogICAgIGlmICgh
cm9vdExheWVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRoaXMsIDApOwot
ICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXpl
VHJlZXMocm9vdExheWVyKCktPnBsYXRmb3JtTGF5ZXIoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0
KCkpOwotICAgIH0KLQotCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1l
bW9yeUxpbWl0Qnl0ZXModGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzIC0gbV9jb250ZW50c1Rl
eHR1cmVNYW5hZ2VyLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKSk7CiAgICAgZHJhd0xheWVyc0lu
dGVybmFsKCk7CiAKQEAgLTczMiw3ICs3MjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0xheWVyc0ludGVybmFsKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEND
TGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290Q0NMYXllckltcGwuZ2V0KCk7CisgICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSByb290TGF5ZXJJbXBsKCk7CiAgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2Uo
KSkKQEAgLTg0MCwyMCArODM2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNl
bnQoKQogICAgIG1faGVhZHNVcERpc3BsYXktPm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVt
KiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNo
aWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShj
aGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAg
ICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYg
KGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2
ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIo
dGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBp
eGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJl
Y3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhl
aWdodCgpKTsKQEAgLTk0OCw3ICs5MzAsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIAogTWFuYWdl
ZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJl
KCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290
Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50
c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVu
ICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5j
b250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
b3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCkBAIC0xMjk5LDcgKzEyODEsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRz
LCBpbnQgaW5kZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVu
dCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmlzQ29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9jb250ZXh0LmdldCgpLT5n
ZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCAyZDgwNDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3NWZkLi40MzA1OTAzMWE0
Yjg1NGE3MWMwOWZlZGIyMjIxZjUxZDZlYWExMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3Bs
YXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
clRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1
ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1w
bC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBs
OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
OyAvLyBGSVhNRTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFzcyBDQ0xheWVyVHJlZUhv
c3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7
CkBAIC03MiwxMSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8g
Q2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVz
aW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwq
LCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxl
ZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0
CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVt
KCk7CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXItPnNldHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
JiBjYXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCiAgICAg
Q0NMYXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBjb25zdCBD
Q0xheWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQpAQCAtODQs
MTQgKzg5LDE3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJl
dHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJv
b3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKKyAgICBD
Q0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5
ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29sIGNvbnRleHRTdXBwb3J0
c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAK
ICNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgeyByZXR1cm4gbV9z
a2lhQ29udGV4dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsgfQorICAgIGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUo
KTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lk
dGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgp
LmhlaWdodCgpOyB9CiAKQEAgLTE0MiwyNCArMTUwLDE3IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBsYXllclRyZWVBc1RleHQoKSBjb25zdDsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBj
b21wb3NpdG9yIGNvbnRleHQgaGFzIGFuIGVycm9yLgotICAgIGJvb2wgaXNDb21wb3NpdG9yQ29u
dGV4dExvc3QoKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKIAogICAgIHZvaWQgcmVsZWFz
ZVRleHR1cmVzKCk7CiAKLSAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJD
aHJvbWl1bSopOwotCiAgICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKTsKIAogICAgIHR5
cGVkZWYgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IExheWVyTGlzdDsKICAgICB0eXBl
ZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKLSAgICB2b2lk
IGNsZWFyUm9vdENDTGF5ZXJJbXBsKCk7CiBwcml2YXRlOgotICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3RJbXBsIHdoZW4gdGhhdCBjbGFz
cyBleGlzdHMuCi0gICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKLQot
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShDQ0xheWVyVHJlZUhvc3QqLCBQYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPik7CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVl
SG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
Pik7CiAgICAgYm9vbCBpbml0aWFsaXplKCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXll
ckNocm9taXVtKik7CkBAIC0xOTIsOSArMTkzLDEzIEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNs
ZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKENDTGF5ZXJJbXBsKik7CiAK
LSAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgIC8v
IEZJWE1FOiBSZW1vdmUgQ0NMYXllclRyZWVIb3N0IGZpZWxkCiAgICAgQ0NMYXllclRyZWVIb3N0
KiBtX293bmVyOwogCisgICAgQ0NMYXllclRyZWVIb3N0SW1wbCogbV9vd25lckltcGw7CisKKyAg
ICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0aWVzOworCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwogICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IG1fd2luZG93TWF0cml4OwogCkBAIC0yMzQsOCArMjM5LDYgQEAgcHJpdmF0ZToKICAgICBP
d25QdHI8R3JDb250ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29u
dGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5k
ZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCmluZGV4IDI2Y2U4YjVkOTE5N2JhMzY4Njk0
MjllNmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3YmMxZWMzZmU4Nzk5ZWYxOWE3MWExMzgwZjRiMmQ0
M2EwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKQEAgLTgw
LDcgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1Yklt
YWdlOwogfTsKIAotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEp
CiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVy
ZVVwZGF0ZXJDYW52YXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGV4dHVyZVVw
ZGF0ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PFNrQ2FudmFzPiBtX2NhbnZhczsgLy8gR1BVIGFjY2VsZXJhdGVkIGNhbnZhcy4KIH07CiAjZW5k
aWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUz
YmZmNjE5MWJiYWQ5ZTJjMy4uYTc5ZWExMmM0ZDc0YzE5MWVjNGQ2MDdlYmZkNDhhZDVlMzdkZjgz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDEsNyArMTQxLDcgQEAg
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0
KiBob3N0KQogCiAgICAgY3JlYXRlVGV4dHVyZVVwZGF0ZXIoaG9zdCk7CiAKLSAgICBtX3RleHR1
cmVGb3JtYXQgPSBob3N0LT5iZXN0VGV4dHVyZUZvcm1hdCgpOworICAgIG1fdGV4dHVyZUZvcm1h
dCA9IGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS5iZXN0VGV4dHVyZUZvcm1hdDsK
ICAgICBtX3RleHR1cmVPcmllbnRhdGlvbiA9IHRleHR1cmVVcGRhdGVyKCktPm9yaWVudGF0aW9u
KCk7CiAgICAgbV9zYW1wbGVkVGV4ZWxGb3JtYXQgPSB0ZXh0dXJlVXBkYXRlcigpLT5zYW1wbGVk
VGV4ZWxGb3JtYXQobV90ZXh0dXJlRm9ybWF0KTsKICAgICBtX3RpbGVyID0gQ0NMYXllclRpbGlu
Z0RhdGE6OmNyZWF0ZSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDY1MmQy
OGRmYjNjNjIzNmU3MDNjMTkzZDRlZTU3NmUxNjk5OGQxY2YuLjE2YjUwYjE3MmMwNjJjMjJhOWI1
MTljM2UwZDBjZTcxODcwZjc3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApA
QCAtMTc4LDcgKzE3OCw3IEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVy
ZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJUKGZy
YW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhvc3Qt
Pm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRyZWVI
b3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAgICBm
b3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKysp
IHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVk
VGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmlu
ZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4NzQ2
ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xh
eWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQogCiB2
b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1w
bFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0Nh
bnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFz
TGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6
ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZDZiYzljMzI3MzUy
Njc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi45N2Q2NTFhMWY3Y2M5YjQ3YzA5MWE0ZTM5NDY1
ZWIyOTQzMWUzMmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDEw
ICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRI
b3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQu
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJU
cmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVh
ZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5
ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0KIAogQ0NM
YXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGll
bnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5nR3JhcGhp
Y3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwgbV9jb250
ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAgICA6
IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9mcmFt
ZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSkp
CiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV92aXNpYmxlKHRydWUpCiB7CiB9
CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKLSAgICBtX2xheWVyUmVu
ZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIp
CisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkgeworICAgICAgICAv
LyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRocmVhZGVkIG1vZGUu
IFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZh
bHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOworICAg
IH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKHRo
aXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisKKyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxp
emVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBG
SVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRoZXNlIHZhbHVlcyB3aWxsIG5lZWQgdG8gYmUg
aW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBtX2xheWVyUmVuZGVy
ZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlci0+bWF4VGV4dHVyZVNp
emUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1
cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCkpOwotICAgIG1fY29udGV4dFN1cHBv
cnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKTsKKyAg
ICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3Qg
YmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGlu
ZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVk
UGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsK
ICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEsOCBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6
aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7CiAKLQotI2lmIFVTRShUSFJFQURFRF9DT01Q
T1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGUo
dGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICAvLyBXZSBjaGFu
Z2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVkZWQuCiAg
ICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSNlbmRpZgogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODAgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6Omlu
aXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsKICAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywgMCk7
Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIG1fcHJveHktPnN0b3AoKTsKICAg
ICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJl
Z2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7CisgICAgbV9jbGll
bnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5nID0g
ZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRyZWVI
b3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNpYmxl
KTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwogfQogCi12b2lk
IENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogeworICAgIEFTU0VSVChD
Q1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1i
ZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4
aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExheWVyKCkpCisgICAgICAgIGhvc3RJbXBsLT5z
ZXRSb290TGF5ZXIoVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIo
KS0+cGxhdGZvcm1MYXllcigpLCBob3N0SW1wbC0+cm9vdExheWVyKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIoMCk7CisKICAgICBtX2ZyYW1lTnVtYmVyKys7
CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKK1Bhc3NPd25QdHI8Q0NUaHJlYWQ+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRl
Q29tcG9zaXRvclRocmVhZCgpCiB7Ci0gICAgbV9hbmltYXRpbmcgPSB0cnVlOwotICAgIG1fY2xp
ZW50LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKLSAgICBtX2FuaW1hdGluZyA9
IGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudC0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwog
fQogCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0
OjpjcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkKK1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpCiB7
Ci0gICAgLy8gRklYTUU6IG9ubHkgY2FsbGVkIGluIHRocmVhZGluZyBjYXNlLCBmaXggd2hlbiBw
b3NzaWJsZS4KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0
ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKIH0KIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKENDTGF5ZXJU
cmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCkKK1Bhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpCiB7Ci0gICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gcmVuZGVyZXIobV9sYXllclJlbmRlcmVyKTsKLSAg
ICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKGNsaWVudCwgcmVuZGVyZXIpOwor
ICAgIHJldHVybiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUobV9zZXR0aW5ncyk7CiB9CiAK
LUdyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRleHQoKQordm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsK
LSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCk7CisgICAgbV9jbGllbnQtPmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHN1Y2Nlc3MpOwogfQogCi12b2lkIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQorI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCit2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6c2NoZWR1bGVDb21wb3NpdGUoKQogewotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LSAgICAvLyBGSVhNRTogbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLSNlbHNlCi0gICAgY29tcG9z
aXRlKGZhbHNlKTsKLSAgICBtX2xheWVyUmVuZGVyZXItPmdldEZyYW1lYnVmZmVyUGl4ZWxzKHBp
eGVscywgcmVjdCk7CisgICAgbV9jbGllbnQtPnNjaGVkdWxlQ29tcG9zaXRlKCk7Cit9CiAjZW5k
aWYKKworLy8gVGVtcG9yYXJ5IGhhY2sgdW50aWwgV2ViVmlld0ltcGwgY29udGV4dCBjcmVhdGlv
biBnZXRzIHNpbXBsaWZpZWQKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ0xheWVyVHJlZUhvc3Q6OmNv
bnRleHQoKQoreworICAgIEFTU0VSVCghbV9zZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFk
KTsKKyAgICByZXR1cm4gbV9wcm94eS0+Y29udGV4dCgpOworfQorCitib29sIENDTGF5ZXJUcmVl
SG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQoreworICAgIHJldHVybiBtX3Byb3h5LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbHMs
IHJlY3QpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkK
IHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8g
aW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Ci0j
ZW5kaWYKKyAgICBtX3Byb3h5LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKIH0KIAogdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmludmFsaWRhdGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKQEAgLTE1Myw2ICsxNzEsMTEgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKIH0KIAorY29uc3Qg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NMYXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+bGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcygpOworfQorCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcoKQogewogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTE3Nywx
MyArMjAwLDE3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRSb290TGF5ZXIoR3JhcGhpY3NM
YXllciogbGF5ZXIpCiB7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNz
TGF5ZXIoKS0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50
SG9zdC0+aW52YWxpZGF0ZUVudGlyZUxheWVyKCk7Ci0gICAgaWYgKGxheWVyKSB7CisgICAgaWYg
KGxheWVyKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXll
cigpLT5hZGRDaGlsZChsYXllcik7Ci0gICAgICAgIGxheWVyLT5wbGF0Zm9ybUxheWVyKCktPnNl
dExheWVyUmVuZGVyZXIobV9sYXllclJlbmRlcmVyLmdldCgpKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgbGF5ZXJSZW5kZXJlcigpLT5jbGVhclJvb3RDQ0xheWVySW1wbCgpOworfQogCisjaWYgVVNF
KFNLSUEpCitHckNvbnRleHQqIENDTGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQoKQoreworICAg
IEFTU0VSVChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyk7CisgICAgcmV0dXJuIG1fcHJv
eHktPnNraWFDb250ZXh0KCk7CiB9CisjZW5kaWYKIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNl
dFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29u
dGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCiB7CkBAIC0xOTMsMTE0
ICsyMjAsMzMgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNp
emUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY28KICAgICBtX25vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24pOwogICAgIG1fbm9u
Q29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnNldFNpemUoY29udGVudHNT
aXplKTsKIAotICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpIHsKKyAgICBpZiAodmlzaWJsZVJl
Y3RDaGFuZ2VkKQogICAgICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+aW52YWxpZGF0
ZUVudGlyZUxheWVyKCk7Ci0gICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCi0gICAgICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwotICAgIH0KIAogICAgIHNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaXNp
YmxlKGJvb2wgdmlzaWJsZSkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IGlmICghdmlzaWJsZSkKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yZWxlYXNlVGV4dHVyZXMo
KTsKLSNlbmRpZgorICAgIG1fdmlzaWJsZSA9IHZpc2libGU7CisgICAgbV9wcm94eS0+c2V0TmVl
ZHNDb21taXRBbmRSZWRyYXcoKTsKIH0KIAotUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJSZW5kZXJlcigpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KCkKIHsKLSAgICAvLyBHcmFwaGljc0NvbnRl
eHQzRDo6Y3JlYXRlIG1pZ2h0IGZhaWwgYW5kIHJldHVybiAwLCBpbiB0aGF0IGNhc2UgZmFsbCBi
YWNrIHRvIHNvZnR3YXJlLgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7Ci0gICAgaWYgKCFjb250
ZXh0KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8vIEFjdHVhbGx5IGNyZWF0ZSB0aGUgcmVu
ZGVyZXIuCi0gICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotCi0gICAgLy8g
SWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBhY2NlbGVyYXRlZCBwYWlu
dGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZwotICAgIC8vIGFuZCB0cnkgY3JlYXRp
bmcgdGhlIHJlbmRlcmVyIGFnYWluLgotICAgIGlmIChtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWlu
dGluZyAmJiAhbGF5ZXJSZW5kZXJlcikgewotICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQ
YWludGluZyA9IGZhbHNlOwotICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4dCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGxheWVy
UmVuZGVyZXI7CisgICAgbV9wcm94eS0+bG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CiB9CiAKIFRl
eHR1cmVNYW5hZ2VyKiBDQ0xheWVyVHJlZUhvc3Q6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiB0aGlzIGNsYXNzIHNob3VsZCBvd24gdGhlIGNvbnRlbnRz
IHRleHR1cmUgbWFuYWdlcgotICAgIGlmICghbV9sYXllclJlbmRlcmVyKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KCk7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKIH0KIAog
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZG9D
b21wb3NpdGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZSgpCiB7Ci0jaWZuZGVm
IE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVl
KTsKLSNlbmRpZgotICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+dXBkYXRlTGF5ZXJzKCk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7
Ci0jaWZuZGVmIE5ERUJVRwotICAgIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0SW1wbFRo
cmVhZChmYWxzZSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0
ZShib29sIGZpbmlzaCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21w
b3NpdGUiLCB0aGlzLCAwKTsKLQotICAgIGlmIChtX3JlY3JlYXRpbmdHcmFwaGljc0NvbnRleHQp
IHsKLSAgICAgICAgLy8gcmVhbGxvY2F0ZVJlbmRlcmVyIHdpbGwgcmVxdWVzdCBhIHJlcGFpbnQg
d2hldGhlciBvciBub3QgaXQgc3VjY2VlZGVkCi0gICAgICAgIC8vIGluIGNyZWF0aW5nIGEgbmV3
IGNvbnRleHQuCi0gICAgICAgIHJlYWxsb2NhdGVSZW5kZXJlcigpOwotICAgICAgICBtX3JlY3Jl
YXRpbmdHcmFwaGljc0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIERvIG5vdCBjb21wb3NpdGUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBpcyBhbHJl
YWR5IGxvc3QuCi0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXItPmlzQ29tcG9zaXRvckNvbnRleHRM
b3N0KCkpIHsKLSAgICAgICAgZG9Db21wb3NpdGUoKTsKLQotICAgICAgICAvLyBQdXQgcmVzdWx0
IG9uc2NyZWVuLgotICAgICAgICBtX2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0g
ICAgICAgIC8vIFRyeWluZyB0byByZWNvdmVyIHRoZSBjb250ZXh0IHJpZ2h0IGhlcmUgd2lsbCBu
b3Qgd29yayBpZiBHUFUgcHJvY2VzcwotICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2Ug
R3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQotICAgICAgICAvLyBj
YWxsZWQgYXQgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGlu
ZyBvdXIKLSAgICAgICAgLy8gcmVjb3ZlcnkgYXR0ZW1wdHMgaGVyZS4gSW5zdGVhZCwgd2UgZGV0
YWNoIHRoZSByb290IGxheWVyIGZyb20gdGhlCi0gICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0
ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgotICAgICAg
ICAvLyBhbmQgcmVxdWVzdCBhIHJlcGFpbnQgeWV0IGFnYWluLgotICAgICAgICBtX3JlY3JlYXRp
bmdHcmFwaGljc0NvbnRleHQgPSB0cnVlOwotICAgICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOwotICAgIH0KLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29u
dGV4dCgpCi17Ci0gICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnJlYWxsb2NhdGVSZW5kZXJlcigpCi17Ci0gICAgUmVmUHRy
PExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlciA9IGNyZWF0ZUxheWVyUmVuZGVy
ZXIoKTsKLSAgICBpZiAoIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9jbGllbnQtPmRpZFJl
Y3JlYXRlR3JhcGhpY3NDb250ZXh0KGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGxheWVyUmVuZGVyZXItPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUobV9yb290TGF5ZXIt
PnBsYXRmb3JtTGF5ZXIoKSk7Ci0gICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJSZW5kZXJlcjsK
LQotICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKKyAgICBB
U1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7CisgICAgc3RhdGljX2Nh
c3Q8Q0NTaW5nbGVUaHJlYWRQcm94eSo+KG1fcHJveHkuZ2V0KCkpLT5jb21wb3NpdGVJbW1lZGlh
dGVseSgpOwogfQogI2VuZGlmIC8vICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggOTliOGJmMjA5NGQ4MzY0MTQ4M2I0OWQ5M2M2OTBm
YjFlYWJhZThjNi4uYWFkZDI1MDY0ZWU0MjYwMThjMTZkZTA1ODM1MDhjZTg3MjIwMTQ2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTI3LDE3ICsyNywxOSBAQAogCiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwotY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKIGNsYXNzIENDVGhyZWFkOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBMYXllckNocm9taXVtOwpAQCAtNjUsMzUgKzY3LDY0IEBA
IHN0cnVjdCBDQ1NldHRpbmdzIHsKICAgICBDQ1NldHRpbmdzKCkKICAgICAgICAgICAgIDogYWNj
ZWxlcmF0ZVBhaW50aW5nKGZhbHNlKQogICAgICAgICAgICAgLCBjb21wb3NpdGVPZmZzY3JlZW4o
ZmFsc2UpCisgICAgICAgICAgICAsIGVuYWJsZUNvbXBvc2l0b3JUaHJlYWQoZmFsc2UpCiAgICAg
ICAgICAgICAsIHNob3dGUFNDb3VudGVyKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93UGxhdGZv
cm1MYXllclRyZWUoZmFsc2UpIHsgfQogCiAgICAgYm9vbCBhY2NlbGVyYXRlUGFpbnRpbmc7CiAg
ICAgYm9vbCBjb21wb3NpdGVPZmZzY3JlZW47CisgICAgYm9vbCBlbmFibGVDb21wb3NpdG9yVGhy
ZWFkOwogICAgIGJvb2wgc2hvd0ZQU0NvdW50ZXI7CiAgICAgYm9vbCBzaG93UGxhdGZvcm1MYXll
clRyZWU7CiB9OwogCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBvbiBhbiBJbXBsJ3MgcmVuZGVy
aW5nIGNhcGFiaWxpdGllcyBiYWNrIHRvIHRoZSBDQ0xheWVyVHJlZUhvc3QKK3N0cnVjdCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIHsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkK
KyAgICAgICAgOiBiZXN0VGV4dHVyZUZvcm1hdCgwKQorICAgICAgICAsIHVzaW5nTWFwU3ViKGZh
bHNlKQorICAgICAgICAsIHVzaW5nQWNjZWxlcmF0ZWRQYWludGluZyhmYWxzZSkKKyAgICAgICAg
LCBtYXhUZXh0dXJlU2l6ZSgwKSB7IH0KKworICAgIEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0
OworICAgIGJvb2wgdXNpbmdNYXBTdWI7CisgICAgYm9vbCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRp
bmc7CisgICAgaW50IG1heFRleHR1cmVTaXplOworfTsKKwogY2xhc3MgQ0NMYXllclRyZWVIb3N0
IDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllclRyZWVIb3N0PiB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NMYXllclRyZWVIb3N0PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Q2xp
ZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdCgp
OwogCi0gICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKTsKLQotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhv
c3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpOworICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRl
cmZhY2UgdG8gQ0NQcm94eS4KKyAgICB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1l
QmVnaW5UaW1lKTsKKyAgICB2b2lkIHByZUNvbW1pdChDQ0xheWVyVHJlZUhvc3RJbXBsKik7IC8v
IFRlbXBvcmFyeSBoYWNrIHVudGlsIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyBp
cyBzcGxpdCBhcGFydC4KKyAgICB2b2lkIGNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsK
KyAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CisgICAg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOworICAgIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwoKTsKKyAgICB2b2lkIGRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3Vj
Y2Vzcyk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIHNjaGVkdWxl
Q29tcG9zaXRlKCk7CisjZW5kaWYKIAorICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2Ug
dG8gV2ViVmlldy4KICAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0
aW5nOyB9CiAgICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV9hbmltYXRp
bmcgPSBhbmltYXRpbmc7IH0gLy8gQ2FuIGJlIHJlbW92ZWQgd2hlbiBub24tdGhyZWFkZWQgc2No
ZWR1bGluZyBtb3ZlcyBpbnNpZGUuCiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVu
dCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQorICAgIHZvaWQgY29tcG9zaXRlKCk7CisjZW5kaWYKKwogICAgIEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0KCk7CiAKLSAgICB2b2lkIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYpOworICAgIC8vIENvbXBvc2l0ZXMgYW5kIGF0dGVtcHRzIHRvIHJl
YWQgYmFjayB0aGUgcmVzdWx0IGludG8gdGhlIHByb3ZpZGVkCisgICAgLy8gYnVmZmVyLiBJZiBp
dCB3YXNuJ3QgcG9zc2libGUsIGUuZy4gZHVlIHRvIGNvbnRleHQgbG9zdCwgd2lsbCByZXR1cm4K
KyAgICAvLyBmYWxzZS4KKyAgICBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYpOwogCiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKIApA
QCAtMTAxLDYgKzEzMiw5IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgaW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKIAorICAgIGNvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2
b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApAQCAtMTEwLDYgKzE0NCwx
MiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0dGluZ3M7IH0KIAorICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxv
dyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3Ig
YWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisg
ICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKICAgICB2b2lkIHNldFZpZXdw
b3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGVudHNT
aXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCiAgICAgY29uc3QgSW50U2l6
ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KQEAgLTEx
NywyMSArMTU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCi0g
ICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGgu
Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGNvbXBvc2l0ZShib29s
IGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwotCi0gICAgTGF5
ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXll
clJlbmRlcmVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9z
dCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3Vi
KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KLSAgICBpbnQgbWF4
VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVTaXplOyB9Ci0gICAgR0Mz
RGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKSB7IHJldHVybiBtX2Jlc3RUZXh0dXJlRm9ybWF0OyB9
Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYgKzE2NywxMyBAQCBwcml2YXRlOgog
CiAgICAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZUxheWVyUmVuZGVy
ZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRl
cmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkb0Nv
bXBvc2l0ZSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0KLSAgICBib29sIG1f
cmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0jZW5kaWYKLQotICAgIGludCBtX21heFRleHR1cmVTaXpl
OwotICAgIEdDM0RlbnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7Ci0gICAgYm9vbCBtX2NvbnRleHRT
dXBwb3J0c01hcFN1YjsKLQogICAgIGJvb2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ0xheWVyVHJl
ZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKLSAgICBP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5OworICAgIE93blB0cjxDQ1By
b3h5PiBtX3Byb3h5OwogCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwog
ICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0OwpAQCAtMTY3LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgQ0NTZXR0aW5ncyBtX3Nl
dHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBib29sIG1fdmlzaWJs
ZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEw
OTI0ZmY1Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
cjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9z
dEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZyYW1l
TnVtYmVyKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMxOGE0YTcxNDIzMmQzMTg0
ZDJmZWQ0YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwot
Ci0vLyBGSVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQotY2xh
c3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
Q0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+Q0NMYXll
clRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5
ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLQotcHJvdGVjdGVkOgotICAgIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNGUyZDFiODQzYzE4MzJjZmFmYTE0
MzU0ODYyY2JmYTE1Mzg2NjlhZS4uNjNhNGViMjgwNWI5MGRkYTgwMjYzMjg3OGVlYzRjMzhkMWQ2
OGZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTM4LDI0
ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRl
cmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVyZXIpKTsKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MpKTsKIH0KIAotQ0NM
YXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBs
Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJl
cikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0
aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9m
cmFtZU51bWJlcigwKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9jb21taXRQZW5k
aW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9yZWRy
YXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIAogQ0NM
YXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogewogICAgIFRSQUNFX0VW
RU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywg
MCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5j
bG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKQEAg
LTY0LDcxICs2MywxMDYgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgp
CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogewotICAgIG1f
Y29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKLXZvaWQg
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGljc0NvbnRleHQzRCogQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYgYSBjb21taXQgaXMgcGVu
ZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAot
ICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxv
Y2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBpZiAobV9jb21taXRQZW5k
aW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5
ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
OjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6
ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOwotICAg
IG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOwor
ICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKQorICAgICAgICBt
X2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7
Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29u
dGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVh
ZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQs
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgKytt
X2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVj
dCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxl
bnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQor
eworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6
IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRMb3N0KQotICAgICAgICAg
ICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRl
eHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRl
eHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9s
YXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICArK21fZnJhbWVOdW1iZXI7
Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjps
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJl
bmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXNl
bnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYg
IWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Cit9CiAK
LSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhl
cmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCi0gICAgZG91Ymxl
IGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1l
QmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4
ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+Z2V0RnJh
bWVidWZmZXJQaXhlbHMocGl4ZWxzLCByZWN0KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpzZXROZWVkc1JlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RM
YXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcikKIHsKLSAgICBpZiAobV9yZWRyYXdQ
ZW5kaW5nIHx8IG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOworICAgIG1fcm9vdExh
eWVySW1wbCA9IGxheWVyOworfQogCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdElt
cGw6OnNldE5lZWRzUmVkcmF3IiwgdGhpcywgMCk7Ci0gICAgbV9yZWRyYXdQZW5kaW5nID0gdHJ1
ZTsKLSAgICBtX2NsaWVudC0+cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwordm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKGJvb2wgdmlzaWJsZSkKK3sKKyAgICBpZiAo
bV9sYXllclJlbmRlcmVyICYmICF2aXNpYmxlKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJl
bGVhc2VUZXh0dXJlcygpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXll
cnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24sIGJvb2wqIGNvbnRl
eHRMb3N0KQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIGltcGxIYWNrLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gSWYgbV9s
YXllclJlbmRlcmVyIGV4aXN0cywgdGhlbiB3ZSBhcmUgcmVjb3ZlcmluZyBmcm9tIGEgbG9zdCBj
b250ZXh0CisgICAgYm9vbCByZWNyZWF0aW5nUmVuZGVyZXIgPSBtX2xheWVyUmVuZGVyZXI7CisK
KyAgICAvLyBGaXJzdCB0aW1lIGxheWVyUmVuZGVyZXIgY3JlYXRpb24KKyAgICBSZWZQdHI8TGF5
ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyOworICAgIGlmICghcmVjcmVhdGluZ1Jl
bmRlcmVyKQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpj
cmVhdGUoaW1wbEhhY2ssIHRoaXMsIGNvbnRleHQpOworICAgIGVsc2UKKyAgICAgICAgbGF5ZXJS
ZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+
b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisKKworICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwg
YW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxl
cmF0ZWQgcGFpbnRpbmcKKyAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fp
bi4KKyAgICBpZiAoIWxheWVyUmVuZGVyZXIgJiYgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcpIHsKKyAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKKwor
ICAgICAgICBpZiAoIXJlY3JlYXRpbmdSZW5kZXJlcikKKyAgICAgICAgICAgIGxheWVyUmVuZGVy
ZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShtX2xheWVyUmVuZGVyZXItPm93bmVyKCksIHRoaXMsIGNvbnRl
eHQpOworICAgIH0KIAotICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXll
cigpKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotICAgICAgICBt
X2xheWVyUmVuZGVyZXItPnByZXNlbnQoKTsKKyAgICAvLyBJZiByZWNyZWF0aW5nIHJlbmRlcmVy
LCB1cGRhdGUgdGhlIGxheWVycyB0byBwb2ludCBhdCB0aGUgbmV3IHJlbmRlcmVyCisgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5yb290TGF5ZXIoKS0+
cGxhdGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyUmVuZGVyZXIu
Z2V0KCkpOwogCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9sYXllclJl
bmRlcmVyLT5jb250ZXh0KCk7Ci0gICAgICAgICpjb250ZXh0TG9zdCA9IGNvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUjsKLSAgICB9IGVsc2UKLSAgICAgICAgKmNvbnRleHRMb3N0ID0gZmFsc2U7
Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7CisgICAgbV9sYXllclJlbmRlcmVyID0gbGF5ZXJS
ZW5kZXJlcjsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOworfQorCisvLyBGSVhNRTogbW92
ZSBhbGwgdGhpcyBjb2RlIHRvIENDTGF5ZXJUcmVlSG9zdAordm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjp1cGRhdGVMYXllcnMoKQoreworICAgIGlmIChtX3Jvb3RMYXllckltcGwgJiYgbV9sYXll
clJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOworfQor
Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZp
ZXdwb3J0U2l6ZSkKK3sKKyAgICBib29sIGNoYW5nZWQgPSB2aWV3cG9ydFNpemUgIT0gbV92aWV3
cG9ydFNpemU7CisgICAgbV92aWV3cG9ydFNpemUgPSB2aWV3cG9ydFNpemU7CisgICAgaWYgKGNo
YW5nZWQpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+dmlld3BvcnRDaGFuZ2VkKCk7CiB9CiAK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBjNDExY2NjNzM1NTRm
MWRkMzJiY2NlMmUxNWU0OGRiZWNhYzRhODhlLi5kNjhiYjhkNjA3MzM5MGViZDA4NGU5MTRjYWIw
MTkyNjFmYTkwNzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0y
NSw1NiArMjUsNjkgQEAKICNpZm5kZWYgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAjZGVmaW5lIEND
TGF5ZXJUcmVlSG9zdEltcGxfaAogCi0jaW5jbHVkZSAiY2MvQ0NUaHJlYWQuaCIKKyNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdy
Q29udGV4dDsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQ29tcGxl
dGlvbkV2ZW50OworY2xhc3MgQ0NMYXllckltcGw7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21p
dW07Ci0KLS8vIFByb3ZpZGVzIHNjaGVkdWxpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGEgQ0NMYXll
clRyZWVIb3N0SW1wbAotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCAgewotcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBm
cmFtZUJlZ2luVGltZSkgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRy
ZWVIb3N0SW1wbENsaWVudCgpIHsgfQotfTsKK3N0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzOwogCiAvLyBDQ0xheWVyVHJlZUhvc3RJbXBsIG93bnMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
YXMgd2VsbCBhcyBhc3NvY2lhdGVkIHJlbmRlcmluZyBzdGF0ZQogY2xhc3MgQ0NMYXllclRyZWVI
b3N0SW1wbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbCk7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJD
aHJvbWl1bT4pOworICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNy
ZWF0ZShjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1w
bCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdENvbXBsZXRlKCk7CiAKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwor
CiAgICAgdm9pZCBkcmF3TGF5ZXJzKCk7CiAKKyAgICB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygp
OwogICAgIGludCBmcmFtZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVOdW1iZXI7IH0K
IAotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCk7CisgICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhv
c3QqIG93bmVySGFjaywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIGJvb2wg
aXNDb250ZXh0TG9zdCgpOworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJl
cigpIHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQorICAgIGNvbnN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKwor
ICAgIHZvaWQgcHJlc2VudCgpOworCisgICAgdm9pZCByZWFkYmFjayh2b2lkKiBwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKKworICAgIENDTGF5ZXJJbXBsKiByb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Jvb3RMYXllckltcGwuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFJvb3RMYXllcihQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPik7CisKKyAgICB2b2lkIHNldFZpc2libGUoYm9vbCk7CiAKICAg
ICBpbnQgc291cmNlRnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUZyYW1lTnVt
YmVyOyB9CiAgICAgdm9pZCBzZXRTb3VyY2VGcmFtZU51bWJlcihpbnQgZnJhbWVOdW1iZXIpIHsg
bV9zb3VyY2VGcmFtZU51bWJlciA9IGZyYW1lTnVtYmVyOyB9CiAKKyAgICB2b2lkIHVwZGF0ZUxh
eWVycygpOworCisgICAgdm9pZCBzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNp
emUpOworICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmlld3BvcnRTaXplOyB9CisKIHByb3RlY3RlZDoKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqLCBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4pOwotICAgIHZvaWQgZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCos
IGJvb2wqIGNvbnRleHRMb3N0KTsKKyAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKGNv
bnN0IENDU2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKICAgICBpbnQg
bV9mcmFtZU51bWJlcjsKIAogcHJpdmF0ZToKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50
KiBtX2NsaWVudDsKLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKICAgICBSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0gICAgYm9vbCBtX3JlZHJhd1BlbmRp
bmc7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CisgICAgQ0NTZXR0
aW5ncyBtX3NldHRpbmdzOworICAgIEludFNpemUgbV92aWV3cG9ydFNpemU7CiB9OwogCiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NjkyODg1NjQ1OTZkODc4MjY3NjYxZDNmOTQ2MWViZmI2
NjJlOTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuaCIKLQotI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCi0jaW5jbHVk
ZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLQotdXNp
bmcgbmFtZXNwYWNlIFdURjsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2Ugewot
Q0NUaHJlYWQqIGNjVGhyZWFkOwotaW50IG51bVByb3hpZXMgPSAwOwotfQotCi1DQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eShDQ0xheWVyVHJlZUhvc3Qq
IGxheWVyVHJlZUhvc3QpCi0gICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCi0gICAgLCBtX2xh
eWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG51bVByb3hpZXMrKzsKLSAgICBpZiAoIWNj
VGhyZWFkKQotICAgICAgICBjY1RocmVhZCA9IGxheWVyVHJlZUhvc3QtPmNsaWVudCgpLT5jcmVh
dGVDb21wb3NpdG9yVGhyZWFkKCkubGVha1B0cigpOwotfQotCi0KLXZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbFByb3h5OjpzdGFydCgpCi17Ci0gICAgLy8gQ3JlYXRlIExheWVyVHJlZUhvc3RJbXBs
LgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RU
YXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpp
bml0SW1wbE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7
Ci0gICAgY29tcGxldGlvbi53YWl0KCk7Ci19Ci0KLUNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6fkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSIsIHRoaXMsIDApOwot
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsICYmICFtX2xheWVyVHJlZUhvc3QpOyAvLyBtYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQu
Ci0KLSAgICBudW1Qcm94aWVzLS07Ci0gICAgaWYgKCFudW1Qcm94aWVzKSB7Ci0gICAgICAgIGRl
bGV0ZSBjY1RocmVhZDsKLSAgICAgICAgY2NUaHJlYWQgPSAwOwotICAgIH0KLX0KLQotYm9vbCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzU3RhcnRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUUkFD
RV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dyIsIHRoaXMsIDApOwotICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKLXsKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2so
dGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFk
KSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wKCkKLXsKLSAgICBU
UkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzdG9wIiwgdGhpcywgMCk7Ci0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0ZXMg
dGhlIGltcGwuCi0gICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKLSAgICBjY1RocmVh
ZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgQVNTRVJU
KCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gdmVyaWZ5IHRoYXQgdGhlIGltcGwgZGVsZXRlZC4K
LSAgICBtX2xheWVyVHJlZUhvc3QgPSAwOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eTo6cG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpCi17Ci0gICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
cmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIEND
TWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0LCBmcmFtZUJlZ2luVGltZSkp
OwotfQotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omlz
TWFpblRocmVhZCgpCi17Ci0gICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Ci19Ci0KLSNpZiBV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gY3VycmVudFRocmVhZCgpID09IGNjVGhyZWFk
LT50aHJlYWRJRCgpOwotfQotI2Vsc2UKLW5hbWVzcGFjZSB7Ci1ib29sIGZha2VJbXBsVGhyZWFk
ID0gZmFsc2U7Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJl
YWQoKQotewotICAgIHJldHVybiBmYWtlSW1wbFRocmVhZDsKLX0KLQotdm9pZCBDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCB2YWx1ZSkKLXsKLSAgICBmYWtlSW1w
bFRocmVhZCA9IHZhbHVlOwotfQotI2VuZGlmIC8vIFVTRShUSFJFQURFRF9DT01QT1NJVElORykK
LQotI2VuZGlmIC8vICFOREVCVUcKLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJl
cXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpCi17Ci0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgfQot
Ci0gICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7Ci0KLSAgICBPd25QdHI8Q0NMYXllclRyZWVI
b3N0Q29tbWl0dGVyPiBjb21taXR0ZXIgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb21taXR0ZXIoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmJlZ2luQ29tbWl0KCk7Ci0K
LSAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6cGVyZm9y
bUNvbW1pdAotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQt
PnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5Ojpjb21taXRPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbW1pdHRlci5n
ZXQoKSksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7Ci0gICAgY29tcGxl
dGlvbi53YWl0KCk7Ci0KLSAgICBjb21taXR0ZXIuY2xlYXIoKTsKLQotICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKiBjb21taXR0ZXIs
IENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0
T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29t
bWl0KCk7Ci0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21t
aXQiLCB0aGlzLCAwKTsKLSAgICAgICAgY29tbWl0dGVyLT5jb21taXQobV9sYXllclRyZWVIb3N0
LCBtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKLSAgICB9Ci0gICAgY29tcGxldGlvbi0+c2ln
bmFsKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOwotfQot
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNP
bkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBp
ZiAobV9sYXllclRyZWVIb3N0SW1wbCkKLSAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZHJh
d0xheWVycygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHND
b21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkgJiYgbV9sYXllclRyZWVIb3N0SW1wbCk7
Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLX0K
LQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVh
ZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgp
ICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5l
ZWRzUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppbml0SW1w
bE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkIiwgdGhp
cywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCh0aGlzKTsKLSAg
ICBjb21wbGV0aW9uLT5zaWduYWwoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21w
bGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6Omxh
eWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1w
bFRocmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7Ci0gICAgY29tcGxl
dGlvbi0+c2lnbmFsKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjA3ZTU2MTc2MmFj
MWRkZjlkZDg3ODM3OGQ1NDYzNTZjNzg3YmEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9o
Ci0jZGVmaW5lIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eV9oCi0KLSNpbmNsdWRlICJjYy9DQ0Nv
bXBsZXRpb25FdmVudC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ0NM
YXllclRyZWVIb3N0OwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOwotCi1jbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkgOiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVu
dCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5KTsK
LXB1YmxpYzoKLSAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKTsKLQotICAg
IGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVk
cmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc1JlZHJhdygpOwotCi0gICAgdm9pZCBzdGFydCgpOyAv
LyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdXNpbmcgdGhlIHByb3h5LgotICAgIHZvaWQgc3RvcCgp
OyAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgZGVsZXRpbmcgdGhlIHByb3h5LgotCi0gICAgLy8g
Q0NMYXllclRyZWVIb3N0SW1wbENpZW50IC0tIGNhbGxlZCBvbiBDQ1RocmVhZAotICAgIHZpcnR1
YWwgdm9pZCBwb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKTsK
LQotI2lmbmRlZiBOREVCVUcKLSAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKLSAgICBz
dGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQotICAgIC8vIEZha2UgdGhyZWFkZWQgY29tcG9zaXRpbmcgc28gd2UgY2FuIGNhdGNoIGluY29y
cmVjdCB1c2FnZS4KLSAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOwotI2VuZGlm
Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eShDQ0xheWVyVHJlZUhvc3QqKTsKLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKSA9IDA7Ci0gICAgQ0NMYXllclRy
ZWVIb3N0KiBob3N0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclRyZWVIb3N0OyB9Ci0KLXByaXZh
dGU6Ci0gICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAotICAgIHZvaWQgcmVxdWVzdEZyYW1l
QW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSAgICAvLyBDYWxsZWQgb24gQ0NU
aHJlYWQKLSAgICB2b2lkIGNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
KiwgQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKCk7
Ci0gICAgdm9pZCBpbml0SW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLSAgICB2
b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgc2V0TmVl
ZHNSZWRyYXdPbkNDVGhyZWFkKCk7Ci0gICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCopOwotCi0gICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBv
bmx5LgotICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOwotCi0gICAgLy8gQWNjZXNzZWQgb24gbWFp
biB0aHJlYWQgb25seS4KLSAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKLQot
ICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBk
dXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Ci19OwotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhy
ZWFkVGFzay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NNYWluVGhyZWFkVGFzay5oCmluZGV4IGZhYzZlNjQzZjA1YTE4YmJiYWFkNTdiMjliYmMwM2E2
MjgwZWFjOGEuLjRjMzNiYWEwN2FkZDM1NzczOWRkYjUxNzYxZTg0N2I3NGU1MWMzMzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKQEAgLTE1OCw2ICsxNTgsODggQEAgcHJpdmF0ZToK
ICAgICBQMyBtX3BhcmFtZXRlcjM7CiB9OwogCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitjbGFzcyBNYWlu
VGhyZWFkVGFzazQgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCk7CisgICAgdHlwZWRl
ZiBNYWluVGhyZWFkVGFzazQ8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4g
TWFpblRocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNr
VHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOworICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFt
NDsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNlLCBtZXRo
b2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQpKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s0KFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKKyAgICAgICAgOiBDQ01haW5UaHJlYWQ6OlRhc2so
aW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1l
dGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAg
ICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChw
YXJhbWV0ZXI0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2so
KQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9k
KShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJh
bWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVyMjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAg
UDQgbV9wYXJhbWV0ZXI0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIE1QNT4KK2NsYXNzIE1haW5UaHJlYWRUYXNrNSA6IHB1YmxpYyBDQ01haW5UaHJlYWQ6OlRh
c2sgeworcHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1Q
MywgTVA0LCBNUDUpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s1PFQsIFAxLCBNUDEsIFAy
LCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQsIFA1LCBNUDU+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQ
YXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQ
YXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8TWFpblRocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1l
dGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0z
IHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgTWFpblRocmVhZFRhc2tJbXBsKGluc3RhbmNl
LCBtZXRob2QsIHBhcmFtZXRlcjEsIHBhcmFtZXRlcjIsIHBhcmFtZXRlcjMsIHBhcmFtZXRlcjQs
IHBhcmFtZXRlcjUpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWFpblRocmVhZFRhc2s1KFQq
IGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFt
ZXRlcjUpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAs
IG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAg
ICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMo
cGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjUocGFyYW1ldGVyNSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3Rh
bmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVy
MywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBN
ZXRob2QgbV9tZXRob2Q7CisgICAgUDEgbV9wYXJhbWV0ZXIxOworICAgIFAyIG1fcGFyYW1ldGVy
MjsKKyAgICBQMyBtX3BhcmFtZXRlcjM7CisgICAgUDQgbV9wYXJhbWV0ZXI0OworICAgIFA1IG1f
cGFyYW1ldGVyNTsKK307CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBQYXNzT3duUHRyPENDTWFp
blRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCiAgICAgVCogY29uc3QgY2FsbGVl
LApAQCAtMjE1LDYgKzI5Nyw0NiBAQCBQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3Jl
YXRlTWFpblRocmVhZFRhc2soCiAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShw
YXJhbWV0ZXIzKSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+CitQYXNzT3duUHRyPENDTWFpblRocmVh
ZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAg
IHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCksCisgICAgY29uc3QgUDEmIHBh
cmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFt
ZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQpCit7CisgICAgcmV0dXJuIE1haW5UaHJl
YWRUYXNrNDxULCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46
OlR5cGUsIE1QND46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7CisKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlw
ZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5h
bWUgUDUsIHR5cGVuYW1lIE1QNT4KK1Bhc3NPd25QdHI8Q0NNYWluVGhyZWFkOjpUYXNrPiBjcmVh
dGVNYWluVGhyZWFkVGFzaygKKyAgICBUKiBjb25zdCBjYWxsZWUsCisgICAgdm9pZCAoVDo6Km1l
dGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAor
ICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LAorICAgIGNvbnN0IFA1JiBwYXJhbWV0ZXI1KQorewor
ICAgIHJldHVybiBNYWluVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAy
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhv
ZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENy
b3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIENDTWFpblRocmVhZFRhc2tfaAorI2VuZGlmIC8vIE1haW5UaHJlYWRUYXNr
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCA2M2VkY2YwZDY3YTY4
NGY1ZGJlMGExMmQ1ZDlkMjYyYTBiMTRhYzIzLi5hOWY0NTBlZDQ4MjQ1ZDgxYjBjNDMwNzJjYTM5
MzcxMmQwZGQzNzg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0z
MSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUg
IkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDgsNyArNDgsNyBAQCBDQ1Bs
dWdpbkxheWVySW1wbDo6fkNDUGx1Z2luTGF5ZXJJbXBsKCkKIAogdm9pZCBDQ1BsdWdpbkxheWVy
SW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAg
QVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CiAgICAgY29uc3QgQ0NQbHVnaW5MYXllckltcGw6OlBy
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyUHJvZ3JhbSgpOwog
ICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kNjFhMmU1M2VkMjMwZjk2N2VlMWQ4NWRkMDgzY2JhY2Y5YzI2NzE4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQcm94eS5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorCisjaW5jbHVkZSAi
VHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUg
ImNjL0NDTWFpblRocmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZm5kZWYgTkRFQlVHCitib29sIENDUHJveHk6OmlzTWFpblRo
cmVhZCgpCit7CisgICAgcmV0dXJuIDo6aXNNYWluVGhyZWFkKCk7Cit9CisKK25hbWVzcGFjZSB7
Citib29sIGZha2VJbXBsVGhyZWFkID0gZmFsc2U7CitzdGF0aWMgV1RGOjpUaHJlYWRJZGVudGlm
aWVyIGltcGxUaHJlYWRJRDsKK30KKworYm9vbCBDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKQorewor
ICAgIHJldHVybiBmYWtlSW1wbFRocmVhZCB8fCBjdXJyZW50VGhyZWFkKCkgPT0gaW1wbFRocmVh
ZElEOworfQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoYm9vbCBpc0ltcGxUaHJlYWQp
Cit7CisgICAgZmFrZUltcGxUaHJlYWQgPSBpc0ltcGxUaHJlYWQ7Cit9CisKK3ZvaWQgQ0NQcm94
eTo6c2V0SW1wbFRocmVhZChXVEY6OlRocmVhZElkZW50aWZpZXIgaWQpCit7CisgICAgaW1wbFRo
cmVhZElEID0gaWQ7Cit9CisKKyNlbmRpZiAvLyAhTkRFQlVHCisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi43NDVkMmNkYWMwYTlmOTNhMTg5ZjRhMTAzNzJlZDA3ZDVhYTg4YmViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQcm94eS5oCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDUHJv
eHlfaAorI2RlZmluZSBDQ1Byb3h5X2gKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCisjaWYg
VVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDQ1RocmVhZDsKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKK2NsYXNzIENDTGF5
ZXJUcmVlSG9zdEltcGw7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50OworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKK2Ns
YXNzIFRleHR1cmVNYW5hZ2VyOworCisvLyBBYnN0cmFjdCBjbGFzcyByZXNwb25zaWJsZSBmb3Ig
cHJveHlpbmcgY29tbWFuZHMgZnJvbSB0aGUgbWFpbi10aHJlYWQgc2lkZSBvZgorLy8gdGhlIGNv
bXBvc2l0b3Igb3ZlciB0byB0aGUgY29tcG9zaXRvciBpbXBsZW1lbnRhdGlvbi4KK2NsYXNzIEND
UHJveHkgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDUHJveHkpOworcHVibGljOgorICAg
IHZpcnR1YWwgfkNDUHJveHkoKSB7IH0KKworICAgIHZpcnR1YWwgYm9vbCBjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCkgPSAwOworCisgICAgdmlydHVhbCBib29sIGlzU3Rh
cnRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5k
ZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykgPSAwOworCisgICAgdmlydHVhbCBjb25z
dCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkg
Y29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBw
cm94eS4KKyAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpID0gMDsgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KKworICAgIC8vIERlYnVnIGhvb2tzCisjaWZuZGVmIE5E
RUJVRworICAgIHN0YXRpYyBib29sIGlzTWFpblRocmVhZCgpOworICAgIHN0YXRpYyBib29sIGlz
SW1wbFRocmVhZCgpOworI2VuZGlmCisKKyAgICAvLyBUZXN0aW5nIGhvb2tzCisgICAgdmlydHVh
bCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpID0gMDsKKworICAgIC8vIEhvcnJpYmxlIHVn
bHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRl
eHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisj
aWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgPSAwOwor
I2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSByZW5kZXJfd2lkZ2V0IHN0aWxs
IGRvZXMgc2NoZWR1bGluZyBmb3IgQ0NMYXllclRyZWVIb3N0TWFpblRocmVhZEkKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgPSAwOworCisgICAgLy8gVGVtcG9yYXJ5
IGhhY2sgd2hpbGUgTGF5ZXJDaHJvbWl1bXMgaG9sZCByZWZlcmVuY2VzIHRvIExheWVyUmVuZGVy
ZXJDaHJvbWl1bXMKKyAgICB2aXJ0dWFsIFRleHR1cmVNYW5hZ2VyKiBjb250ZW50c1RleHR1cmVN
YW5hZ2VyKCkgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQ0NQcm94eSgpIHsgfQorICAgIGZyaWVu
ZCBjbGFzcyBTY29wZWRTZXRJbXBsVGhyZWFkOworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKGJvb2wpOworICAgIHN0YXRpYyB2b2lkIHNldEltcGxUaHJlYWQo
V1RGOjpUaHJlYWRJZGVudGlmaWVyKTsKKyNlbmRpZgorfTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNThmNTE3MjE0MmFi
OTJhY2ZmODFhZTE2N2M1NTQ5YmZlZWUyYTY2YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
Y3BwCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNp
bmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7CitwdWJsaWM6CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCgpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVh
ZCh0cnVlKTsKKyNlbmRpZgorICAgIH0KKyAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCisgICAg
eworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7
CisjZW5kaWYKKyAgICB9Cit9OworCitQYXNzT3duUHRyPENDUHJveHk+IENDU2luZ2xlVGhyZWFk
UHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0
dXJuIGFkb3B0UHRyKG5ldyBDQ1NpbmdsZVRocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30K
KworQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkK
KyAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKKyAgICAsIG1fcmVjcmVhdGluZ0dyYXBoaWNz
Q29udGV4dChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6
Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRy
ZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworfQorCitDQ1NpbmdsZVRocmVhZFBy
b3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xl
VGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1f
bGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9v
bCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMs
IGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgaWYgKCFkb0NvbXBvc2l0ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhw
aXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOworfQorCit2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJU
cmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVy
SGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIG1fcmVjcmVh
dGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisgICAgaWYgKG1fY29tbWl0UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworI2lmICFVU0Uo
VEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgbV9sYXllclRyZWVIb3N0LT5zY2hlZHVsZUNvbXBv
c2l0ZSgpOworI2Vsc2UKKyAgICAvLyBTaW5nbGUgdGhyZWFkZWQgb25seSB3b3JrcyB3aXRoIFRI
UkVBREVEX0NPTVBPU0lUSU5HLgorICAgIENSQVNIKCk7CisjZW5kaWYKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgLy8gRklYTUU6IE9uY2Ug
d2UgbW92ZSByZW5kZXJfd2lkZ2V0IHNjaGVkdWxpbmcgaW50byB0aGlzIGNsYXNzLCB3ZSBjYW4K
KyAgICAvLyB0cmVhdCByZWRyYXcgcmVxdWVzdHMgbW9yZSBlZmZpY2llbnRseSB0aGFuIGNvbW1p
dEFuZFJlZHJhdyByZXF1ZXN0cy4KKyAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworfQor
Cit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJD
Q1NpbmdsZVRocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIH0KKyAgICBtX2xheWVyVHJlZUhv
c3QgPSAwOworfQorCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnNraWFDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5
ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpOworfQorI2VuZGlmCisKK1RleHR1cmVNYW5hZ2Vy
KiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkKK3sKKyAgICBy
ZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7Cit9CisKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorLy8gQ2Fs
bGVkIGJ5IHRoZSBsZWdhY3kgc2NoZWR1bGluZyBwYXRoIChlLmcuIHdoZXJlIHJlbmRlcl93aWRn
ZXQgZG9lcyB0aGUgc2NoZWR1bGluZykKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9z
aXRlSW1tZWRpYXRlbHkoKQoreworICAgIC8vIENvbXBvc2l0ZUlmTmVlZGVkIHdpbGwgbm90IG9j
Y3VyIGlmICFtX2NvbW1pdFBlbmRpbmcuIFNvLCBzZXQgdGhlIGJpdCBzbworICAgIC8vIGl0IHN1
Y2NlZWRzLiBUaGlzIGhhY2sgY2FuIGdvIGF3YXkgb25jZSB0aGUgcHJveGllcyBhc3N1bWUgZnVs
bAorICAgIC8vIHNjaGVkdWxpbmcgcmVzcG9uc2liaWxpdHkuCisgICAgbV9jb21taXRQZW5kaW5n
ID0gdHJ1ZTsKKworICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7Cit9CisjZW5kaWYKKwordm9pZCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fY29t
bWl0UGVuZGluZykgeworICAgICAgICAvLyBVcGRhdGUKKyAgICAgICAgZG91YmxlIGZyYW1lQmVn
aW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5hbmltYXRl
QW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKworICAgICAgICAvLyBQcmVjb21taXQgaXMgYSB0
ZW1wb3Jhcnkgc3RlcCB3ZSBuZWVkIHRvIHBlcmZvcm0gdG8gcHVzaCB0aGluZ3MgbGlrZQorICAg
ICAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCisg
ICAgICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMoKSBpc24ndCBzcGxpdCBp
bnRvIGhvc3QgYW5kIGltcGwgcGFydHMuCisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+cHJlQ29tbWl0
KG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIC8vIFRoaXMg
c2hvdWxkIGJlY29tZSBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVycygpIG9uY2Ugd2Ugc3Bs
aXQgYXBhcnQKKyAgICAgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycy4KKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAgICAgLy8g
Q29tbWl0CisgICAgICAgIHsKKyAgICAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
KyAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CisgICAgICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkp
OworICAgICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIERyYXcKKyAgICAgICAgaWYgKGRvQ29tcG9zaXRlKCkpCisg
ICAgICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcmVzZW50KCk7CisgICAgfQorfQorCiti
b29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmRvQ29tcG9zaXRlKCkKK3sKKyAgICBpZiAobV9yZWNy
ZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7CisgICAgICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOworICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgICAgICBib29s
IG9rID0gIW1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKDAsIGNv
bnRleHQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250
ZXh0KG9rKTsKKyAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Cisg
ICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICB7CisgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5kcmF3TGF5ZXJzKCk7CisgICAgICBpZiAobV9sYXllclRyZWVI
b3N0SW1wbC0+aXNDb250ZXh0TG9zdCgpKSB7CisgICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292
ZXIgdGhlIGNvbnRleHQgcmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCisg
ICAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9y
TWVzc2FnZSB3aWxsIG9ubHkgYmUKKyAgICAgICAgICAvLyBjYWxsZWQgYXQgdGhlIG5leHQgaXRl
cmF0aW9uIG9mIHRoZSBtZXNzYWdlIGxvb3AsIHJldmVydGluZyBvdXIKKyAgICAgICAgICAvLyBy
ZWNvdmVyeSBhdHRlbXB0cyBoZXJlLiBJbnN0ZWFkLCB3ZSBkZXRhY2ggdGhlIHJvb3QgbGF5ZXIg
ZnJvbSB0aGUKKyAgICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0
IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KKyAgICAgICAgICAvLyBhbmQgcmVxdWVz
dCBhIHJlcGFpbnQgeWV0IGFnYWluLgorICAgICAgICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IHRydWU7CisgICAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYzRl
ODNhYTM4NzQ2MzYyZDYyOGUyZGY3ZWIyNWU5NGU3NzZmNmIzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ0NTaW5n
bGVUaHJlYWRQcm94eV9oCisjZGVmaW5lIENDU2luZ2xlVGhyZWFkUHJveHlfaAorCisjaW5jbHVk
ZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CisKK2NsYXNz
IENDU2luZ2xlVGhyZWFkUHJveHkgOiBwdWJsaWMgQ0NQcm94eSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NPd25QdHI8Q0NQcm94eT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCopOworICAgIHZp
cnR1YWwgfkNDU2luZ2xlVGhyZWFkUHJveHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50
YXRpb24KKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0Jik7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTdGFydGVkKCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXll
clJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0
IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNl
dE5lZWRzUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2
b2lkIHN0b3AoKTsKKworICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRo
cmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0
ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVh
bCBHckNvbnRleHQqIHNraWFDb250ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBo
YWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVy
Q2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFu
YWdlcigpOworCisgICAgLy8gU3BlY2lhbCBjYXNlIGZ1bmN0aW9ucy4KKyNpZiAhVVNFKFRIUkVB
REVEX0NPTVBPU0lUSU5HKQorICAgIHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRy
ZWVIb3N0Kik7CisgICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOworICAgIGJvb2wgZG9Db21w
b3NpdGUoKTsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NM
YXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisKKyAgICAvLyBVc2VkIG9uIHRoZSBDQ1Ro
cmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3No
dXRkb3duLgorICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJ
bXBsOworCisgICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CisgICAgYm9vbCBtX3JlY3JlYXRpbmdH
cmFwaGljc0NvbnRleHQ7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hZDBmYmVlNDFmZmFmOTY1Yzg5YzU3MzRlNGM3MjRhN2U3ZTRhMmNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIK
KworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVHJhY2VFdmVudC5o
IgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgorI2luY2x1ZGUgImNjL0NDTWFpblRo
cmVhZFRhc2suaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSB7CitDQ1RocmVhZCogY2NUaHJlYWQ7CitpbnQgbnVtUHJveGllcyA9
IDA7Cit9CisKK1Bhc3NPd25QdHI8Q0NQcm94eT4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKK3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
VGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOworfQorCitDQ1RocmVhZFByb3h5OjpDQ1RocmVh
ZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKKyAgICA6IG1fY29tbWl0UGVu
ZGluZyhmYWxzZSkKKyAgICAsIG1fbGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpDQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBudW1Qcm94aWVzKys7CisgICAgaWYgKCFj
Y1RocmVhZCkgeworICAgICAgICBjY1RocmVhZCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJv
eHk6OnNldEltcGxUaHJlYWQoY2NUaHJlYWQtPnRocmVhZElEKCkpOworI2VuZGlmCisgICAgfQor
fQorCitDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQo
IkNDVGhyZWFkUHJveHk6On5DQ1RocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyBNYWtl
IHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3QpOyAv
LyBNYWtlIHN1cmUgc3RvcCgpIGdvdCBjYWxsZWQuCisKKyAgICBudW1Qcm94aWVzLS07CisgICAg
aWYgKCFudW1Qcm94aWVzKSB7CisgICAgICAgIGRlbGV0ZSBjY1RocmVhZDsKKyAgICAgICAgY2NU
aHJlYWQgPSAwOworICAgIH0KK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitHcmFwaGljc0NvbnRleHQz
RCogQ0NUaHJlYWRQcm94eTo6Y29udGV4dCgpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVy
aW5nKCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworYm9vbCBDQ1RocmVhZFBy
b3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBs
OworfQorCitib29sIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5
ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgp
OworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChj
b250ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBMZWFrIHRoZSBjb250ZXh0IHBvaW50ZXIg
c28gd2UgY2FuIHRyYW5zZmVyIG93bmVyc2hpcCBvZiBpdCB0byB0aGUgb3RoZXIgc2lkZS4uLgor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyID0gY29udGV4dC5yZWxlYXNlKCkubGVh
a1JlZigpOworICAgIEFTU0VSVChjb250ZXh0UHRyLT5oYXNPbmVSZWYoKSk7CisKKyAgICAvLyBN
YWtlIGEgYmxvY2tpbmcgY2FsbCB0byBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQu
IFRoZSByZXN1bHRzIG9mIHRoYXQgY2FsbAorICAgIC8vIGFyZSBwdXNoZWQgaW50byB0aGUgaW5p
dGlhbGl6ZVN1Y2NlZWRlZCBhbmQgY2FwYWJpbGl0aWVzIGxvY2FsIHZhcmlhYmxlcy4KKyAgICBD
Q0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGJvb2wgaW5pdGlhbGl6ZVN1Y2NlZWRl
ZDsKKyAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG93bmVySGFjayksIEFs
bG93Q3Jvc3NUaHJlYWRBY2Nlc3MoY29udGV4dFB0ciksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmaW5pdGlhbGl6ZVN1Y2NlZWRlZCksIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoJmNhcGFiaWxpdGllcykpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKwor
ICAgIGlmIChpbml0aWFsaXplU3VjY2VlZGVkKQorICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXNNYWluVGhyZWFkQ29weSA9IGNhcGFiaWxpdGllczsKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZVN1Y2NlZWRlZDsKK30KKworY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgQ0NU
aHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJlYWRDb3B5OworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fY29tbWl0
UGVuZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3IiwgdGhpcywgMCk7CisgICAgbV9jb21taXRQZW5k
aW5nID0gdHJ1ZTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRo
aXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpKTsK
K30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhdygpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKyAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRU
YXNrKHRoaXMsICZDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQpKTsKK30K
Kwordm9pZCBDQ1RocmVhZFByb3h5OjpzdGFydCgpCit7CisgICAgLy8gQ3JlYXRlIExheWVyVHJl
ZUhvc3RJbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJl
YWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5p
dGlhbGl6ZUltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9u
KSkpOworICAgIGNvbXBsZXRpb24ud2FpdCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnN0
b3AoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzdG9wIiwgdGhpcywgMCk7
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBTeW5jaHJvbm91c2x5IGRlbGV0
ZXMgdGhlIGltcGwuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBjY1Ro
cmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29t
cGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKKworICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCisgICAgbV9s
YXllclRyZWVIb3N0ID0gMDsKK30KKworI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBDQ1RocmVh
ZFByb3h5Ojpza2lhQ29udGV4dCgpCit7CisgICAgLy8gTm90IHN1cHBvcnRlZCBvbiB0aGUgaW1w
bCB0aHJlYWQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gMDsKK30KKyNlbmRpZgorCitUZXh0dXJlTWFuYWdlciogQ0NUaHJlYWRQcm94eTo6Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9u
Q0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1l
QW5kQ29tbWl0T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQo
KSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgLy8gRklYTUU6IGNhbGwgYmVnaW5G
cmFtZUFuZENvbW1pdCBvbiBtYWluIHRocmVhZAorfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJl
Z2luRnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCisgICAgICAgIHJldHVy
bjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21t
aXQiLCB0aGlzLCAwKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3Q6OmFuaW1hdGVBbmRMYXlvdXQiLCB0aGlzLCAwKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5hbmltYXRlQW5kTGF5b3V0KGZyYW1lQmVnaW5UaW1lKTsKKyAgICB9CisKKyAgICBtX2NvbW1p
dFBlbmRpbmcgPSBmYWxzZTsKKworICAgIC8vIEJsb2NraW5nIGNhbGwgdG8gQ0NUaHJlYWRQcm94
eTo6cGVyZm9ybUNvbW1pdAorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAg
Y2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94
eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikp
KTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpjb21t
aXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIEFTU0VS
VChpc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmNvbW1p
dE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNv
bW1pdCgpOworICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29t
bWl0IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG8obV9sYXll
clRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICBzZXROZWVk
c1JlZHJhd09uQ0NUaHJlYWQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJz
T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmRyYXdMYXll
cnNPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpKTsKKyAg
ICBpZiAobV9sYXllclRyZWVIb3N0SW1wbCkKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+
ZHJhd0xheWVycygpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKG1fbGF5ZXJUcmVlSG9zdEltcGwpOworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OnNldE5l
ZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQ
cm94eTo6aW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
SW1wbFRocmVhZCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0
LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwor
fQorCit2b2lkIENDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaywgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHRQ
dHIsIENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uLCBib29sKiBpbml0aWFsaXplU3VjY2Vl
ZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKiBjYXBhYmlsaXRpZXMpCit7CisgICAgVFJB
Q0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KGFkb3B0UmVmKGNvbnRleHRQdHIpKTsKKyAgICAqaW5p
dGlhbGl6ZVN1Y2NlZWRlZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJl
bmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgaWYgKCppbml0aWFsaXplU3VjY2VlZGVk
KQorICAgICAgICAqY2FwYWJpbGl0aWVzID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpOworICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxldGlv
bkV2ZW50KiBjb21wbGV0aW9uKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOworICAgIGNvbXBs
ZXRpb24tPnNpZ25hbCgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmI2YzQ0OGIwY2VhZTdlYmJkNDY4MjY0OWFhNzkyMDVkNGFjNTExOAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDVGhy
ZWFkUHJveHlfaAorI2RlZmluZSBDQ1RocmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29t
cGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2lu
Y2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBDQ1RocmVhZFBy
b3h5IDogcHVibGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEND
UHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKworICAgIHZpcnR1YWwgfkNDVGhyZWFk
UHJveHkoKTsKKworICAgIC8vIENDUHJveHkgaW1wbGVtZW50YXRpb24KKyAgICB2aXJ0dWFsIGJv
b2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7Cisg
ICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNTdGFydGVkKCkgY29u
c3Q7CisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVl
SG9zdCogb3duZXJIYWNrKTsKKyAgICB2aXJ0dWFsIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9zZUNvbXBvc2l0b3JDb250ZXh0KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CisgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzUmVkcmF3KCk7CisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0KCk7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKKworICAgIC8v
IEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRv
IHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0
aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgdmlydHVhbCBHckNvbnRleHQqIHNraWFDb250
ZXh0KCk7CisjZW5kaWYKKworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21p
dW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVh
bCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpOworCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IENDVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICAvLyBD
YWxsZWQgb24gQ0NNYWluVGhyZWFkCisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSk7CisKKyAgICAvLyBDYWxsZWQgb24gQ0NUaHJlYWQKKyAgICB2b2lk
IGJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBjb21taXRPbkNDVGhy
ZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7CisgICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgp
OworICAgIHZvaWQgaW5pdGlhbGl6ZUltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7
CisgICAgdm9pZCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVI
b3N0KiwgR3JhcGhpY3NDb250ZXh0M0QqLCBDQ0NvbXBsZXRpb25FdmVudCosIGJvb2wqIGluaXRp
YWxpemVTdWNjZWVkZWQsIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMqKTsKKyAgICB2b2lkIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgc2V0TmVlZHNSZWRy
YXdPbkNDVGhyZWFkKCk7CisgICAgdm9pZCBsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCopOworCisgICAgLy8gVXNlZCBvbiBtYWluLXRocmVhZCBvbmx5Lgor
ICAgIGJvb2wgbV9jb21taXRQZW5kaW5nOworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJl
YWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKyAgICBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllc01haW5UaHJl
YWRDb3B5OworCisgICAgLy8gVXNlZCBvbiB0aGUgQ0NUaHJlYWQsIGJ1dCBjaGVja2VkIG9uIG1h
aW4gdGhyZWFkIGR1cmluZyBpbml0aWFsaXphdGlvbi9zaHV0ZG93bi4KKyAgICBPd25QdHI8Q0NM
YXllclRyZWVIb3N0SW1wbD4gbV9sYXllclRyZWVIb3N0SW1wbDsKK307CisKK30KKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkVGFzay5oCmluZGV4IDkxYzU4ZTVkMjViN2JiMjg2ZTIxNmM0ZTA2OGNi
ZTEwOTU3OGYxODMuLmQ4ZGU0YWIwMzQ2OTg4NzY5ZmJlMjY3NGZkMzIzNjEwYzQ1ZDcyMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGhyZWFkVGFzay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkVGFzay5oCkBAIC0xOTgsNiArMTk4LDQ4IEBAIHByaXZhdGU6CiAgICAg
UDQgbV9wYXJhbWV0ZXI0OwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUDEs
IHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5
cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVu
YW1lIE1QNT4KK2NsYXNzIENDVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NUaHJlYWQ6OlRhc2sgewor
cHVibGljOgorICAgIHR5cGVkZWYgdm9pZCAoVDo6Kk1ldGhvZCkoTVAxLCBNUDIsIE1QMywgTVA0
LCBNUDUpOworICAgIHR5cGVkZWYgQ0NUaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQ
MywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDQ1RocmVhZFRhc2tJbXBsOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQ
YXJhbTI7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQ
YXJhbVR5cGUgUGFyYW0zOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7CisKKyAgICBzdGF0aWMgUGFzc093
blB0cjxDQ1RocmVhZFRhc2tJbXBsPiBjcmVhdGUoVCogaW5zdGFuY2UsIE1ldGhvZCBtZXRob2Qs
IFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMs
IFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQ0NUaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJh
bWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIENDVGhyZWFkVGFzazUoVCogaW5zdGFuY2UsIE1ldGhv
ZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBh
cmFtZXRlcjMsIFBhcmFtNCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKKyAgICAgICAg
OiBDQ1RocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisg
ICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIy
KHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFt
ZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisg
ICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1f
cGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9w
YXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAg
IFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0
ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NU
aHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTI3NCw2ICszMTYsMjcgQEAgUGFz
c093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAogCiB9CiAKK3RlbXBs
YXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0
eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBl
bmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDVGhyZWFk
OjpUYXNrPiBjcmVhdGVDQ1RocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZv
aWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYg
cGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFy
YW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1l
dGVyNSkKK3sKKyAgICByZXR1cm4gQ0NUaHJlYWRUYXNrNTxULCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpU
eXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLCB0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAg
ICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAg
ICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCisgICAgICAgIENyb3NzVGhy
ZWFkQ29waWVyPFA1Pjo6Y29weShwYXJhbWV0ZXI1KSk7CisKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gQ0NUaHJlYWRUYXNrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5jcHAKaW5kZXggYmYyM2JkZWZkOWYzZjVjYjgxMTg2NDgwZGZmODFjMzcyNjkxOTll
Mi4uNWY1YjI1NjQzYThiZjg0ZGMwZTZhNGY1ODFjZDBkYzYzNDQyMTI3NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVy
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAogI2luY2x1ZGUgIkZs
b2F0UXVhZC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJ
bXBsLmNwcAppbmRleCA0YTU1YmNhMGEzNjdkNzBmMzg3NGM2MDgzZDUzNjNiNWM2NGQ2YmYxLi45
ZmYxZmNjYzk3MTZjMTI0MmZlMzVmZTY5MGEyYTgwMjE2MGQyZjA4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc5LDcgKzc5LDcgQEAgdm9pZCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpzZXRUZXh0dXJlKHNpemVfdCBpbmRleCwgUGxhdGZvcm0zRE9iamVjdCB0
ZXh0dXJlSWQsIGNvbnMKIAogdm9pZCBDQ1ZpZGVvTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBB
U1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKIAogICAgIGlmIChtX3NraXBzRHJhdykKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwNDZmYjEzYzliNzhm
ODBjYjljZmEyYWMxYTYwMDA1NjcyM2Y1ODdjLi5lZWUwNTc1MmRhYTc0ZTI4NGY3NDIzYTM4ZTU4
ZWY0YTI0ODU5YjY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBA
CisyMDExLTA4LTI5ICBOYXQgRHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBb
Y2hyb21pdW1dIEludHJvZHVjZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUg
TGF5ZXJSZW5kZXJlciB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNvbXBvc2l0ZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjpzZXRSb290R3JhcGhpY3NMYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlZp
ZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAq
IHRlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisK
IDIwMTEtMDgtMjcgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFRlYWNoIHRoZSB1cGRhdGUgYW5kIGJ1aWxkIHNjcmlwdHMgaG93IHRvIGhhbmRsZSBkZXBl
bmRlbmNpZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRl
eCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0NDhiZDE0NWU5YWJlYWU0Li5iZjc0ZDczOTdmNmUy
YzljOTIyNGUwMTVkZGY4ZTMwMDE2ODczODgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTUwLDcgKzExNTAsNyBAQCB2b2lkIFdlYlZpZXdJbXBs
Ojp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsK
IH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQordm9pZCBXZWJW
aWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTExNjMsNyArMTE2Myw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICBpZiAobV9wYWdl
T3ZlcmxheSkKICAgICAgICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CiAKLSAgICBtX2xheWVy
VHJlZUhvc3QtPmNvbXBvc2l0ZShmaW5pc2gpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9z
aXRlKCk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMjUxNyw5ICsyNTE3LDcgQEAgdm9pZCBXZWJW
aWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVyKGxheWVyKTsKIAogICAgIEludFJlY3Qg
ZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICBpZiAo
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpCi0gICAgICAgIGludmFsaWRhdGVSb290
TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKLSAgICBlbHNlCisgICAgaWYgKCFtX2lzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0
KGRhbWFnZWRSZWN0KTsKIH0KIApAQCAtMjYxMCw2ICsyNjA4LDExIEBAIHZvaWQgV2ViVmlld0lt
cGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAg
ICAgV2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwogICAgICAgICBjY1NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCgpOwogICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRp
bmdzKCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKKyNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCisgICAgICAgIGNjU2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IHRy
dWU7CisjZWxzZQorICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBm
YWxzZTsKKyNlbmRpZgogICAgICAgICBjY1NldHRpbmdzLnNob3dGUFNDb3VudGVyID0gc2V0dGlu
Z3MoKS0+c2hvd0ZQU0NvdW50ZXIoKTsKICAgICAgICAgY2NTZXR0aW5ncy5zaG93UGxhdGZvcm1M
YXllclRyZWUgPSBzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKIApAQCAtMjY1
OSwxMCArMjY2MiwxNSBAQCB2b2lkIFdlYlZpZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSkKIAogdm9pZCBXZWJWaWV3SW1wbDo6ZGlkUmVjcmVhdGVHcmFwaGlj
c0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewotICAgIC8vIEZvcmNlIFZpZXdIb3N0TXNnX0RpZEFj
dGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBzZW50IHNvCi0gICAgLy8gdGhhdCB0
aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3VyZmFjZXMuCi0gICAgbV9pc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKKyAgICAvLyBGb3JjZSB0aGUgbV9pc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgdG8gdGhlIG9wcG9zaXRlIG9mIHRoZQorICAgIC8v
IGludGVuZGVkIHZhbHVlIHRvIHNob3J0LWNpcmN1aXQgaXRzICJJJ20gYWxyZWFkeSBpbiB0aGlz
IG1vZGUiIGxvZ2ljLgorICAgIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gIXN1
Y2Nlc3M7CisKICAgICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoc3VjY2Vzcyk7
CisKKyAgICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwgaWYgbmVj
ZXNzYXJ5CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBzZXRSb290R3JhcGhpY3NMYXllcigw
KTsKICAgICBpZiAoc3VjY2VzcyAmJiBtX3BhZ2VPdmVybGF5KQogICAgICAgICBtX3BhZ2VPdmVy
bGF5LT51cGRhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkVGFza1Rlc3QuY3BwCmluZGV4IDFjNWY4NzcyNTI2NmIwODhmNjg2Njc0NmM4ZDNhMWY5
NjNiNTc3YzIuLmQ5OTQzZTcxM2EyMGE0ZDdiMDkwNDFhNGVjY2Y3N2Q5MGIzM2IzNmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApA
QCAtNDEsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAgTU9DS19NRVRIT0QyKG1ldGhvZDIsIHZvaWQo
aW50IGExLCBpbnQgYTIpKTsKICAgICBNT0NLX01FVEhPRDMobWV0aG9kMywgdm9pZChpbnQgYTEs
IGludCBhMiwgaW50IGEzKSk7CiAgICAgTU9DS19NRVRIT0Q0KG1ldGhvZDQsIHZvaWQoaW50IGEx
LCBpbnQgYTIsIGludCBhMywgaW50IGE0KSk7CisgICAgTU9DS19NRVRIT0Q1KG1ldGhvZDUsIHZv
aWQoaW50IGExLCBpbnQgYTIsIGludCBhMywgaW50IGE0LCBpbnQgYTUpKTsKIH07CiAKIFRFU1Qo
Q0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQpAQCAtNTEsMTIgKzUyLDE0IEBAIFRF
U1QoQ0NUaHJlYWRUYXNrVGVzdCwgcnVubmFibGVNZXRob2RzKQogICAgIEVYUEVDVF9DQUxMKG1v
Y2ssIG1ldGhvZDIoOSwgOCkpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhv
ZDMoOSwgOCwgNykpLlRpbWVzKDEpOwogICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDQoOSwg
OCwgNywgNikpLlRpbWVzKDEpOworICAgIEVYUEVDVF9DQUxMKG1vY2ssIG1ldGhvZDUoOSwgOCwg
NywgNiwgNSkpLlRpbWVzKDEpOwogCiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9j
azo6bWV0aG9kMCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2Nr
LCAmTW9jazo6bWV0aG9kMSwgOSktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRU
YXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMiwgOSwgOCktPnBlcmZvcm1UYXNrKCk7CiAgICAgY3Jl
YXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kMywgOSwgOCwgNyktPnBlcmZvcm1U
YXNrKCk7CiAgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAmTW9jazo6bWV0aG9kNCwgOSwg
OCwgNywgNiktPnBlcmZvcm1UYXNrKCk7CisgICAgY3JlYXRlQ0NUaHJlYWRUYXNrKCZtb2NrLCAm
TW9jazo6bWV0aG9kNSwgOSwgOCwgNywgNiwgNSktPnBlcmZvcm1UYXNrKCk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105853</attachid>
            <date>2011-08-31 16:26:08 -0700</date>
            <delta_ts>2011-08-31 17:34:10 -0700</delta_ts>
            <desc>Fixes for lost context, video, readback.</desc>
            <filename>bug-66807-20110831162607.patch</filename>
            <type>text/plain</type>
            <size>128582</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwNzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YTYyN2E2YjIwMjc2YmJk
NjZmOWY1OWI0ODU0YTdmZmZlYWQ0M2RkLi44ZjhiYWE0NDcyZDExNzU0MTI5NmQzOGRlYzgwMjc1
MjY0YzEyNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBD
Q0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5M
YXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250
ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVhZFRhc2s0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRo
cmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVh
ZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYWluVGhyZWFk
VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5Ojppc0ltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFNldElt
cGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
U2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRv
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNr
NTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgor
CiAyMDExLTA4LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCBjb250aW51ZXMgdG8gcmV0dXJuIHRydWUgd2hlbiBpbm5l
clRleHQgb3IgdGV4dENvbnRlbnQgaXMgbW9kaWZpZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5MTBh
ODZkZWFiMWMxNTIxMjg0NzM1NDQ4ZTRjZDk3NGQzYWIzYWFjLi5kZGQ0ZDNlMWYzYTQxMmRlYTk3
MjczZjdiYWI4YTY5ZGFiNjg5M2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM1LDIwICszNTM1
LDIyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU5YzJjY2Ex
ZDkyY2QzYWVmNjNhNDcwMWUwNWJkMWZiYWFjYjg0ZTcuLmRiNWUwMzQ2ZjZiNzUyY2ZjY2I1YjRl
NGM2OTUzZTViN2Q0OTBiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTEyMCwxNiArMTIwLDE4IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCgpIGNvbnN0CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVV
cGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKLSNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQorICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lh
Q29udGV4dCgpIHdpbGwgY3Jhc2ggaWYgY2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCisgICAgLy8g
bW9kZS4gVGhpcyB0aHVzIGRlcGVuZHMgb24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1
cm5pbmcgb2ZmCisgICAgLy8gYWNjZWxlcmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9t
IGNyYXNoaW5nLgogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykg
ewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5
ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKKyAgICAgICAgR3JDb250ZXh0KiBjb250ZXh0
ID0gY29uc3RfY2FzdDxDQ0xheWVyVHJlZUhvc3QqPihob3N0KS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGNvbnRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFNLSUEKLSNlbmRpZiAvLyAhVEhSRUFERURf
Q09NUE9TSVRJTkcKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0
LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDIzYzg1NTVmNTBi
ZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQyY2M1YmMuLjcxYmMwYjZiOWRiNjU2YmM0NjBmNGY4NTY1
NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTgx
LDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3Qg
Q0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7
CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTU2M2VhYTU3ZjU2NzNjODU5OWQ0ZGJhYWM4OGI5
MmQ5YzQ5NDM0OC4uZWVlYWJiMjEwYWExYjMyNTg5YzY3MWI4YzM3MTExNDQ5MmIwMzMxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDYgKzk2LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgY2hpbGRyZW4oKVtpXS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShyZW5kZXJlcik7CisK
KyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAg
IHJlcGxpY2FMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKwor
ICAgIHNldExheWVyUmVuZGVyZXIocmVuZGVyZXIpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKIHsKICAg
ICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciByZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZy
ZWUgdXAgYW55IHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFj
M2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmZlMmU0YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4
MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RMYXllcihib29sIGlzUm9vdExheWVyKSB7IG1faXNSb290
TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQogICAgIGJvb2wgaXNSb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzUm9vdExheWVyOyB9CiAKKyAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNp
dmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qg
b3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAg
ICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KICAgICAvLyBGSVhNRSwgcmVwbGFj
ZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDcwYTA1ZGNhMDkwMTBhNmNiNTlmY2Y1YjFkYWUzMTAyZDhmNmRkZmQuLmZmYzcw
MGEyYzY3ZjI3YWU2MmIyNTY2OGNkZmQxNTYxNDQzNzg1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3Qu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTQ0OSwxMyArNDUwLDEzIEBA
IGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93
bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNj
ZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0
UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5
ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25lckltcGwsIGNvbnRleHQpKSk7CiAgICAgaWYg
KCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00
NjMsOCArNDY0LDEwIEBAIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqCiB9CiAKIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBvd25lckltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDog
bV9vd25lcihvd25lcikKKyAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQog
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC00ODMsMTQgKzQ4NiwxOCBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIC8vIExpbWl0IHRoZSBieXRl
cyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUu
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAq
IDEwMjQgKiAxMDI0OwogICAgICAgICBtX3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1p
dHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAg
bV9jYXBhYmlsaXRpZXMudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKLSAgICBpZiAobV9jb250ZXh0
U3VwcG9ydHNNYXBTdWIpCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWIgPSBleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOworICAgIGlmIChtX2NhcGFiaWxp
dGllcy51c2luZ01hcFN1YikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
Q0hST01JVU1fbWFwX3N1YiIpOwogCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSk7CisgICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1
cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRleHQuZ2V0
KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTUxNCwxMSArNTIxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1w
CiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290Q0NMYXllckltcGwpCi0gICAgICAgIGNs
ZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKG1fcm9vdENDTGF5ZXJJbXBs
LmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOworICAgIGlmIChyb290TGF5
ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU5LDYgKzU2NSw5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBpZiAobV9vd25lci0+dmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTU2NywxMyArNTc2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNV
cERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAotICAgIC8vIFJlY2hlY2sg
dGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVjb21lIG51bGwgaWYK
LSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0
aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwu
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHVwZGF0ZUxheWVycyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApAQCAtNTgyLDEyICs1ODQsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgaWYgKCFyb290TGF5ZXIo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7Ci0gICAgICAgIG1f
cm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSk7Ci0gICAg
fQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRC
eXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsK
IApAQCAtNjI0LDcgKzYyMCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogCiAgICAgewogICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwg
dGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJv
b3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIDAsIG1fbWF4VGV4dHVyZVNp
emUpOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkKj4ocm9vdExheWVyLCByb290TGF5
ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAwLCBtX2NhcGFiaWxpdGllcy5tYXhU
ZXh0dXJlU2l6ZSk7CiAgICAgfQogCiAgICAgcGFpbnRMYXllckNvbnRlbnRzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwpAQCAtNzMyLDcgKzcyOCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKTsKKyAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQpAQCAtNzUwLDcgKzc0Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7
Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1w
bCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJh
d0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRl
ciwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihy
b290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwog
ICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxl
IGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KQEAgLTg0MCwyMCArODM2LDYgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNlbnQoKQogICAgIG1faGVhZHNVcERpc3BsYXkt
Pm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAg
ICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShjaGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBp
ZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAg
ICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwot
Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgo
KSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhlaWdodCgpKTsKQEAgLTk0OCw3ICs5MzAsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhM
YXllckNocm9taXVtKiBsYXllcikKIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3Mo
KS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVy
SW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJu
IHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RM
YXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxh
eSgpCkBAIC0xMDkzLDEwICsxMDc1LDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyIsIHRoaXMsIDApOwogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXplIHN1cHBvcnRl
ZCBieSB0aGUgc3lzdGVtLgotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7Ci0KICAgICAvLyBDcmVhdGUgYW4g
RkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nLgogICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZm
ZXIoKSk7CiAKQEAgLTExMDgsOCArMTA4Niw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fbWF4VGV4
dHVyZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fbWF4VGV4dHVyZVNp
emUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJl
U2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcywgbV9jYXBhYmlsaXRpZXMubWF4
VGV4dHVyZVNpemUpOwogI2lmbmRlZiBOREVCVUcKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXItPnNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KG1fY29udGV4dC5nZXQoKSk7CiAgICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdP
bmx5KG1fY29udGV4dC5nZXQoKSk7CkBAIC0xMjk5LDcgKzEyNzcsNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXIt
PmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlz
Q29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9jb250ZXh0LmdldCgpLT5nZXRFeHRlbnNp
b25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyZDgw
NDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3NWZkLi5lN2Y0MjFiMzZhYmU0YTU1YTRh
NjVlYmMwN2MyZWE0MTNjYjlkMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
UGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOwotY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OyAvLyBGSVhN
RTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwog
Y2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03Miwx
MSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8gQ2xhc3MgdGhh
dCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgog
Y2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRl
ciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0CisgICAgdm9p
ZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAg
ICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnNl
dHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCiAgICAgQ0NMYXllclRy
ZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBjb25zdCBDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQpAQCAtODQsMTQgKzg5LDE3
IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKKyAgICBDQ0xheWVySW1w
bCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQor
ICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1Yigp
IGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKICNpZiBVU0Uo
U0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgeyByZXR1cm4gbV9za2lhQ29udGV4
dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7
IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHZp
ZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUoKTsgfQogICAg
IGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lkdGgoKTsgfQog
ICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgp
OyB9CiAKQEAgLTExNSw4ICsxMjMsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX3Byb2plY3Rpb25N
YXRyaXg7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0KIAotICAgIGludCBtYXhUZXh0dXJlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KLQogICAgIGNvbnN0IEdlb21l
dHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21l
dHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9y
ZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRz
VXBEaXNwbGF5UHJvZ3JhbSgpOwpAQCAtMTQyLDI0ICsxNDgsMTcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCi0gICAgYm9vbCBpc0NvbXBvc2l0
b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwogCiAgICAgdm9pZCBy
ZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShM
YXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAg
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKIAotICAg
IHZvaWQgY2xlYXJSb290Q0NMYXllckltcGwoKTsKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0
IGNsYXNzIGV4aXN0cy4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5ZXJJbXBs
OwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXll
clRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJz
KExheWVyQ2hyb21pdW0qKTsKQEAgLTE5Miw5ICsxOTEsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwq
KTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisg
ICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhvc3QgZmllbGQKICAgICBDQ0xheWVyVHJl
ZUhvc3QqIG1fb3duZXI7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX293bmVySW1wbDsK
KworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CisKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKQEAgLTIwMyw5ICsyMDYsNiBAQCBwcml2YXRlOgog
ICAgIENDUmVuZGVyU3VyZmFjZSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKICAgICB1bnNpZ25l
ZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKLSAgICAvLyBNYXhpbXVtIHRleHR1cmUgZGlt
ZW5zaW9ucyBzdXBwb3J0ZWQuCi0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0KICAgICAvLyBT
dG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGVhY2ggbGF5
ZXIgdHlwZQogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIG9mIHRoZSBjb21w
b3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKICAgICAvLyBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yg
dGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUgc2FtZSByZW5kZXJlciBwcm9jZXNzCkBAIC0y
MzQsOCArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JDb250ZXh0PiBtX3NraWFDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAg
Q0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNv
cnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cy5oCmluZGV4IDI2Y2U4YjVkOTE5N2JhMzY4Njk0MjllNmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3
YmMxZWMzZmU4Nzk5ZWYxOWE3MWExMzgwZjRiMmQ0M2EwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgKQEAgLTgwLDcgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBM
YXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAotI2lmICFVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcg
KzEwOSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsgLy8gR1BV
IGFjY2VsZXJhdGVkIGNhbnZhcy4KIH07CiAjZW5kaWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJF
QURFRF9DT01QT1NJVElORwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5ZTJjMy4uY2ZkZjEyM2Fm
YTc0M2RiMjE2MTQzN2ZkOWJlOWQzNDQ3MThmNDZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCkBAIC02NSw2ICs2NSw3IEBAIHByaXZhdGU6CiAKIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6VGlsZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAg
OiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9sYXllclRyZWVIb3N0KDApCiAgICAgLCBt
X3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCkBAIC0xMTUs
NyArMTE2LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCkKICAgICAgICAgaXNUaWxlZCA9IGF1dG9UaWxlZDsKIAogICAgIEludFNpemUg
cmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6ZSA6IGNvbnRlbnRCb3VuZHMoKTsKLSAg
ICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVuZGVyZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsK
KyAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwogICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBy
ZXF1ZXN0ZWRTaXplLnNocnVua1RvKEludFNpemUobWF4U2l6ZSwgbWF4U2l6ZSkpOwogICAgIG1f
dGlsZXItPnNldFRpbGVTaXplKGNsYW1wZWRTaXplKTsKIH0KQEAgLTEzNiwxMiArMTM3LDE0IEBA
IGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3Qp
CiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKKyAgICBtX2xh
eWVyVHJlZUhvc3QgPSBob3N0OwogICAgIGlmIChtX3RpbGVyKQogICAgICAgICByZXR1cm47CiAK
ICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0KTsKIAotICAgIG1fdGV4dHVyZUZvcm1hdCA9
IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4
dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIoKS0+b3JpZW50YXRpb24oKTsKICAgICBt
X3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1h
dChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3Jl
YXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA1ODU2OTE4MTQ0MDY5M2Y2MGY2
ZGQ2YjI5OWNiYjlkYzg5ZDFhNDVjLi5iYjI4NmQ2NjBkYWFlOTE1OGI2YjA1MjA2NjMwNDUxYjM5
MGNjYTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtODgsNiArODgsOCBAQCBw
cml2YXRlOgogCiAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAK
KyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKwogICAgIC8vIFN0YXRlIGhl
bGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9hZC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0Owog
ICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggNjUyZDI4ZGZiM2M2MjM2ZTcwM2MxOTNkNGVlNTc2ZTE2OTk4ZDFjZi4uNzYwNzI4MWYw
ZjBkMTg0MzFhMzdhYjJlNjUwYjgyMTEwN2JhNWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCkBAIC0xNDcsNiArMTQ3LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCiB7
CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KTsKICAg
ICBpZiAobV9sYXllclRyZWVIb3N0ID09IGxheWVyVHJlZUhvc3QpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTc4LDcgKzE3OSw3IEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4
dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJU
KGZyYW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhv
c3QtPm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRy
ZWVIb3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5l
KyspIHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVp
cmVkVGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
CmluZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4
NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZh
c0xheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQog
CiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBD
Q0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2Fu
dmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZDZiYzljMzI3
MzUyNjc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi5kZWI5ZDRmZDY0M2RlZjQyM2NhMTJhM2Ji
N2VmZjYxNWYzY2RlNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMw
LDEwICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRl
ICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0KIAog
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBj
bGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwgbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAg
ICA6IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9m
cmFtZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIo
KSkpCiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV92aXNpYmxlKHRydWUpCiB7
CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKLSAgICBtX2xheWVy
UmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVy
ZXIpCisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkgeworICAgICAg
ICAvLyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRocmVhZGVkIG1v
ZGUuIFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9
IGZhbHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRl
KHRoaXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisKKyAgICBpZiAoIW1fcHJveHktPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAv
LyBGSVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRoZXNlIHZhbHVlcyB3aWxsIG5lZWQgdG8g
YmUgaW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBtX2xheWVyUmVu
ZGVyZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlci0+bWF4VGV4dHVy
ZVNpemUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRl
eHR1cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCkpOwotICAgIG1fY29udGV4dFN1
cHBvcnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKTsK
KyAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBn
b3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWlu
dGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJh
dGVkUGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgw
KTsKICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEsOCBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7CiAKLQotI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVh
dGUodGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICAvLyBXZSBj
aGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVkZWQu
CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSNlbmRpZgogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODUgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywg
MCk7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIG1fcHJveHktPnN0b3AoKTsK
ICAgICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmJlZ2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7CisgICAgbV9j
bGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5n
ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRy
ZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNp
YmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogeworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVO
dW1iZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25l
IGV4aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgLy8gVGhl
IGxheWVyUmVuZGVyZXIgbmVlZHMgdG8gYmUgc2V0IHNvIHRoYXQgY2hpbGQgbGF5ZXJzIHBpY2sg
dXAgdGhlIGxheWVyUmVuZGVyZXIKKyAgICAgICAgLy8gYXMgd2VsbCBkdXJpbmcgdGhlIHN5bmNo
cm9uaXplIHN0ZXAuCisgICAgICAgIGlmIChyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5s
YXllclJlbmRlcmVyKCkgIT0gaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSkKKyAgICAgICAgICAg
IHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
aG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RM
YXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0
Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOworICAgIH0gZWxzZQorICAgICAg
ICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOworCiAgICAgbV9mcmFtZU51bWJlcisrOwogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdp
blRpbWUpCitQYXNzT3duUHRyPENDVGhyZWFkPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBv
c2l0b3JUaHJlYWQoKQogewotICAgIG1fYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+
YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgbV9hbmltYXRpbmcgPSBmYWxz
ZTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKIH0KIAot
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogewotICAg
IC8vIEZJWE1FOiBvbmx5IGNhbGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2li
bGUuCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQogewotICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgcmV0
dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVyKTsKKyAgICBy
ZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKG1fc2V0dGluZ3MpOwogfQogCi1HcmFw
aGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAg
cmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIG1fY2xpZW50LT5kaWRSZWNy
ZWF0ZUdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
KyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlQ29tcG9zaXRlKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAg
Ly8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIGNvbXBvc2l0ZShm
YWxzZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMs
IHJlY3QpOworICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworfQogI2VuZGlmCisK
Ky8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIFdlYlZpZXdJbXBsIGNvbnRleHQgY3JlYXRpb24gZ2V0
cyBzaW1wbGlmaWVkCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0
KCkKK3sKKyAgICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7Cisg
ICAgcmV0dXJuIG1fcHJveHktPmNvbnRleHQoKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxzLCByZWN0
KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0j
aWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxl
bWVudCB0aGlzLgotI2Vsc2UKLSAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOwotI2VuZGlm
CisgICAgbV9wcm94eS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CkBAIC0xNTMsNiArMTc2LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9v
dExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CiB9CiAKK2NvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdDo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCkBAIC0xNzcsMTMgKzIw
NSwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogewogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVy
KCktPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qt
PmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgIGlmIChsYXllcikgeworICAgIGlmIChsYXll
cikKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+
YWRkQ2hpbGQobGF5ZXIpOwotICAgICAgICBsYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRMYXll
clJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxh
eWVyUmVuZGVyZXIoKS0+Y2xlYXJSb290Q0NMYXllckltcGwoKTsKK30KIAorI2lmIFVTRShTS0lB
KQorR3JDb250ZXh0KiBDQ0xheWVyVHJlZUhvc3Q6OnNraWFDb250ZXh0KCkKK3sKKyAgICBBU1NF
UlQobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpOworICAgIHJldHVybiBtX3Byb3h5LT5z
a2lhQ29udGV4dCgpOwogfQorI2VuZGlmCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3
cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewpAQCAtMTkzLDExNCArMjI1
LDMzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvCiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7
CiAKLSAgICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKSB7CisgICAgaWYgKHZpc2libGVSZWN0Q2hh
bmdlZCkKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRp
cmVMYXllcigpOwotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICAgICAgbV9s
YXllclJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKLSAgICB9CiAKICAgICBzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShi
b29sIHZpc2libGUpCiB7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBpZiAo
IXZpc2libGUpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7Ci0j
ZW5kaWYKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworICAgIG1fcHJveHktPnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBD
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIGZhbGwgYmFjayB0
byBzb2Z0d2FyZS4KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2Ns
aWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBY3R1YWxseSBjcmVhdGUgdGhlIHJlbmRlcmVy
LgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLQotICAgIC8vIElmIGNy
ZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcs
IGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKLSAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRo
ZSByZW5kZXJlciBhZ2Fpbi4KLSAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcg
JiYgIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBmYWxzZTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiBsYXllclJlbmRl
cmVyOworICAgIG1fcHJveHktPmxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwogfQogCiBUZXh0dXJl
TWFuYWdlciogQ0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogdGhpcyBjbGFzcyBzaG91bGQgb3duIHRoZSBjb250ZW50cyB0ZXh0
dXJlIG1hbmFnZXIKLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwor
ICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CiB9CiAKICNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9z
aXRlKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoKQogewotI2lmbmRlZiBOREVC
VUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7Ci0j
ZW5kaWYKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBtX2xheWVyUmVuZGVyZXIt
PnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQo
ZmFsc2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoYm9v
bCBmaW5pc2gpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRl
IiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7Ci0g
ICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRo
ZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5ldyBjb250
ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgYWxyZWFkeSBs
b3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgp
KSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8gUHV0IHJlc3VsdCBvbnNj
cmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0gICAgfQotCi0gICAg
aWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAg
ICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdv
cmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNo
YW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAgICAgICAgLy8gY2FsbGVk
IGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3Vy
Ci0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0
aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhl
IHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KLSAgICAgICAgLy8g
YW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAgbV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQo
KQotewotICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Ci19Ci0KLXZvaWQg
Q0NMYXllclRyZWVIb3N0OjpyZWFsbG9jYXRlUmVuZGVyZXIoKQotewotICAgIFJlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBs
YXllclJlbmRlcmVyLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKG1fcm9vdExheWVyLT5wbGF0
Zm9ybUxheWVyKCkpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7Ci0KLSAg
ICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7CisgICAgQVNTRVJU
KCFtX3NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpOworICAgIHN0YXRpY19jYXN0PEND
U2luZ2xlVGhyZWFkUHJveHkqPihtX3Byb3h5LmdldCgpKS0+Y29tcG9zaXRlSW1tZWRpYXRlbHko
KTsKIH0KICNlbmRpZiAvLyAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCmluZGV4IDk5YjhiZjIwOTRkODM2NDE0ODNiNDlkOTNjNjkwZmIxZWFi
YWU4YzYuLjVmOWNiNzA5ODFlNGY1MzQxOThjNWJjMmVlNzFiNWI1OTY5OTkwOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNywxNyArMjcsMTkgQEAKIAogI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAorI2lmIFVTRShTS0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKLWNsYXNzIEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CiBjbGFzcyBDQ1RocmVhZDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKQEAgLTY1LDM1ICs2Nyw2NCBAQCBzdHJ1
Y3QgQ0NTZXR0aW5ncyB7CiAgICAgQ0NTZXR0aW5ncygpCiAgICAgICAgICAgICA6IGFjY2VsZXJh
dGVQYWludGluZyhmYWxzZSkKICAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNl
KQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKQogICAgICAgICAg
ICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKGZhbHNlKSB7IH0KIAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIGJv
b2wgY29tcG9zaXRlT2Zmc2NyZWVuOworICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsK
ICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVl
OwogfTsKIAorLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1wbCdzIHJlbmRlcmluZyBj
YXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0CitzdHJ1Y3QgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyB7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpCisgICAg
ICAgIDogYmVzdFRleHR1cmVGb3JtYXQoMCkKKyAgICAgICAgLCB1c2luZ01hcFN1YihmYWxzZSkK
KyAgICAgICAgLCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcoZmFsc2UpCisgICAgICAgICwgbWF4
VGV4dHVyZVNpemUoMCkgeyB9CisKKyAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdDsKKyAg
ICBib29sIHVzaW5nTWFwU3ViOworICAgIGJvb2wgdXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwor
ICAgIGludCBtYXhUZXh0dXJlU2l6ZTsKK307CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1
YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCos
IGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1p
dENvbXBsZXRlKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwot
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxh
eWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNl
IHRvIENDUHJveHkuCisgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CisgICAgdm9pZCBwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCopOyAvLyBUZW1w
b3JhcnkgaGFjayB1bnRpbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMgaXMgc3Bs
aXQgYXBhcnQuCisgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisgICAg
UGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOworICAgIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
KyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCk7CisgICAgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
OworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0ZSgpOworI2VuZGlmCiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIFdl
YlZpZXcuCiAgICAgYm9vbCBhbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZzsg
fQogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0g
YW5pbWF0aW5nOyB9IC8vIENhbiBiZSByZW1vdmVkIHdoZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxp
bmcgbW92ZXMgaW5zaWRlLgogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudDsgfQogCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAg
ICB2b2lkIGNvbXBvc2l0ZSgpOworI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKKyAgICAvLyBDb21wb3NpdGVzIGFuZCBhdHRlbXB0cyB0byByZWFkIGJh
Y2sgdGhlIHJlc3VsdCBpbnRvIHRoZSBwcm92aWRlZAorICAgIC8vIGJ1ZmZlci4gSWYgaXQgd2Fz
bid0IHBvc3NpYmxlLCBlLmcuIGR1ZSB0byBjb250ZXh0IGxvc3QsIHdpbGwgcmV0dXJuCisgICAg
Ly8gZmFsc2UuCisgICAgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKIAogICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKQEAgLTEw
MSw2ICsxMzIsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworCisgICAgLy8g
VGVzdC1vbmx5IGhvb2sKKyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKIApAQCAtMTEwLDYgKzE0NiwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIAorICAgIC8vIEhvcnJp
YmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBH
ckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFT
QVAuCisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlm
CisKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
OwogCiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92
aWV3cG9ydFNpemU7IH0KQEAgLTExNywyMSArMTU5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRWaXNpYmxlKGJvb2wpOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhy
ZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9y
Q29udGV4dCgpOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3Qg
eyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAotICAgIGJvb2wg
Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWI7IH0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRl
eHR1cmVTaXplOyB9Ci0gICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKSB7IHJldHVybiBt
X2Jlc3RUZXh0dXJlRm9ybWF0OyB9Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3Qo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYg
KzE2OSwxMyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21lIGZvciB0
aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCi0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRl
cmVyKCk7Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKLSAgICBSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0jZW5kaWYKLQotICAg
IGludCBtX21heFRleHR1cmVTaXplOwotICAgIEdDM0RlbnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7
Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKLQogICAgIGJvb2wgbV9hbmltYXRp
bmc7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCiAgICAgaW50IG1f
ZnJhbWVOdW1iZXI7CiAKLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3By
b3h5OworICAgIE93blB0cjxDQ1Byb3h5PiBtX3Byb3h5OwogCiAgICAgT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwogICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtMTY3LDYgKzE4Myw3IEBAIHByaXZhdGU6
CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6
ZTsKKyAgICBib29sIG1fdmlzaWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZy
YW1lTnVtYmVyKGhvc3QtPmZyYW1lTnVtYmVyKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiYzMxOGE0YTcxNDIzMmQzMTg0ZDJmZWQ0YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXJfaAotI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOwotCi0vLyBGSVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXpl
ciBjb2RlIGludG8gaGVyZQotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7
Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsK
LQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXgg
NGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1Mzg2NjlhZS4uNDNjNzQ1NmNmOGY3YjM3
MzhjZDQ1MzY5Mzg5OTljZTRhNzhhM2I1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKQEAgLTM4LDI0ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3Mp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwg
cmVuZGVyZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwo
c2V0dGluZ3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1w
bChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVl
SG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1l
TnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQotICAgICwgbV9jbGllbnQoY2xpZW50
KQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJl
bmRlcmVyKQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhz
ZXR0aW5ncykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdElt
cGwoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luQ29tbWl0KCkKQEAgLTY0LDcxICs2MywxMDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0
Q29tcGxldGUoKQogewotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRz
UmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitH
cmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAg
Ly8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgcmVzdHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXll
cnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4K
LSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1f
bGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVCht
X3JlZHJhd1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VS
VChtX2xheWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJv
b3RMYXllcigpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAg
IHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNB
bmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247Ci0gICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24p
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxl
dGlvbi53YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1F
OiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtv
ciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpm
aW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9
CiAKLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNv
bnRleHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwg
ZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRl
cmVyKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAK
LSAgICArK21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByZXNlbnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VS
VChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRl
cmVyLT5wcmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1l
QW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcv
YW5pbWF0aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAg
ICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRD
b21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFT
U0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJl
bmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQogewotICAg
IGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47
CisgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Cit9CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX3JlZHJh
d1BlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCk7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxl
KQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgIXZpc2libGUpCisgICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
biwgYm9vbCogY29udGV4dExvc3QpCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxp
emVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogaW1wbEhhY2ssIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0aGVuIHdlIGFyZSByZWNvdmVyaW5n
IGZyb20gYSBsb3N0IGNvbnRleHQKKyAgICBib29sIHJlY3JlYXRpbmdSZW5kZXJlciA9IG1fbGF5
ZXJSZW5kZXJlcjsKKworICAgIC8vIEZpcnN0IHRpbWUgbGF5ZXJSZW5kZXJlciBjcmVhdGlvbgor
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7CisgICAgaWYg
KCFyZWNyZWF0aW5nUmVuZGVyZXIpCisgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7CisgICAgZWxzZQor
ICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9s
YXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKKworCisgICAgLy8gSWYgY3Jl
YXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBhY2NlbGVyYXRlZCBwYWludGluZywg
ZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZworICAgIC8vIGFuZCB0cnkgY3JlYXRpbmcgdGhl
IHJlbmRlcmVyIGFnYWluLgorICAgIGlmICghbGF5ZXJSZW5kZXJlciAmJiBtX3NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZykgeworICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGlu
ZyA9IGZhbHNlOworCisgICAgICAgIGlmICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICAg
ICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGltcGxIYWNr
LCB0aGlzLCBjb250ZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIo
KSwgdGhpcywgY29udGV4dCk7CisgICAgfQogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3du
ZXIoKS0+cm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJz
KCk7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworICAgIC8vIElmIHJlY3Jl
YXRpbmcgcmVuZGVyZXIsIHVwZGF0ZSB0aGUgbGF5ZXJzIHRvIHBvaW50IGF0IHRoZSBuZXcgcmVu
ZGVyZXIKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
bGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgKmNvbnRleHRMb3N0ID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIH0gZWxzZQotICAgICAgICAqY29udGV4
dExvc3QgPSBmYWxzZTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXI7Cit9CisK
Ky8vIEZJWE1FOiBtb3ZlIGFsbCB0aGlzIGNvZGUgdG8gQ0NMYXllclRyZWVIb3N0Cit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycygpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gdmlld3BvcnRTaXplICE9IG1fdmlld3BvcnRT
aXplOworICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRTaXplOworICAgIGlmIChjaGFuZ2Vk
KQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzQxMWNjYzczNTU0ZjFkZDMy
YmNjZTJlMTVlNDhkYmVjYWM0YTg4ZS4uZDY4YmI4ZDYwNzMzOTBlYmQwODRlOTE0Y2FiMDE5MjYx
ZmE5MDc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjUsNTYg
KzI1LDY5IEBACiAjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogI2RlZmluZSBDQ0xheWVy
VHJlZUhvc3RJbXBsX2gKIAotI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRl
eHQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBsZXRpb25F
dmVudDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwot
Ci0vLyBQcm92aWRlcyBzY2hlZHVsaW5nIGluZnJhc3RydWN0dXJlIGZvciBhIENDTGF5ZXJUcmVl
SG9zdEltcGwKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQoKSB7IH0KLX07CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsK
IAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdl
bGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUo
Y29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRDb21wbGV0ZSgpOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKwogICAg
IHZvaWQgZHJhd0xheWVycygpOwogCisgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAg
ICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CiAKLSAg
ICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBv
d25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBib29sIGlzQ29u
dGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSB7
IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisKKyAgICB2
b2lkIHByZXNlbnQoKTsKKworICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4pOworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCiAgICAgaW50
IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFtZU51bWJlcjsg
fQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291
cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCisgICAgdm9pZCB1cGRhdGVMYXllcnMo
KTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsK
KyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdw
b3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsK
LSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29s
KiBjb250ZXh0TG9zdCk7CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBD
Q1NldHRpbmdzJik7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJh
bWVOdW1iZXI7CiAKIHByaXZhdGU6Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9j
bGllbnQ7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CiAgICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOworICAgIENDU2V0dGluZ3Mg
bV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNjY5Mjg4NTY0NTk2ZDg3ODI2NzY2MWQzZjk0NjFlYmZiNjYyZTk4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgiCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgImNj
L0NDVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLUNDVGhy
ZWFkKiBjY1RocmVhZDsKLWludCBudW1Qcm94aWVzID0gMDsKLX0KLQotQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclRy
ZWVIb3N0KGxheWVyVHJlZUhvc3QpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBudW1Qcm94aWVzKys7Ci0gICAgaWYgKCFjY1RocmVh
ZCkKLSAgICAgICAgY2NUaHJlYWQgPSBsYXllclRyZWVIb3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKLX0KLQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c3RhcnQoKQotewotICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KLSAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAg
IGNvbXBsZXRpb24ud2FpdCgpOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAm
JiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotCi0g
ICAgbnVtUHJveGllcy0tOwotICAgIGlmICghbnVtUHJveGllcykgewotICAgICAgICBkZWxldGUg
Y2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xh
eWVyVHJlZUhvc3RJbXBsOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0
aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOwot
fQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCgpCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBp
bXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKLQotICAgIEFTU0VSVCghbV9s
YXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCi0gICAg
bV9sYXllclRyZWVIb3N0ID0gMDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVl
c3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBDQ01haW5U
aHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKLX0K
LQotI2lmbmRlZiBOREVCVUcKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5U
aHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwotfQotCi0jaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1w
bFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhy
ZWFkSUQoKTsKLX0KLSNlbHNlCi1uYW1lc3BhY2UgewotYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZh
bHNlOwotfQotCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkK
LXsKLSAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQ7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFsdWUpCi17Ci0gICAgZmFrZUltcGxUaHJl
YWQgPSB2YWx1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNl
bmRpZiAvLyAhTkRFQlVHCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0
RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFt
ZUFuZENvbW1pdCIsIHRoaXMsIDApOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAg
IG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29tbWl0dGVyKCk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAg
Ly8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21t
aXQKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24u
d2FpdCgpOwotCi0gICAgY29tbWl0dGVyLmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PmNvbW1pdENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
b21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgp
OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Iiwg
dGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9s
YXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKLXsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXll
cnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1Jl
ZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbCA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7Ci0gICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRy
ZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5
ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotCi0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0
aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJU
cmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKLQotY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7Ci0KLSAgICBib29s
IGlzU3RhcnRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8g
TXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KLQotICAgIC8vIENDTGF5
ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIGJvb2wgaXNNYWluVGhyZWFkKCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICAvLyBGYWtlIHRocmVhZGVkIGNvbXBvc2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJlY3Qg
dXNhZ2UuCi0gICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgotI2Vu
ZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVlSG9z
dCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRlOgot
ICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENv
bW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFk
Ci0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIEND
Q29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwotICAg
IHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKLQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4K
LSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCi0gICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAv
LyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5n
IGluaXRpYWxpemF0aW9uL3NodXRkb3duLgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRh
c2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaAppbmRleCBmYWM2ZTY0M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVh
YzhhLi40YzMzYmFhMDdhZGQzNTc3MzlkZGI1MTc2MWU4NDdiNzRlNTFjMzM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJl
YWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0xNTgsNiArMTU4LDg4IEBAIHByaXZhdGU6CiAgICAg
UDMgbV9wYXJhbWV0ZXIzOwogfTsKIAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorY2xhc3MgTWFpblRocmVh
ZFRhc2s0IDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgTWFp
blRocmVhZFRhc2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5U
aHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisK
KyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBw
YXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhv
ZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVy
MywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1l
dGVyNCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAg
ICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9w
YXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVy
MTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1f
cGFyYW1ldGVyNDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBN
UDU+CitjbGFzcyBNYWluVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCwgTVA1KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAy
LCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1U
eXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
Mz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1
KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9w
YXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgp
KS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1f
cGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9k
IG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cisg
ICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFt
ZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ01haW5UaHJl
YWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAg
LTIxNSw2ICsyOTcsNDYgQEAgUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1h
aW5UaHJlYWRUYXNrKAogICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMykpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRh
c2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lk
IChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIz
LAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBl
LCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAg
ICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
ND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1
LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFp
blRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2Qp
KE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAg
ICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBj
b25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICBy
ZXR1cm4gTWFpblRocmVhZFRhc2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46
OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+
Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gKKyNlbmRpZiAvLyBNYWluVGhyZWFkVGFza19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggNjNlZGNmMGQ2N2E2ODRmNWRi
ZTBhMTJkNWQ5ZDI2MmEwYjE0YWMyMy4uYTlmNDUwZWQ0ODI0NWQ4MWIwYzQzMDcyY2EzOTM3MTJk
MGRkMzc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NQbHVnaW5M
YXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6
OmRyYXcoKQogewotICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDYxYTJlNTNlZDIzMGY5NjdlZTFkODVkZDA4M2NiYWNmOWMyNjcxOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJveHkuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWZuZGVmIE5ERUJVRworYm9vbCBDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KQoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOworfQorCituYW1lc3BhY2UgeworYm9v
bCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOworc3RhdGljIFdURjo6VGhyZWFkSWRlbnRpZmllciBp
bXBsVGhyZWFkSUQ7Cit9CisKK2Jvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKK3sKKyAgICBy
ZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsK
K30KKwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgaXNJbXBsVGhyZWFkKQorewor
ICAgIGZha2VJbXBsVGhyZWFkID0gaXNJbXBsVGhyZWFkOworfQorCit2b2lkIENDUHJveHk6OnNl
dEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyIGlkKQoreworICAgIGltcGxUaHJlYWRJ
RCA9IGlkOworfQorCisjZW5kaWYgLy8gIU5ERUJVRworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzQ1ZDJjZGFjMGE5ZjkzYTE4OWY0YTEwMzcyZWQwN2Q1YWE4OGJlYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Byb3h5X2gK
KyNkZWZpbmUgQ0NQcm94eV9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShT
S0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NUaHJlYWQ7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBU
ZXh0dXJlTWFuYWdlcjsKKworLy8gQWJzdHJhY3QgY2xhc3MgcmVzcG9uc2libGUgZm9yIHByb3h5
aW5nIGNvbW1hbmRzIGZyb20gdGhlIG1haW4tdGhyZWFkIHNpZGUgb2YKKy8vIHRoZSBjb21wb3Np
dG9yIG92ZXIgdG8gdGhlIGNvbXBvc2l0b3IgaW1wbGVtZW50YXRpb24uCitjbGFzcyBDQ1Byb3h5
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Byb3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5DQ1Byb3h5KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IGZpbmlzaEFsbFJlbmRlcmluZygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
Q0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHku
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBk
ZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBEZWJ1ZyBob29rcworI2lmbmRlZiBOREVCVUcK
KyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ltcGxU
aHJlYWQoKTsKKyNlbmRpZgorCisgICAgLy8gVGVzdGluZyBob29rcworICAgIHZpcnR1YWwgdm9p
ZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKSA9IDA7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhh
Y2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0Cisg
ICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVT
RShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpID0gMDsKKyNlbmRp
ZgorCisgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgcmVuZGVyX3dpZGdldCBzdGlsbCBkb2Vz
IHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9zdE1haW5UaHJlYWRJCisgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0gMDsKKworICAgIC8vIFRlbXBvcmFyeSBoYWNr
IHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hy
b21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdl
cigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIENDUHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xh
c3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIHZvaWQg
c2V0SW1wbFRocmVhZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6
VGhyZWFkSWRlbnRpZmllcik7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjE4ZWE5Y2VlYjhkMmFm
MjQ2ZDY0Y2I5NGJlYjZkNzM2ODAxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApA
QCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
b3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQor
ICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2Vu
ZGlmCisgICAgfQorfTsKKworUGFzc093blB0cjxDQ1Byb3h5PiBDQ1NpbmdsZVRocmVhZFByb3h5
OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NTaW5nbGVUaHJlYWRQcm94eShsYXllclRyZWVIb3N0KSk7Cit9CisKK0ND
U2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KQorICAgIDogbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAg
LCBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMoMCkKKyAgICAsIG1fZ3JhcGhpY3NDb250ZXh0
TG9zdChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NT
aW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVI
b3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworfQorCitDQ1NpbmdsZVRocmVhZFByb3h5
Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhy
ZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5
ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9vbCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29tbWl0SWZOZWVkZWQoKTsKKworCisgICAgaWYgKCFkb0NvbXBvc2l0ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhw
aXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOworfQorCit2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJU
cmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVy
SGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIG1fZ3JhcGhp
Y3NDb250ZXh0TG9zdCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CisjZWxzZQorICAgIC8vIFNpbmdsZSB0aHJlYWRlZCBvbmx5IHdvcmtz
IHdpdGggVEhSRUFERURfQ09NUE9TSVRJTkcuCisgICAgQ1JBU0goKTsKKyNlbmRpZgorfQorCit2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICAvLyBGSVhN
RTogT25jZSB3ZSBtb3ZlIHJlbmRlcl93aWRnZXQgc2NoZWR1bGluZyBpbnRvIHRoaXMgY2xhc3Ms
IHdlIGNhbgorICAgIC8vIHRyZWF0IHJlZHJhdyByZXF1ZXN0cyBtb3JlIGVmZmljaWVudGx5IHRo
YW4gY29tbWl0QW5kUmVkcmF3IHJlcXVlc3RzLgorICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgfQorICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IDA7Cit9CisKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogQ0NTaW5nbGVU
aHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCk7Cit9CisjZW5kaWYKKworVGV4dHVy
ZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKTsKK30KKworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVu
ZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCit7CisgICAgaWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5l
ZWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb21taXRJZk5lZWRlZCgpOworCisgICAg
aWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQo
KTsKK30KKyNlbmRpZgorCisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250
ZXh0SWZOZWVkZWQoKQoreworICAgIGlmICghbV9ncmFwaGljc0NvbnRleHRMb3N0KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICBBU1NF
UlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KSkgeworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHRydWUpOworICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dExvc3QgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gVG9sZXJhdGUgYSBjZXJ0YWluIG51bWJlciBvZiByZWNyZWF0aW9uIGZhaWx1cmVzIHRv
IHdvcmsgYXJvdW5kIHJhY2VzCisgICAgLy8gaW4gdGhlIGNvbnRleHQtbG9zdCBtYWNoaW5lcnku
CisgICAgbV9udW1GYWlsZWRSZWNyZWF0ZUF0dGVtcHRzKys7CisgICAgaWYgKG1fbnVtRmFpbGVk
UmVjcmVhdGVBdHRlbXB0cyA8IDUpIHsKKyAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGhhdmUgdHJpZWQg
dG9vIG1hbnkgdGltZXMgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQuIFRlbGwgdGhlIGhvc3QgdG8g
ZmFsbAorICAgIC8vIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5nLgorICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCit7Cisg
ICAgLy8gVXBkYXRlCisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwor
CisgICAgLy8gUHJlY29tbWl0IGlzIGEgdGVtcG9yYXJ5IHN0ZXAgd2UgbmVlZCB0byBwZXJmb3Jt
IHRvIHB1c2ggdGhpbmdzIGxpa2UKKyAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJl
ZUhvc3RJbXBsLCBiZWNhdXNlCisgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVy
cygpIGlzbid0IHNwbGl0IGludG8gaG9zdCBhbmQgaW1wbCBwYXJ0cy4KKyAgICB7CisgICAgICAg
IFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wcmVD
b21taXQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gVGhpcyBz
aG91bGQgYmVjb21lIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCkgb25jZSB3ZSBzcGxp
dCBhcGFydAorICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMuCisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAvLyBDb21taXQKKyAgICB7
CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRU
byhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6ZG9Db21wb3NpdGUoKQoreworICAgIEFTU0VSVCghbV9ncmFwaGljc0NvbnRleHRMb3N0KTsK
KworICAgIHsKKyAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBs
LT5pc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUg
Y29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKKyAgICAgICAg
ICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdl
IHdpbGwgb25seSBiZQorICAgICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24g
b2YgdGhlIG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgorICAgICAgICAgIC8vIHJlY292ZXJ5
IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRo
ZQorICAgICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5l
eHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgorICAgICAgICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVw
YWludCB5ZXQgYWdhaW4uCisgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHRMb3N0ID0gdHJ1ZTsK
KyAgICAgICAgICBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMgPSAwOworICAgICAgICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYxYTBlNGE3OWU3MzU4MmZhNzExN2I0YjNkOTgx
MGM0Y2Y3YWUwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2luZ2xlVGhyZWFkUHJveHlfaAorI2RlZmluZSBD
Q1NpbmdsZVRocmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50Lmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5IDogcHVi
bGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUHJveHk+IGNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2aXJ0dWFsIH5DQ1NpbmdsZVRocmVhZFByb3h5
KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBib29sIGNv
bXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3Qq
IG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
JiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGxv
c2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBIb3Jy
aWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUg
R3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBB
U0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgp
OworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSBMYXllckNocm9taXVtcyBo
b2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtcworICAgIHZpcnR1YWwgVGV4
dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKKworICAgIC8vIFNwZWNpYWwg
Y2FzZSBmdW5jdGlvbnMuCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lk
IGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIGJvb2wgcmVjcmVh
dGVDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbW1pdElmTmVlZGVkKCk7CisgICAgYm9v
bCBkb0NvbXBvc2l0ZSgpOworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4K
KyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKworICAgIC8vIFVzZWQgb24g
dGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6
YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJU
cmVlSG9zdEltcGw7CisKKyAgICBpbnQgbV9udW1GYWlsZWRSZWNyZWF0ZUF0dGVtcHRzOworICAg
IGJvb2wgbV9ncmFwaGljc0NvbnRleHRMb3N0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQwZmJlZTQxZmZhZjk2NWM4OWM1NzM0ZTRj
NzI0YTdlN2U0YTJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRl
ICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOworaW50
IG51bVByb3hpZXMgPSAwOworfQorCitQYXNzT3duUHRyPENDUHJveHk+IENDVGhyZWFkUHJveHk6
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ1RocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30KKworQ0NUaHJlYWRQ
cm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAg
OiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVl
SG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbnVtUHJveGllcysr
OworICAgIGlmICghY2NUaHJlYWQpIHsKKyAgICAgICAgY2NUaHJlYWQgPSBtX2xheWVyVHJlZUhv
c3QtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGNjVGhyZWFkLT50aHJlYWRJRCgpKTsKKyNl
bmRpZgorICAgIH0KK30KKworQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJv
eGllcy0tOworICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7
CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6
Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworR3Jh
cGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0SW1wbDsKK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK3sKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhv
c3RDb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworCisgICAgLy8gTGVhayB0aGUgY29u
dGV4dCBwb2ludGVyIHNvIHdlIGNhbiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgaXQgdG8gdGhlIG90
aGVyIHNpZGUuLi4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciA9IGNvbnRleHQu
cmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQoY29udGV4dFB0ci0+aGFzT25lUmVmKCkp
OworCisgICAgLy8gTWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJPbkNDVGhyZWFkLiBUaGUgcmVzdWx0cyBvZiB0aGF0IGNhbGwKKyAgICAvLyBhcmUgcHVzaGVk
IGludG8gdGhlIGluaXRpYWxpemVTdWNjZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJp
YWJsZXMuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBib29sIGluaXRp
YWxpemVTdWNjZWVkZWQ7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRp
ZXM7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhv
d25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVkZWQp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CisgICAgY29tcGxldGlv
bi53YWl0KCk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgbV9sYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CisgICAg
cmV0dXJuIGluaXRpYWxpemVTdWNjZWVkZWQ7Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMmIENDVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29w
eTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAg
IG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkND
VGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIC8vIENy
ZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c3Rv
cCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gU3luY2hy
b25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxl
dGVkLgorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9CisKKyNpZiBVU0UoU0tJQSkKK0dyQ29u
dGV4dCogQ0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAgIC8vIE5vdCBzdXBwb3J0
ZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIENS
QVNIKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworVGV4dHVyZU1hbmFnZXIqIENDVGhy
ZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXRPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQo
aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIC8vIEZJWE1F
OiBjYWxsIGJlZ2luRnJhbWVBbmRDb21taXQgb24gbWFpbiB0aHJlYWQKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQor
CisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRv
IENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikK
K3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNv
bW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIH0KKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7
CisgICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1f
bGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0UHRyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogaW5p
dGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVz
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChhZG9wdFJlZihjb250ZXh0UHRy
KSk7CisgICAgKmluaXRpYWxpemVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihvd25lckhhY2ssIGNvbnRleHQpOworICAgIGlmICgqaW5pdGlh
bGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwo
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIo
KTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZiNmM0NDhiMGNlYWU3ZWJiZDQ2ODI2NDlhYTc5MjA1ZDRhYzUxMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ1RocmVhZFByb3h5X2gKKyNkZWZpbmUgQ0NUaHJlYWRQcm94eV9oCisKKyNpbmNs
dWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKKworY2xh
c3MgQ0NUaHJlYWRQcm94eSA6IHB1YmxpYyBDQ1Byb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1Byb3h5PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICB2aXJ0
dWFsIH5DQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0aW9uCisg
ICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlz
U3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
ZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBj
b2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50
aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250
ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGls
ZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVt
cworICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCop
OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgYmVnaW5GcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhy
ZWFkCisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpOworICAgIHZvaWQg
Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgZHJhd0xheWVy
c09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCopOworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdCosIEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQq
LCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7
CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lk
IHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3Nl
ZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIC8vIFVzZWQgb24gbWFpbi10
aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKworICAgIC8vIEFjY2Vzc2Vk
IG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhv
c3Q7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXNNYWluVGhyZWFkQ29weTsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQg
Y2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAppbmRleCA5MWM1OGU1ZDI1YjdiYjI4
NmUyMTZjNGUwNjhjYmUxMDk1NzhmMTgzLi5kOGRlNGFiMDM0Njk4ODc2OWZiZTI2NzRmZDMyMzYx
MGM0NWQ3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApAQCAtMTk4LDYgKzE5OCw0OCBAQCBw
cml2YXRlOgogICAgIFA0IG1fcGFyYW1ldGVyNDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVu
YW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBDQ1RocmVhZFRhc2s1IDogcHVibGljIENDVGhy
ZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwg
TVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazU8VCwgUDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNT4gQ0NUaHJlYWRUYXNrSW1wbDsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+
OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNr
VHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBN
ZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFt
MyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2Us
IG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwg
cGFyYW1ldGVyNSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2s1KFQqIGlu
c3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRl
cjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRl
cjUpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRo
b2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAs
IG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0
ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAsIG1fcGFy
YW1ldGVyNShwYXJhbWV0ZXI1KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSku
Km1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3Bh
cmFtZXRlcjQsIG1fcGFyYW1ldGVyNSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBt
X21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAg
IFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgUDUgbV9wYXJhbWV0
ZXI1OworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRh
c2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKICAgICBUKiBjb25zdCBjYWxsZWUsCkBAIC0yNzQsNiAr
MzE2LDI3IEBAIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygK
IAogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBl
bmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorUGFzc093
blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNh
bGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAg
Y29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQsCisgICAgY29u
c3QgUDUmIHBhcmFtZXRlcjUpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazU8VCwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5
cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBj
YWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpj
b3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFy
YW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIz
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENDVGhyZWFkVGFza19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGJmMjNiZGVmZDlmM2Y1Y2I4MTE4NjQ4MGRm
ZjgxYzM3MjY5MTk5ZTIuLjVmNWIyNTY0M2E4YmY4NGRjMGU2YTRmNTgxY2QwZGM2MzQ0MjEyNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggNGE1NWJjYTBhMzY3ZDcwZjM4NzRjNjA4M2Q1MzYz
YjVjNjRkNmJmMS4uOWZmMWZjY2M5NzE2YzEyNDJmZTM1ZmU2OTBhMmE4MDIxNjBkMmYwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3ICs3OSw3
IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QgaW5kZXgsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zCiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJh
dygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICBpZiAobV9z
a2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Yzc3ZTQ1OTJmN2MwZjkyNjgzMTM1Nzk1NjBhOGRiNTMyYjc1YzM5My4uZTAzZjQ2ZTY0OTUwZWQ4
MjMwZTIxODA5MDE5Y2U1NTYzOTQxODM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOC0yOSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBJbnRyb2R1Y2UgQ0NTaW5nbGVUaHJlYWRQcm94eSBpbiBv
cmRlciB0byBtb3ZlIExheWVyUmVuZGVyZXIgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4MDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDExLTA4LTI5ICBHcmVnIEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIGFiaWxpdHkgdG8gZG8gc3RhdGljIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0NDhiZDE0
NWU5YWJlYWU0Li43ZDQ4ZGNiYTdhMGRkZmZhNTljNjJjMTEzZDNkZTdmZDY4NjFjMThlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTAyLDcgKzEx
MDIsOCBAQCB2b2lkIFdlYlZpZXdJbXBsOjpkb1BpeGVsUmVhZGJhY2tUb0NhbnZhcyhXZWJDYW52
YXMqIGNhbnZhcywgY29uc3QgSW50UmVjdCYgcmVjdAogICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSkpOwogICAgIFJlZlB0
cjxCeXRlQXJyYXk+IHBpeGVsQXJyYXkoQnl0ZUFycmF5OjpjcmVhdGUocmVjdC53aWR0aCgpICog
cmVjdC5oZWlnaHQoKSAqIDQpKTsKICAgICBpZiAoaW1hZ2VCdWZmZXIuZ2V0KCkgJiYgcGl4ZWxB
cnJheS5nZXQoKSkgewotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHBpeGVsQXJyYXktPmRhdGEoKSwgaW52ZXJ0UmVjdCk7CisgICAgICAgIGJvb2wgc3VjY2Vl
ZGVkID0gbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGVBbmRSZWFkYmFjayhwaXhlbEFycmF5LT5k
YXRhKCksIGludmVydFJlY3QpOworICAgICAgICBBU1NFUlQoc3VjY2VlZGVkKTsKICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dFByZW11bHRpcGxpZWRJbWFnZURhdGEocGl4ZWxBcnJheS5nZXQoKSwg
cmVjdC5zaXplKCksIEludFJlY3QoSW50UG9pbnQoKSwgcmVjdC5zaXplKCkpLCBJbnRQb2ludCgp
KTsKICAgICAgICAgZ2Muc2F2ZSgpOwogICAgICAgICBnYy50cmFuc2xhdGUoSW50U2l6ZSgwLCBi
aXRtYXBIZWlnaHQpKTsKQEAgLTExNTAsNyArMTE1MSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OnRo
ZW1lQ2hhbmdlZCgpCiAgICAgdmlldy0+aW52YWxpZGF0ZVJlY3QoZGFtYWdlZFJlY3QpOwogfQog
Ci12b2lkIFdlYlZpZXdJbXBsOjpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCit2b2lkIFdlYlZpZXdJ
bXBsOjpjb21wb3NpdGUoYm9vbCkKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiAjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQpAQCAtMTE2Myw3ICsxMTY0LDcgQEAgdm9p
ZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQogICAgIGlmIChtX3BhZ2VPdmVy
bGF5KQogICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKIAotICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tcG9zaXRlKGZpbmlzaCk7CisgICAgbV9sYXllclRyZWVIb3N0LT5jb21wb3NpdGUo
KTsKICNlbmRpZgogI2VuZGlmCiB9CkBAIC0yNTE3LDkgKzI1MTgsNyBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRSb290R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKiBsYXllcikKICAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5zZXRSb290TGF5ZXIobGF5ZXIpOwogCiAgICAgSW50UmVjdCBkYW1h
Z2VkUmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpOwotICAgIGlmIChtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKLSAgICAgICAgaW52YWxpZGF0ZVJvb3RMYXll
clJlY3QoZGFtYWdlZFJlY3QpOwotICAgIGVsc2UKKyAgICBpZiAoIW1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlKQogICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0ZVJlY3QoZGFt
YWdlZFJlY3QpOwogfQogCkBAIC0yNjEwLDExICsyNjA5LDE3IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKICAgICAgICAg
V2ViQ29yZTo6Q0NTZXR0aW5ncyBjY1NldHRpbmdzOwogICAgICAgICBjY1NldHRpbmdzLmFjY2Vs
ZXJhdGVQYWludGluZyA9IHBhZ2UoKS0+c2V0dGluZ3MoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5h
YmxlZCgpOwogICAgICAgICBjY1NldHRpbmdzLmNvbXBvc2l0ZU9mZnNjcmVlbiA9IHNldHRpbmdz
KCktPmNvbXBvc2l0ZVRvVGV4dHVyZUVuYWJsZWQoKTsKKyNpZiBVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCisgICAgICAgIGNjU2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCA9IHRydWU7
CisjZWxzZQorICAgICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSBmYWxz
ZTsKKyNlbmRpZgogICAgICAgICBjY1NldHRpbmdzLnNob3dGUFNDb3VudGVyID0gc2V0dGluZ3Mo
KS0+c2hvd0ZQU0NvdW50ZXIoKTsKICAgICAgICAgY2NTZXR0aW5ncy5zaG93UGxhdGZvcm1MYXll
clRyZWUgPSBzZXR0aW5ncygpLT5zaG93UGxhdGZvcm1MYXllclRyZWUoKTsKIAogICAgICAgICBt
X2xheWVyVHJlZUhvc3QgPSBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBjY1NldHRpbmdz
KTsKICAgICAgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdCkgeworICAgICAgICAgICAgdXBkYXRlTGF5
ZXJUcmVlVmlld3BvcnQoKTsKICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRBY3RpdmF0ZUFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcodHJ1ZSk7CiAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICBtX2NvbXBvc2l0b3JDcmVhdGlvbkZh
aWxlZCA9IGZhbHNlOwpAQCAtMjY1OSwxMSArMjY2NCwyMCBAQCB2b2lkIFdlYlZpZXdJbXBsOjph
bmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKIAogdm9pZCBXZWJWaWV3SW1w
bDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewotICAgIC8vIEZv
cmNlIFZpZXdIb3N0TXNnX0RpZEFjdGl2YXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZyB0byBiZSBz
ZW50IHNvCi0gICAgLy8gdGhhdCB0aGUgYnJvd3NlciBwcm9jZXNzIGNhbiByZWFjcXVpcmUgc3Vy
ZmFjZXMuCi0gICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSBmYWxzZTsKLSAg
ICBzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoc3VjY2Vzcyk7Ci0gICAgaWYgKHN1
Y2Nlc3MgJiYgbV9wYWdlT3ZlcmxheSkKKworICAgIC8vIFN3aXRjaCBiYWNrIHRvIHNvZnR3YXJl
IHJlbmRlcmluZyBtb2RlLCBpZiBuZWNlc3NhcnkKKyAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAg
ICAgQVNTRVJUKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKTsKKyAgICAgICAgc2V0
SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKGZhbHNlKTsKKyAgICAgICAgbV9jb21wb3Np
dG9yQ3JlYXRpb25GYWlsZWQgPSB0cnVlOworICAgICAgICBtX2NsaWVudC0+ZGlkSW52YWxpZGF0
ZVJlY3QoSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgsIG1fc2l6ZS5oZWlnaHQpKTsKKworICAg
ICAgICAvLyBGb3JjZSBhIHN0eWxlIHJlY2FsYyB0byByZW1vdmUgYWxsIHRoZSBjb21wb3NpdGVk
IGxheWVycy4KKyAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+c2NoZWR1
bGVGb3JjZWRTdHlsZVJlY2FsYygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG1fcGFnZU92ZXJsYXkpCiAgICAgICAgIG1fcGFnZU92ZXJsYXktPnVwZGF0ZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcApp
bmRleCAxYzVmODc3MjUyNjZiMDg4ZjY4NjY3NDZjOGQzYTFmOTYzYjU3N2MyLi5kOTk0M2U3MTNh
MjBhNGQ3YjA5MDQxYTRlY2NmNzdkOTBiMzNiMzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKQEAgLTQxLDYgKzQxLDcgQEAgcHVi
bGljOgogICAgIE1PQ0tfTUVUSE9EMihtZXRob2QyLCB2b2lkKGludCBhMSwgaW50IGEyKSk7CiAg
ICAgTU9DS19NRVRIT0QzKG1ldGhvZDMsIHZvaWQoaW50IGExLCBpbnQgYTIsIGludCBhMykpOwog
ICAgIE1PQ0tfTUVUSE9ENChtZXRob2Q0LCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMsIGlu
dCBhNCkpOworICAgIE1PQ0tfTUVUSE9ENShtZXRob2Q1LCB2b2lkKGludCBhMSwgaW50IGEyLCBp
bnQgYTMsIGludCBhNCwgaW50IGE1KSk7CiB9OwogCiBURVNUKENDVGhyZWFkVGFza1Rlc3QsIHJ1
bm5hYmxlTWV0aG9kcykKQEAgLTUxLDEyICs1MiwxNCBAQCBURVNUKENDVGhyZWFkVGFza1Rlc3Qs
IHJ1bm5hYmxlTWV0aG9kcykKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QyKDksIDgpKS5U
aW1lcygxKTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2QzKDksIDgsIDcpKS5UaW1lcygx
KTsKICAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q0KDksIDgsIDcsIDYpKS5UaW1lcygxKTsK
KyAgICBFWFBFQ1RfQ0FMTChtb2NrLCBtZXRob2Q1KDksIDgsIDcsIDYsIDUpKS5UaW1lcygxKTsK
IAogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDApLT5wZXJmb3Jt
VGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDEsIDkp
LT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1l
dGhvZDIsIDksIDgpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9j
aywgJk1vY2s6Om1ldGhvZDMsIDksIDgsIDcpLT5wZXJmb3JtVGFzaygpOwogICAgIGNyZWF0ZUND
VGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDQsIDksIDgsIDcsIDYpLT5wZXJmb3JtVGFz
aygpOworICAgIGNyZWF0ZUNDVGhyZWFkVGFzaygmbW9jaywgJk1vY2s6Om1ldGhvZDUsIDksIDgs
IDcsIDYsIDUpLT5wZXJmb3JtVGFzaygpOwogfQogCiB9IC8vIG5hbWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105871</attachid>
            <date>2011-08-31 17:34:15 -0700</date>
            <delta_ts>2011-09-01 11:39:03 -0700</delta_ts>
            <desc>make ews happy</desc>
            <filename>bug-66807-20110831173414.patch</filename>
            <type>text/plain</type>
            <size>127869</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQwNzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0YTYyN2E2YjIwMjc2YmJk
NjZmOWY1OWI0ODU0YTdmZmZlYWQ0M2RkLi44ZjhiYWE0NDcyZDExNzU0MTI5NmQzOGRlYzgwMjc1
MjY0YzEyNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBD
Q0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5M
YXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250
ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVhZFRhc2s0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRo
cmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVh
ZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYWluVGhyZWFk
VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5Ojppc0ltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFNldElt
cGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
U2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRv
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNr
NTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgor
CiAyMDExLTA4LTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAg
IGxhc3RDaGFuZ2VXYXNVc2VyRWRpdCBjb250aW51ZXMgdG8gcmV0dXJuIHRydWUgd2hlbiBpbm5l
clRleHQgb3IgdGV4dENvbnRlbnQgaXMgbW9kaWZpZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA5MTBh
ODZkZWFiMWMxNTIxMjg0NzM1NDQ4ZTRjZDk3NGQzYWIzYWFjLi5kZGQ0ZDNlMWYzYTQxMmRlYTk3
MjczZjdiYWI4YTY5ZGFiNjg5M2JjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNTM1LDIwICszNTM1
LDIyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRpbGluZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1p
dHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwJywKLSAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NN
YWluVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwJywKKyAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwCmluZGV4IDU5YzJjY2Ex
ZDkyY2QzYWVmNjNhNDcwMWUwNWJkMWZiYWFjYjg0ZTcuLmRiNWUwMzQ2ZjZiNzUyY2ZjY2I1YjRl
NGM2OTUzZTViN2Q0OTBiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db250ZW50TGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTEyMCwxNiArMTIwLDE4IEBAIGJvb2wgQ29udGVudExheWVyQ2hyb21pdW06OmRyYXdzQ29u
dGVudCgpIGNvbnN0CiAKIHZvaWQgQ29udGVudExheWVyQ2hyb21pdW06OmNyZWF0ZVRleHR1cmVV
cGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9zdCkKIHsKLSNpZiAhVVNFKFRIUkVBREVE
X0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQorICAgIC8vIE5vdGUgdGhhdCBob3N0LT5za2lh
Q29udGV4dCgpIHdpbGwgY3Jhc2ggaWYgY2FsbGVkIHdoaWxlIGluIHRocmVhZGVkCisgICAgLy8g
bW9kZS4gVGhpcyB0aHVzIGRlcGVuZHMgb24gQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplIHR1
cm5pbmcgb2ZmCisgICAgLy8gYWNjZWxlcmF0ZVBhaW50aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9t
IGNyYXNoaW5nLgogICAgIGlmIChob3N0LT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZykg
ewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVy
ZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNyZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5
ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKKyAgICAgICAgR3JDb250ZXh0KiBjb250ZXh0
ID0gY29uc3RfY2FzdDxDQ0xheWVyVHJlZUhvc3QqPihob3N0KS0+c2tpYUNvbnRleHQoKTsKKyAg
ICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNy
ZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGNvbnRleHQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFNLSUEKLSNlbmRpZiAvLyAhVEhSRUFERURf
Q09NUE9TSVRJTkcKIAotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBMYXllclRleHR1cmVVcGRhdGVy
Qml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRlcjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0
LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVy
VGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDIzYzg1NTVmNTBi
ZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQyY2M1YmMuLjcxYmMwYjZiOWRiNjU2YmM0NjBmNGY4NTY1
NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcApAQCAtMTgx
LDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25z
dAogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIoY29uc3Qg
Q0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIG1fdGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxh
eWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7
CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRl
KGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTU2M2VhYTU3ZjU2NzNjODU5OWQ0ZGJhYWM4OGI5
MmQ5YzQ5NDM0OC4uZWVlYWJiMjEwYWExYjMyNTg5YzY3MWI4YzM3MTExNDQ5MmIwMzMxMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDYgKzk2LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiB9CiAKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5
ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQorewor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4oKS5zaXplKCk7ICsraSkKKyAgICAg
ICAgY2hpbGRyZW4oKVtpXS0+c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShyZW5kZXJlcik7CisK
KyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKyAgICBpZiAocmVwbGljYUxheWVyKCkpCisgICAgICAg
IHJlcGxpY2FMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKwor
ICAgIHNldExheWVyUmVuZGVyZXIocmVuZGVyZXIpOworfQorCiB2b2lkIExheWVyQ2hyb21pdW06
OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKIHsKICAg
ICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciByZW5kZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZy
ZWUgdXAgYW55IHJlc291cmNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFj
M2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmZlMmU0YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4
MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RMYXllcihib29sIGlzUm9vdExheWVyKSB7IG1faXNSb290
TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQogICAgIGJvb2wgaXNSb290TGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2lzUm9vdExheWVyOyB9CiAKKyAgICB2b2lkIHNldExheWVyUmVuZGVyZXJSZWN1cnNp
dmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKICAgICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qg
b3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVkIHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAg
ICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1bS4KICAgICAvLyBGSVhNRSwgcmVwbGFj
ZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDcwYTA1ZGNhMDkwMTBhNmNiNTlmY2Y1YjFkYWUzMTAyZDhmNmRkZmQuLmZmYzcw
MGEyYzY3ZjI3YWU2MmIyNTY2OGNkZmQxNTYxNDQzNzg1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJS
ZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIkxheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJOb25Db21wb3NpdGVkQ29udGVudEhvc3Qu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29sb3Iu
aCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJUZXh0U3Ry
ZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKQEAgLTQ0OSwxMyArNDUwLDEzIEBA
IGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKIH0KICNlbmRpZgogCi1QYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBvd25lciwg
UGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKG93
bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGluZyAmJiAhY29udGV4dFN1cHBvcnRzQWNj
ZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgpKSkKICAgICAgICAgcmV0dXJuIDA7CiAjZW5k
aWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBsYXllclJlbmRlcmVyKGFkb3B0
UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3duZXIsIGNvbnRleHQpKSk7CisgICAgUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJSZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5
ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25lckltcGwsIGNvbnRleHQpKSk7CiAgICAgaWYg
KCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC00
NjMsOCArNDY0LDEwIEBAIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqCiB9CiAKIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCogb3duZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBvd25lckltcGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KQogICAgIDog
bV9vd25lcihvd25lcikKKyAgICAsIG1fb3duZXJJbXBsKG93bmVySW1wbCkKICAgICAsIG1fY3Vy
cmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQog
ICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC00ODMsMTQgKzQ4NiwxOCBAQCBib29sIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgIC8vIExpbWl0IHRoZSBieXRl
cyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUu
CiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAq
IDEwMjQgKiAxMDI0OwogICAgICAgICBtX3NraWFDb250ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1p
dHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAg
bV9jYXBhYmlsaXRpZXMudXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5z
aW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21hcF9zdWIiKTsKLSAgICBpZiAobV9jb250ZXh0
U3VwcG9ydHNNYXBTdWIpCisgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdNYXBTdWIgPSBleHRlbnNp
b25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1YiIpOworICAgIGlmIChtX2NhcGFiaWxp
dGllcy51c2luZ01hcFN1YikKICAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xf
Q0hST01JVU1fbWFwX3N1YiIpOwogCisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fY2Fw
YWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSk7CisgICAgbV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1
cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4dHVyZUZvcm1hdChtX2NvbnRleHQuZ2V0
KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVkT2JqZWN0cygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTUxNCwxMSArNTIxLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVySW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1w
CiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogfQogCi12b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwoKQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290Q0NMYXllckltcGwpCi0gICAgICAgIGNs
ZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKG1fcm9vdENDTGF5ZXJJbXBs
LmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5jbGVhcigpOworICAgIGlmIChyb290TGF5
ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJz
aXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBoaWNzQ29udGV4dDNEKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU5LDYgKzU2NSw5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAoIXJvb3RMYXllcigpKQorICAgICAgICBy
ZXR1cm47CisKICAgICBpZiAobV9vd25lci0+dmlld3BvcnRTaXplKCkuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTU2NywxMyArNTc2LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVuZGVyV2lkZ2V0LgogICAgIG1faGVhZHNV
cERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGltZSgpKTsKIAotICAgIC8vIFJlY2hlY2sg
dGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4gVGhpcyBtYXkgYmVjb21lIG51bGwgaWYK
LSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBvZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0
aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9yb290Q0NMYXllckltcGwu
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHVwZGF0ZUxheWVycyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApAQCAtNTgyLDEyICs1ODQsNiBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycygpCiAgICAgaWYgKCFyb290TGF5ZXIo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7Ci0gICAgICAgIG1f
cm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhyb290
TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSk7Ci0gICAg
fQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRC
eXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMgLSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAgICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsK
IApAQCAtNjI0LDcgKzYyMCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVM
YXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQogCiAgICAgewogICAgICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnM6OmNhbGNEcmF3RXRjIiwg
dGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxM
YXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0sIHZvaWQqPihyb290TGF5ZXIsIHJv
b3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJMaXN0KCksIDAsIG1fbWF4VGV4dHVyZVNp
emUpOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJD
aHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2b2lkKj4ocm9vdExheWVyLCByb290TGF5
ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAwLCBtX2NhcGFiaWxpdGllcy5tYXhU
ZXh0dXJlU2l6ZSk7CiAgICAgfQogCiAgICAgcGFpbnRMYXllckNvbnRlbnRzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwpAQCAtNzMyLDcgKzcyOCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKTsKKyAg
ICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJvb3RMYXllckltcGwoKTsKICAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQpAQCAtNzUwLDcgKzc0Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7
Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1w
bCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJh
d0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRl
ciwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5k
VmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVyPihy
b290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxheWVy
TGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwog
ICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBjb3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxl
IGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4KQEAgLTg0MCwyMCArODM2LDYgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNlbnQoKQogICAgIG1faGVhZHNVcERpc3BsYXkt
Pm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllcikKLXsKLSAgICBjb25zdCBWZWN0
b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAg
ICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShjaGlsZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBp
ZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICBzZXRMYXllclJlbmRlcmVyUmVjdXJzaXZl
KGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAg
ICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShsYXllci0+cmVwbGljYUxheWVyKCkpOwot
Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3QubWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgo
KSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhlaWdodCgpKTsKQEAgLTk0OCw3ICs5MzAsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhM
YXllckNocm9taXVtKiBsYXllcikKIAogTWFuYWdlZFRleHR1cmUqIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkKIHsKLSAgICByZXR1cm4gc2V0dGluZ3Mo
KS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290Q0NMYXllckltcGwgPyBtX3Jvb3RDQ0xheWVy
SW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CisgICAgcmV0dXJu
IHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYmIHJvb3RMYXllckltcGwoKSA/IHJvb3RM
YXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxh
eSgpCkBAIC0xMDkzLDEwICsxMDc1LDYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlu
aXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyIsIHRoaXMsIDApOwogICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gR2V0IHRoZSBtYXggdGV4dHVyZSBzaXplIHN1cHBvcnRl
ZCBieSB0aGUgc3lzdGVtLgotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIEdMQyhtX2Nv
bnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXplKSk7Ci0KICAgICAvLyBDcmVhdGUgYW4g
RkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5nLgogICAgIEdMQyhtX2NvbnRleHQuZ2V0
KCksIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZm
ZXIoKSk7CiAKQEAgLTExMDgsOCArMTA4Niw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBt
X2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4
dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fbWF4VGV4
dHVyZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1h
bmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMsIG1fbWF4VGV4dHVyZVNp
emUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVh
dGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJl
U2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdl
cjo6Y3JlYXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRCeXRlcywgbV9jYXBhYmlsaXRpZXMubWF4
VGV4dHVyZVNpemUpOwogI2lmbmRlZiBOREVCVUcKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFn
ZXItPnNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KG1fY29udGV4dC5nZXQoKSk7CiAgICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdP
bmx5KG1fY29udGV4dC5nZXQoKSk7CkBAIC0xMjk5LDcgKzEyNzcsNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2VzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3VyZmFjZXModHMsIGluZGVudCwgbGF5ZXIt
PmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06Omlz
Q29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9jb250ZXh0LmdldCgpLT5nZXRFeHRlbnNp
b25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCAyZDgw
NDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3NWZkLi5lN2Y0MjFiMzZhYmU0YTU1YTRh
NjVlYmMwN2MyZWE0MTNjYjlkMDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0ND
UGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNsYXNzIENDTGF5ZXJJbXBsOwotY2xhc3Mg
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3MgQ0NMYXllclRyZWVIb3N0OyAvLyBGSVhN
RTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwog
Y2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CkBAIC03Miwx
MSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwogLy8gQ2xhc3MgdGhh
dCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCByZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgog
Y2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVibGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiwgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1
bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAvLyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRl
ciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0CisgICAgdm9p
ZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CiAKICAg
ICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnNl
dHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxpdGllczsgfQogCiAgICAgQ0NMYXllclRy
ZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7IH0KICAgICBjb25zdCBDQ0xheWVyVHJl
ZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQpAQCAtODQsMTQgKzg5LDE3
IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiByb290TGF5ZXIoKSB7IHJldHVybiBtX293
bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdyYXBoaWNzTGF5ZXIqIHJvb3RMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXllcigpOyB9CiAKKyAgICBDQ0xheWVySW1w
bCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT5yb290TGF5ZXIoKTsgfQor
ICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJbXBsKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29sIGNvbnRleHRTdXBwb3J0c01hcFN1Yigp
IGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVzaW5nTWFwU3ViOyB9CiAKICNpZiBVU0Uo
U0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0KCkgeyByZXR1cm4gbV9za2lhQ29udGV4
dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSB7
IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsgfQorICAgIGNvbnN0IEludFNpemUmIHZp
ZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBsLT52aWV3cG9ydFNpemUoKTsgfQogICAg
IGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmlld3BvcnRTaXplKCkud2lkdGgoKTsgfQog
ICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJuIHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgp
OyB9CiAKQEAgLTExNSw4ICsxMjMsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgoKSBjb25zdCB7IHJldHVybiBtX3Byb2plY3Rpb25N
YXRyaXg7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkg
Y29uc3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0KIAotICAgIGludCBtYXhUZXh0dXJlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNpemU7IH0KLQogICAgIGNvbnN0IEdlb21l
dHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21l
dHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9y
ZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIGhlYWRz
VXBEaXNwbGF5UHJvZ3JhbSgpOwpAQCAtMTQyLDI0ICsxNDgsMTcgQEAgcHVibGljOgogCiAgICAg
U3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0OwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYg
dGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJyb3IuCi0gICAgYm9vbCBpc0NvbXBvc2l0
b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwogCiAgICAgdm9pZCBy
ZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShM
YXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAg
ICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gTGF5ZXJMaXN0OwogICAg
IHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlzdDsKIAotICAg
IHZvaWQgY2xlYXJSb290Q0NMYXllckltcGwoKTsKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0
IGNsYXNzIGV4aXN0cy4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5ZXJJbXBs
OwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKENDTGF5ZXJUcmVlSG9zdCosIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oQ0NMYXll
clRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJz
KExheWVyQ2hyb21pdW0qKTsKQEAgLTE5Miw5ICsxOTEsMTMgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllckltcGxSZWN1cnNpdmUoQ0NMYXllckltcGwq
KTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0byBDQ0xheWVyVHJlZUhvc3RJbXBsCisg
ICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhvc3QgZmllbGQKICAgICBDQ0xheWVyVHJl
ZUhvc3QqIG1fb3duZXI7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBtX293bmVySW1wbDsK
KworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMgbV9jYXBhYmlsaXRpZXM7CisKICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25NYXRyaXg7CiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKQEAgLTIwMyw5ICsyMDYsNiBAQCBwcml2YXRlOgog
ICAgIENDUmVuZGVyU3VyZmFjZSogbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKICAgICB1bnNpZ25l
ZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKLSAgICAvLyBNYXhpbXVtIHRleHR1cmUgZGlt
ZW5zaW9ucyBzdXBwb3J0ZWQuCi0gICAgaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0KICAgICAvLyBT
dG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIGVhY2ggbGF5
ZXIgdHlwZQogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlIG9mIHRoZSBjb21w
b3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKICAgICAvLyBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yg
dGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUgc2FtZSByZW5kZXJlciBwcm9jZXNzCkBAIC0y
MzQsOCArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JDb250ZXh0PiBtX3NraWFDb250
ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViOwotCiAgICAg
Q0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlOwogCiAgICAgQ0NMYXllclNv
cnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZh
cy5oCmluZGV4IDI2Y2U4YjVkOTE5N2JhMzY4Njk0MjllNmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3
YmMxZWMzZmU4Nzk5ZWYxOWE3MWExMzgwZjRiMmQ0M2EwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmgKQEAgLTgwLDcgKzgwLDYgQEAgcHJpdmF0ZToKICAgICBM
YXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdlOwogfTsKIAotI2lmICFVU0UoVEhSRUFE
RURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCiBjbGFzcyBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcg
KzEwOSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsgLy8gR1BV
IGFjY2VsZXJhdGVkIGNhbnZhcy4KIH07CiAjZW5kaWYgLy8gU0tJQQotI2VuZGlmIC8vICFUSFJF
QURFRF9DT01QT1NJVElORwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZmNjE5MWJiYWQ5ZTJjMy4uY2ZkZjEyM2Fm
YTc0M2RiMjE2MTQzN2ZkOWJlOWQzNDQ3MThmNDZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCkBAIC02NSw2ICs2NSw3IEBAIHByaXZhdGU6CiAKIFRpbGVkTGF5ZXJDaHJvbWl1
bTo6VGlsZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAg
OiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9sYXllclRyZWVIb3N0KDApCiAgICAgLCBt
X3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1fdGV4dHVyZUZvcm1hdChHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9za2lwc0RyYXcoZmFsc2UpCkBAIC0xMTUs
NyArMTE2LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZVRpbGVTaXplQW5kVGls
aW5nT3B0aW9uKCkKICAgICAgICAgaXNUaWxlZCA9IGF1dG9UaWxlZDsKIAogICAgIEludFNpemUg
cmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6ZSA6IGNvbnRlbnRCb3VuZHMoKTsKLSAg
ICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVuZGVyZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsK
KyAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IG1fbGF5ZXJUcmVlSG9zdC0+bGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwogICAgIEludFNpemUgY2xhbXBlZFNpemUgPSBy
ZXF1ZXN0ZWRTaXplLnNocnVua1RvKEludFNpemUobWF4U2l6ZSwgbWF4U2l6ZSkpOwogICAgIG1f
dGlsZXItPnNldFRpbGVTaXplKGNsYW1wZWRTaXplKTsKIH0KQEAgLTEzNiwxMiArMTM3LDE0IEBA
IGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIFRp
bGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGhvc3Qp
CiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChob3N0KTsKKyAgICBtX2xh
eWVyVHJlZUhvc3QgPSBob3N0OwogICAgIGlmIChtX3RpbGVyKQogICAgICAgICByZXR1cm47CiAK
ICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0KTsKIAotICAgIG1fdGV4dHVyZUZvcm1hdCA9
IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7CisgICAgbV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+
bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RUZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4
dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIoKS0+b3JpZW50YXRpb24oKTsKICAgICBt
X3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRhdGVyKCktPnNhbXBsZWRUZXhlbEZvcm1h
dChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGlsZXIgPSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3Jl
YXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCA1ODU2OTE4MTQ0MDY5M2Y2MGY2
ZGQ2YjI5OWNiYjlkYzg5ZDFhNDVjLi5iYjI4NmQ2NjBkYWFlOTE1OGI2YjA1MjA2NjMwNDUxYjM5
MGNjYTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtODgsNiArODgsOCBAQCBw
cml2YXRlOgogCiAgICAgVGV4dHVyZU1hbmFnZXIqIHRleHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAK
KyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKwogICAgIC8vIFN0YXRlIGhl
bGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9hZC4KICAgICBJbnRSZWN0IG1fcGFpbnRSZWN0Owog
ICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggNjUyZDI4ZGZiM2M2MjM2ZTcwM2MxOTNkNGVlNTc2ZTE2OTk4ZDFjZi4uNzYwNzI4MWYw
ZjBkMTg0MzFhMzdhYjJlNjUwYjgyMTEwN2JhNWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCkBAIC0xNDcsNiArMTQ3LDcgQEAgdm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCiB7
CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChsYXllclRyZWVIb3N0KTsKICAg
ICBpZiAobV9sYXllclRyZWVIb3N0ID09IGxheWVyVHJlZUhvc3QpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTc4LDcgKzE3OSw3IEBAIGJvb2wgVmlkZW9MYXllckNocm9taXVtOjpyZXNlcnZlVGV4
dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwgR0MzRGVuCiAgICAgQVNTRVJU
KGZyYW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4dHVyZVNpemUgPSBtX2xheWVyVHJlZUhv
c3QtPm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1heFRleHR1cmVTaXplID0gbV9sYXllclRy
ZWVIb3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkubWF4VGV4dHVyZVNpemU7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUgPCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5l
KyspIHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRleHR1cmVTaXplID0gZnJhbWUtPnJlcXVp
cmVkVGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
CmluZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4
NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZh
c0xheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBsOjp+Q0NDYW52YXNMYXllckltcGwoKQog
CiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkKIHsKLSAgICBBU1NFUlQoQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgQVNTRVJUKENDUHJveHk6Omlz
SW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigpKTsKICAgICBjb25zdCBD
Q0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXIoKS0+Y2Fu
dmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlh
bGl6ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA1ZDZiYzljMzI3
MzUyNjc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi5kZWI5ZDRmZDY0M2RlZjQyM2NhMTJhM2Ji
N2VmZjYxNWYzY2RlNjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMw
LDEwICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVk
ZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlRyYWNlRXZl
bnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKKyNpbmNsdWRl
ICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5o
IgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJveHkuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1JlZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW4KIH0KIAog
Q0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBj
bGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKQotICAgIDogbV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhUZXh0dXJlU2l6ZSgwKQotICAgICwgbV9j
b250ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAg
ICA6IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9m
cmFtZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QoTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQtPmNyZWF0ZVJvb3RMYXllclBhaW50ZXIo
KSkpCiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQorICAgICwgbV92aXNpYmxlKHRydWUpCiB7
CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0aWFsaXplKCkKIHsKLSAgICBtX2xheWVy
UmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVy
ZXIpCisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCkgeworICAgICAg
ICAvLyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qgc3VwcG9ydGVkIGluIHRocmVhZGVkIG1v
ZGUuIFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9
IGZhbHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOwor
ICAgIH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRl
KHRoaXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisKKyAgICBpZiAoIW1fcHJveHktPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAv
LyBGSVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRoZXNlIHZhbHVlcyB3aWxsIG5lZWQgdG8g
YmUgaW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhpbmcgb3RoZXIgdGhhbiBtX2xheWVyUmVu
ZGVyZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1fbGF5ZXJSZW5kZXJlci0+bWF4VGV4dHVy
ZVNpemUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRl
eHR1cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250ZXh0KCkpOwotICAgIG1fY29udGV4dFN1
cHBvcnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKTsK
KyAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBn
b3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWlu
dGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKS51c2luZ0FjY2VsZXJh
dGVkUGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgw
KTsKICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEsOCBAQCBib29sIENDTGF5ZXJUcmVlSG9z
dDo6aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXllci0+YWRkQ2hpbGQobV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7CiAKLQotI2lmIFVTRShUSFJFQURFRF9D
T01QT1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpjcmVh
dGUodGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlzU3RhcnRlZCgpKTsKKyAgICAvLyBXZSBj
aGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBwcm94eSBhIGNvbW1pdCBpcyBuZWVkZWQu
CiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSNlbmRpZgogCiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODUgQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmluaXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0IiwgdGhpcywg
MCk7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIG1fcHJveHktPnN0b3AoKTsK
ICAgICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmJlZ2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2FuaW1hdGluZyA9IHRydWU7CisgICAgbV9j
bGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOworICAgIG1fYW5pbWF0aW5n
ID0gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpwcmVDb21taXQoQ0NMYXllclRy
ZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9zdEltcGwtPnNldFZpc2libGUobV92aXNp
YmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQodmlld3BvcnRTaXplKCkpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxldGUoKQordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogeworICAgIEFTU0VS
VChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVl
SG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBob3N0SW1wbC0+c2V0U291cmNlRnJhbWVO
dW1iZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25l
IGV4aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExheWVyKCkpIHsKKyAgICAgICAgLy8gVGhl
IGxheWVyUmVuZGVyZXIgbmVlZHMgdG8gYmUgc2V0IHNvIHRoYXQgY2hpbGQgbGF5ZXJzIHBpY2sg
dXAgdGhlIGxheWVyUmVuZGVyZXIKKyAgICAgICAgLy8gYXMgd2VsbCBkdXJpbmcgdGhlIHN5bmNo
cm9uaXplIHN0ZXAuCisgICAgICAgIGlmIChyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5s
YXllclJlbmRlcmVyKCkgIT0gaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSkKKyAgICAgICAgICAg
IHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
aG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKKyAgICAgICAgaG9zdEltcGwtPnNldFJvb3RM
YXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0
Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOworICAgIH0gZWxzZQorICAgICAg
ICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOworCiAgICAgbV9mcmFtZU51bWJlcisrOwogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdp
blRpbWUpCitQYXNzT3duUHRyPENDVGhyZWFkPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBv
c2l0b3JUaHJlYWQoKQogewotICAgIG1fYW5pbWF0aW5nID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+
YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7Ci0gICAgbV9hbmltYXRpbmcgPSBmYWxz
ZTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKTsKIH0KIAot
UGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogewotICAg
IC8vIEZJWE1FOiBvbmx5IGNhbGxlZCBpbiB0aHJlYWRpbmcgY2FzZSwgZml4IHdoZW4gcG9zc2li
bGUuCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1fY2xpZW50LT5jcmVhdGVMYXll
clRyZWVIb3N0Q29udGV4dDNEKCk7CiB9CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhv
c3RJbXBsQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQogewotICAgIFJlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlcik7Ci0gICAgcmV0
dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShjbGllbnQsIHJlbmRlcmVyKTsKKyAgICBy
ZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKG1fc2V0dGluZ3MpOwogfQogCi1HcmFw
aGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAg
cmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpOworICAgIG1fY2xpZW50LT5kaWRSZWNy
ZWF0ZUdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
KyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNj
aGVkdWxlQ29tcG9zaXRlKCkKIHsKLSNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAg
Ly8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMuCi0jZWxzZQotICAgIGNvbXBvc2l0ZShm
YWxzZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMs
IHJlY3QpOworICAgIG1fY2xpZW50LT5zY2hlZHVsZUNvbXBvc2l0ZSgpOworfQogI2VuZGlmCisK
Ky8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIFdlYlZpZXdJbXBsIGNvbnRleHQgY3JlYXRpb24gZ2V0
cyBzaW1wbGlmaWVkCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpjb250ZXh0
KCkKK3sKKyAgICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRvclRocmVhZCk7Cisg
ICAgcmV0dXJuIG1fcHJveHktPmNvbnRleHQoKTsKK30KKworYm9vbCBDQ0xheWVyVHJlZUhvc3Q6
OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29tcG9zaXRlQW5kUmVhZGJhY2socGl4ZWxzLCByZWN0
KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZygpCiB7Ci0j
aWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAgIC8vIEZJWE1FOiBuZWVkIHRvIGltcGxl
bWVudCB0aGlzLgotI2Vsc2UKLSAgICBtX2xheWVyUmVuZGVyZXItPmZpbmlzaCgpOwotI2VuZGlm
CisgICAgbV9wcm94eS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiB9CiAKIHZvaWQgQ0NMYXllclRy
ZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CkBAIC0xNTMsNiArMTc2LDExIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9v
dExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiAgICAgbV9ub25Db21wb3NpdGVk
Q29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5UmVjdCk7CiB9CiAKK2NvbnN0IExheWVy
UmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdDo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCkBAIC0xNzcsMTMgKzIw
NSwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIq
IGxheWVyKQogewogICAgIG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LT5ncmFwaGljc0xheWVy
KCktPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3Qt
PmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgIGlmIChsYXllcikgeworICAgIGlmIChsYXll
cikKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+
YWRkQ2hpbGQobGF5ZXIpOwotICAgICAgICBsYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRMYXll
clJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxh
eWVyUmVuZGVyZXIoKS0+Y2xlYXJSb290Q0NMYXllckltcGwoKTsKK30KIAorI2lmIFVTRShTS0lB
KQorR3JDb250ZXh0KiBDQ0xheWVyVHJlZUhvc3Q6OnNraWFDb250ZXh0KCkKK3sKKyAgICBBU1NF
UlQobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcpOworICAgIHJldHVybiBtX3Byb3h5LT5z
a2lhQ29udGV4dCgpOwogfQorI2VuZGlmCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3
cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvbnRlbnRz
U2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQogewpAQCAtMTkzLDExNCArMjI1
LDMzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2
aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvCiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uKTsKICAgICBtX25vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigpLT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7
CiAKLSAgICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKSB7CisgICAgaWYgKHZpc2libGVSZWN0Q2hh
bmdlZCkKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRp
cmVMYXllcigpOwotICAgICAgICBpZiAobV9sYXllclJlbmRlcmVyKQotICAgICAgICAgICAgbV9s
YXllclJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsKLSAgICB9CiAKICAgICBzZXROZWVkc0Nv
bW1pdEFuZFJlZHJhdygpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShi
b29sIHZpc2libGUpCiB7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBpZiAo
IXZpc2libGUpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7Ci0j
ZW5kaWYKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOworICAgIG1fcHJveHktPnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7CiB9CiAKLVBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBD
Q0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVyZXIoKQordm9pZCBDQ0xheWVyVHJlZUhv
c3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCiB7Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwgaW4gdGhhdCBjYXNlIGZhbGwgYmFjayB0
byBzb2Z0d2FyZS4KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2Ns
aWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwotICAgIGlmICghY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBY3R1YWxseSBjcmVhdGUgdGhlIHJlbmRlcmVy
LgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBjb250ZXh0KTsKLQotICAgIC8vIElmIGNy
ZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcs
IGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKLSAgICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRo
ZSByZW5kZXJlciBhZ2Fpbi4KLSAgICBpZiAobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcg
JiYgIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBmYWxzZTsKLSAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotICAgIH0KLQotICAgIHJldHVybiBsYXllclJlbmRl
cmVyOworICAgIG1fcHJveHktPmxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwogfQogCiBUZXh0dXJl
TWFuYWdlciogQ0NMYXllclRyZWVIb3N0Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKCkgY29uc3QK
IHsKLSAgICAvLyBGSVhNRTogdGhpcyBjbGFzcyBzaG91bGQgb3duIHRoZSBjb250ZW50cyB0ZXh0
dXJlIG1hbmFnZXIKLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGVudHNUZXh0dXJlTWFuYWdlcigpOwor
ICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1cmVNYW5hZ2VyKCk7CiB9CiAKICNpZiAh
VVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9z
aXRlKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoKQogewotI2lmbmRlZiBOREVC
VUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7Ci0j
ZW5kaWYKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKLSAgICBtX2xheWVyUmVuZGVyZXIt
PnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5kZXJlci0+ZHJhd0xheWVycygpOwotI2lm
bmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldEltcGxUaHJlYWQo
ZmFsc2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21wb3NpdGUoYm9v
bCBmaW5pc2gpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRl
IiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KSB7Ci0g
ICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxsIHJlcXVlc3QgYSByZXBhaW50IHdoZXRo
ZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAvLyBpbiBjcmVhdGluZyBhIG5ldyBjb250
ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIoKTsKLSAgICAgICAgbV9yZWNyZWF0aW5n
R3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3NpdG9yIGNvbnRleHQgaXMgYWxyZWFkeSBs
b3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5pc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgp
KSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8gUHV0IHJlc3VsdCBvbnNj
cmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Ci0gICAgfQotCi0gICAg
aWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKSkgewotICAgICAg
ICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdv
cmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGllZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNo
YW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9ubHkgYmUKLSAgICAgICAgLy8gY2FsbGVk
IGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVzc2FnZSBsb29wLCByZXZlcnRpbmcgb3Vy
Ci0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0
aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAvLyByZW5kZXJlciwgcmVjcmVhdGUgdGhl
IHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9vcCBpdGVyYXRpb24KLSAgICAgICAgLy8g
YW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4KLSAgICAgICAgbV9yZWNyZWF0aW5nR3Jh
cGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQo
KQotewotICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dCA9IHRydWU7Ci19Ci0KLXZvaWQg
Q0NMYXllclRyZWVIb3N0OjpyZWFsbG9jYXRlUmVuZGVyZXIoKQotewotICAgIFJlZlB0cjxMYXll
clJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFsYXllclJlbmRlcmVyKSB7Ci0gICAgICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0
ZUdyYXBoaWNzQ29udGV4dChmYWxzZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBs
YXllclJlbmRlcmVyLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKG1fcm9vdExheWVyLT5wbGF0
Zm9ybUxheWVyKCkpOwotICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVyUmVuZGVyZXI7Ci0KLSAg
ICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQodHJ1ZSk7CisgICAgQVNTRVJU
KCFtX3NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQpOworICAgIHN0YXRpY19jYXN0PEND
U2luZ2xlVGhyZWFkUHJveHkqPihtX3Byb3h5LmdldCgpKS0+Y29tcG9zaXRlSW1tZWRpYXRlbHko
KTsKIH0KICNlbmRpZiAvLyAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oCmluZGV4IDk5YjhiZjIwOTRkODM2NDE0ODNiNDlkOTNjNjkwZmIxZWFi
YWU4YzYuLjVmOWNiNzA5ODFlNGY1MzQxOThjNWJjMmVlNzFiNWI1OTY5OTkwOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNywxNyArMjcsMTkgQEAKIAogI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAKICNpbmNsdWRlIDx3dGYvUGFzc093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIAorI2lmIFVTRShTS0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKLWNsYXNzIEND
TGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CiBjbGFzcyBDQ1RocmVhZDsKIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKQEAgLTY1LDM1ICs2Nyw2NCBAQCBzdHJ1
Y3QgQ0NTZXR0aW5ncyB7CiAgICAgQ0NTZXR0aW5ncygpCiAgICAgICAgICAgICA6IGFjY2VsZXJh
dGVQYWludGluZyhmYWxzZSkKICAgICAgICAgICAgICwgY29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNl
KQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9yVGhyZWFkKGZhbHNlKQogICAgICAgICAg
ICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAgICAgICAgICwgc2hvd1BsYXRmb3JtTGF5
ZXJUcmVlKGZhbHNlKSB7IH0KIAogICAgIGJvb2wgYWNjZWxlcmF0ZVBhaW50aW5nOwogICAgIGJv
b2wgY29tcG9zaXRlT2Zmc2NyZWVuOworICAgIGJvb2wgZW5hYmxlQ29tcG9zaXRvclRocmVhZDsK
ICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJvb2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVl
OwogfTsKIAorLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24gb24gYW4gSW1wbCdzIHJlbmRlcmluZyBj
YXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRyZWVIb3N0CitzdHJ1Y3QgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyB7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpCisgICAg
ICAgIDogYmVzdFRleHR1cmVGb3JtYXQoMCkKKyAgICAgICAgLCB1c2luZ01hcFN1YihmYWxzZSkK
KyAgICAgICAgLCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmcoZmFsc2UpCisgICAgICAgICwgbWF4
VGV4dHVyZVNpemUoMCkgeyB9CisKKyAgICBHQzNEZW51bSBiZXN0VGV4dHVyZUZvcm1hdDsKKyAg
ICBib29sIHVzaW5nTWFwU3ViOworICAgIGJvb2wgdXNpbmdBY2NlbGVyYXRlZFBhaW50aW5nOwor
ICAgIGludCBtYXhUZXh0dXJlU2l6ZTsKK307CisKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1
YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4gewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdENsaWVudCos
IGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFsIH5DQ0xheWVyVHJlZUhvc3QoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7
Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1p
dENvbXBsZXRlKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1w
bD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCopOwot
ICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxh
eWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNl
IHRvIENDUHJveHkuCisgICAgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CisgICAgdm9pZCBwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCopOyAvLyBUZW1w
b3JhcnkgaGFjayB1bnRpbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMgaXMgc3Bs
aXQgYXBhcnQuCisgICAgdm9pZCBjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKik7CisgICAg
UGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOworICAgIFBhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsK
KyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJ
bXBsKCk7CisgICAgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3Mp
OworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisgICAgdm9pZCBzY2hlZHVsZUNvbXBv
c2l0ZSgpOworI2VuZGlmCiAKKyAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIFdl
YlZpZXcuCiAgICAgYm9vbCBhbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZzsg
fQogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fYW5pbWF0aW5nID0g
YW5pbWF0aW5nOyB9IC8vIENhbiBiZSByZW1vdmVkIHdoZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxp
bmcgbW92ZXMgaW5zaWRlLgogCiAgICAgQ0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7
IHJldHVybiBtX2NsaWVudDsgfQogCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAg
ICB2b2lkIGNvbXBvc2l0ZSgpOworI2VuZGlmCisKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKKyAgICAvLyBDb21wb3NpdGVzIGFuZCBhdHRlbXB0cyB0byByZWFkIGJh
Y2sgdGhlIHJlc3VsdCBpbnRvIHRoZSBwcm92aWRlZAorICAgIC8vIGJ1ZmZlci4gSWYgaXQgd2Fz
bid0IHBvc3NpYmxlLCBlLmcuIGR1ZSB0byBjb250ZXh0IGxvc3QsIHdpbGwgcmV0dXJuCisgICAg
Ly8gZmFsc2UuCisgICAgYm9vbCBjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmKTsKIAogICAgIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CiAKQEAgLTEw
MSw2ICsxMzIsMTEgQEAgcHVibGljOgogCiAgICAgdm9pZCBpbnZhbGlkYXRlUm9vdExheWVyUmVj
dChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCisgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OworCisgICAgLy8g
VGVzdC1vbmx5IGhvb2sKKyAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworCiAgICAg
dm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogICAgIHZvaWQgc2V0TmVlZHNSZWRyYXco
KTsKIApAQCAtMTEwLDYgKzE0NiwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDQ1NldHRpbmdz
JiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3M7IH0KIAorICAgIC8vIEhvcnJp
YmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVhZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBH
ckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFT
QVAuCisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlm
CisKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24p
OwogCiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV92
aWV3cG9ydFNpemU7IH0KQEAgLTExNywyMSArMTU5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBz
ZXRWaXNpYmxlKGJvb2wpOwogCi0gICAgLy8gVGVtcG9yYXJ5IGhvbWUgZm9yIHRoZSBub24tdGhy
ZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7Ci0KLSAgICB2b2lkIGxvc2VDb21wb3NpdG9y
Q29udGV4dCgpOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdldCgpOyB9Ci0jZW5kaWYKLQogICAgIE5v
bkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0KCkgY29uc3Qg
eyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QuZ2V0KCk7IH0KIAotICAgIGJvb2wg
Y29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNN
YXBTdWI7IH0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUoKSBjb25zdCB7IHJldHVybiBtX21heFRl
eHR1cmVTaXplOyB9Ci0gICAgR0MzRGVudW0gYmVzdFRleHR1cmVGb3JtYXQoKSB7IHJldHVybiBt
X2Jlc3RUZXh0dXJlRm9ybWF0OyB9Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3Qo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NTZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYg
KzE2OSwxMyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAgIC8vIFRlbXBvcmFyeSBob21lIGZvciB0
aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgotI2lmICFVU0UoVEhSRUFERURfQ09NUE9T
SVRJTkcpCi0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwotICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRl
cmVyKCk7Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29udGV4dDsKLSAgICBSZWZQ
dHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVyUmVuZGVyZXI7Ci0jZW5kaWYKLQotICAg
IGludCBtX21heFRleHR1cmVTaXplOwotICAgIEdDM0RlbnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7
Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1YjsKLQogICAgIGJvb2wgbV9hbmltYXRp
bmc7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIG1fY2xpZW50OwogCiAgICAgaW50IG1f
ZnJhbWVOdW1iZXI7CiAKLSAgICBPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5PiBtX3By
b3h5OworICAgIE93blB0cjxDQ1Byb3h5PiBtX3Byb3h5OwogCiAgICAgT3duUHRyPEdyYXBoaWNz
TGF5ZXI+IG1fcm9vdExheWVyOwogICAgIE93blB0cjxOb25Db21wb3NpdGVkQ29udGVudEhvc3Q+
IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAtMTY3LDYgKzE4Myw3IEBAIHByaXZhdGU6
CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAgICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6
ZTsKKyAgICBib29sIG1fdmlzaWJsZTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLQotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOjpjcmVhdGUoKQotewotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkpOwotfQotCi12b2lkIEND
TGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KENDTGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NM
YXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCi17Ci0gICAgaG9zdEltcGwtPnNldFNvdXJjZUZy
YW1lTnVtYmVyKGhvc3QtPmZyYW1lTnVtYmVyKCkpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiYzMxOGE0YTcxNDIzMmQzMTg0ZDJmZWQ0YWQ4MDk1MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXJfaAotI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotCi0j
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDQ0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBD
Q0xheWVyVHJlZUhvc3RJbXBsOwotCi0vLyBGSVhNRTogbWVyZ2UgaW4gVHJlZVN5bmNocm9uaXpl
ciBjb2RlIGludG8gaGVyZQotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIpOwotcHVibGljOgot
ICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7
Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCosIENDTGF5ZXJUcmVlSG9zdEltcGwqKTsK
LQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpIHsgfQotfTsKLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKaW5kZXgg
NGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1Mzg2NjlhZS4uNDNjNzQ1NmNmOGY3YjM3
MzhjZDQ1MzY5Mzg5OTljZTRhNzhhM2I1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHAKQEAgLTM4LDI0ICszOCwyMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3Jl
YXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxMYXllclJl
bmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3Mp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xheWVyVHJlZUhvc3RJbXBsKGNsaWVudCwg
cmVuZGVyZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDTGF5ZXJUcmVlSG9zdEltcGwo
c2V0dGluZ3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1w
bChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5k
ZXJlckNocm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJUcmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVl
SG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiAgICAgOiBtX3NvdXJjZUZyYW1l
TnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigwKQotICAgICwgbV9jbGllbnQoY2xpZW50
KQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclJlbmRlcmVyKHJl
bmRlcmVyKQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZhbHNlKQorICAgICwgbV9zZXR0aW5ncyhz
ZXR0aW5ncykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdElt
cGwoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRy
ZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAg
ICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGw6OmJlZ2luQ29tbWl0KCkKQEAgLTY0LDcxICs2MywxMDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29tbWl0
Q29tcGxldGUoKQogewotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotICAgIHNldE5lZWRz
UmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycygpCitH
cmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAg
Ly8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3Jh
cnkgcmVzdHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXll
cnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0aW9uIG9uIHRoZSBtYWluIHRocmVhZC4K
LSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgcmV0dXJuIG1f
bGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpIDogMDsKK30KIAordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJzKCkKK3sKICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIsIHRoaXMsIDApOwotICAgIEFTU0VSVCht
X3JlZHJhd1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVuZGluZyA9IGZhbHNlOworICAgIEFTU0VS
VChtX2xheWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xheWVyUmVuZGVyZXItPm93bmVyKCktPnJv
b3RMYXllcigpKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPmRyYXdMYXllcnMoKTsKIAotICAg
IHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNB
bmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247Ci0gICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0gICAgICAgIENDTWFpblRocmVhZDo6cG9z
dFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRy
YXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24p
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0TG9zdCkpKTsKLSAgICAgICAgY29tcGxl
dGlvbi53YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVyOworfQogCi0gICAgICAgIC8vIEZJWE1F
OiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtv
ciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpm
aW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9
CiAKLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNv
bnRleHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxheWVyUmVuZGVyZXJDaHJvbWl1bUltcGwg
ZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQuIik7Ci0gICAgfQorYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sKKyAgICBBU1NFUlQobV9sYXllclJlbmRl
cmVyKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5pc0NvbnRleHRMb3N0KCk7Cit9CiAK
LSAgICArK21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBhYmlsaXRpZXMoKTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpCit2b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGw6OnByZXNlbnQoKQogewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJl
ZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAgIEFTU0VS
VChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRl
cmVyLT5wcmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhNRTogbW92ZSB0aGUgcmVxdWVzdEZyYW1l
QW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBhZGQgZnJhbWVyYXRlIHRocm90dGxpbmcv
YW5pbWF0aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsKLSAg
ICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRD
b21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFT
U0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9sYXllclJl
bmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOwogfQogCi12b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGxheWVyKQogewotICAg
IGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQZW5kaW5nKQotICAgICAgICByZXR1cm47
CisgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Cit9CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NM
YXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX3JlZHJh
d1BlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5wb3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhy
ZWFkKCk7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFZpc2libGUoYm9vbCB2aXNpYmxl
KQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYgIXZpc2libGUpCisgICAgICAgIG1fbGF5
ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
biwgYm9vbCogY29udGV4dExvc3QpCitib29sIENDTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxp
emVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogaW1wbEhhY2ssIFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3RzLCB0aGVuIHdlIGFyZSByZWNvdmVyaW5n
IGZyb20gYSBsb3N0IGNvbnRleHQKKyAgICBib29sIHJlY3JlYXRpbmdSZW5kZXJlciA9IG1fbGF5
ZXJSZW5kZXJlcjsKKworICAgIC8vIEZpcnN0IHRpbWUgbGF5ZXJSZW5kZXJlciBjcmVhdGlvbgor
ICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXI7CisgICAgaWYg
KCFyZWNyZWF0aW5nUmVuZGVyZXIpCisgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhpcywgY29udGV4dCk7CisgICAgZWxzZQor
ICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUobV9s
YXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250ZXh0KTsKKworCisgICAgLy8gSWYgY3Jl
YXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZvciBhY2NlbGVyYXRlZCBwYWludGluZywg
ZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZworICAgIC8vIGFuZCB0cnkgY3JlYXRpbmcgdGhl
IHJlbmRlcmVyIGFnYWluLgorICAgIGlmICghbGF5ZXJSZW5kZXJlciAmJiBtX3NldHRpbmdzLmFj
Y2VsZXJhdGVQYWludGluZykgeworICAgICAgICBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGlu
ZyA9IGZhbHNlOworCisgICAgICAgIGlmICghcmVjcmVhdGluZ1JlbmRlcmVyKQorICAgICAgICAg
ICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKGltcGxIYWNr
LCB0aGlzLCBjb250ZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIo
KSwgdGhpcywgY29udGV4dCk7CisgICAgfQogCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+b3du
ZXIoKS0+cm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5kcmF3TGF5ZXJz
KCk7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJlc2VudCgpOworICAgIC8vIElmIHJlY3Jl
YXRpbmcgcmVuZGVyZXIsIHVwZGF0ZSB0aGUgbGF5ZXJzIHRvIHBvaW50IGF0IHRoZSBuZXcgcmVu
ZGVyZXIKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQorICAgICAgICBtX2xheWVyUmVuZGVyZXIt
PnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUo
bGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKLSAgICAgICAgKmNvbnRleHRMb3N0ID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIH0gZWxzZQotICAgICAgICAqY29udGV4
dExvc3QgPSBmYWxzZTsKLSAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKyAgICBtX2xheWVyUmVu
ZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXI7Cit9CisK
Ky8vIEZJWE1FOiBtb3ZlIGFsbCB0aGlzIGNvZGUgdG8gQ0NMYXllclRyZWVIb3N0Cit2b2lkIEND
TGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycygpCit7CisgICAgaWYgKG1fbGF5ZXJSZW5k
ZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT51cGRhdGVMYXllcnMoKTsKK30KKwordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9y
dFNpemUpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gdmlld3BvcnRTaXplICE9IG1fdmlld3BvcnRT
aXplOworICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRTaXplOworICAgIGlmIChjaGFuZ2Vk
KQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdwb3J0Q2hhbmdlZCgpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggYzQxMWNjYzczNTU0ZjFkZDMy
YmNjZTJlMTVlNDhkYmVjYWM0YTg4ZS4uZDY4YmI4ZDYwNzMzOTBlYmQwODRlOTE0Y2FiMDE5MjYx
ZmE5MDc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMjUsNTYg
KzI1LDY5IEBACiAjaWZuZGVmIENDTGF5ZXJUcmVlSG9zdEltcGxfaAogI2RlZmluZSBDQ0xheWVy
VHJlZUhvc3RJbXBsX2gKIAotI2luY2x1ZGUgImNjL0NDVGhyZWFkLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRl
eHQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ0NvbXBsZXRpb25F
dmVudDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOwot
Ci0vLyBQcm92aWRlcyBzY2hlZHVsaW5nIGluZnJhc3RydWN0dXJlIGZvciBhIENDTGF5ZXJUcmVl
SG9zdEltcGwKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgIHsKLXB1YmxpYzoKLSAg
ICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpID0gMDsKLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9z
dEltcGxDbGllbnQoKSB7IH0KLX07CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsK
IAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdl
bGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGwpOwogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShD
Q0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUo
Y29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBjb21t
aXRDb21wbGV0ZSgpOwogCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKwogICAg
IHZvaWQgZHJhd0xheWVycygpOwogCisgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmcoKTsKICAg
ICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9CiAKLSAg
ICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dygpOworICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBv
d25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBib29sIGlzQ29u
dGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSB7
IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisKKyAgICB2
b2lkIHByZXNlbnQoKTsKKworICAgIHZvaWQgcmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0Jik7CisKKyAgICBDQ0xheWVySW1wbCogcm9vdExheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4pOworCisgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCiAgICAgaW50
IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VGcmFtZU51bWJlcjsg
fQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIoaW50IGZyYW1lTnVtYmVyKSB7IG1fc291
cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQogCisgICAgdm9pZCB1cGRhdGVMYXllcnMo
KTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplKTsK
KyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdw
b3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVy
VHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsK
LSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqLCBib29s
KiBjb250ZXh0TG9zdCk7CisgICAgZXhwbGljaXQgQ0NMYXllclRyZWVIb3N0SW1wbChjb25zdCBD
Q1NldHRpbmdzJik7CiAgICAgaW50IG1fc291cmNlRnJhbWVOdW1iZXI7CiAgICAgaW50IG1fZnJh
bWVOdW1iZXI7CiAKIHByaXZhdGU6Ci0gICAgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudCogbV9j
bGllbnQ7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7CiAgICAgUmVmUHRyPExheWVyUmVuZGVy
ZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotICAgIGJvb2wgbV9yZWRyYXdQZW5kaW5nOwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5ZXJJbXBsOworICAgIENDU2V0dGluZ3Mg
bV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3BvcnRTaXplOwogfTsKIAogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBhNjY5Mjg4NTY0NTk2ZDg3ODI2NzY2MWQzZjk0NjFlYmZiNjYyZTk4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5LmgiCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgImNj
L0NDVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5h
bWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsKLUNDVGhy
ZWFkKiBjY1RocmVhZDsKLWludCBudW1Qcm94aWVzID0gMDsKLX0KLQotQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXll
clRyZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5nKGZhbHNlKQotICAgICwgbV9sYXllclRy
ZWVIb3N0KGxheWVyVHJlZUhvc3QpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5IiwgdGhpcywgMCk7Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBudW1Qcm94aWVzKys7Ci0gICAgaWYgKCFjY1RocmVh
ZCkKLSAgICAgICAgY2NUaHJlYWQgPSBsYXllclRyZWVIb3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKLX0KLQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6c3RhcnQoKQotewotICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KLSAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdElt
cGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAg
IGNvbXBsZXRpb24ud2FpdCgpOwotfQotCi1DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xh
eWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkiLCB0aGlzLCAwKTsKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCAm
JiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgotCi0g
ICAgbnVtUHJveGllcy0tOwotICAgIGlmICghbnVtUHJveGllcykgewotICAgICAgICBkZWxldGUg
Y2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhyZWFkID0gMDsKLSAgICB9Ci19Ci0KLWJvb2wgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2xh
eWVyVHJlZUhvc3RJbXBsOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXciLCB0
aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMs
ICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCkpOwot
fQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCgpCi17Ci0gICAgVFJBQ0Vf
RVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RvcCIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBp
bXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgY2NUaHJlYWQtPnBv
c3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndhaXQoKTsKLQotICAgIEFTU0VSVCghbV9s
YXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0IHRoZSBpbXBsIGRlbGV0ZWQuCi0gICAg
bV9sYXllclRyZWVIb3N0ID0gMDsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQotewotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIGNjVGhyZWFkLT5w
b3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVl
c3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNJbXBs
VGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsKQotICAgICAgICBDQ01haW5U
aHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCwgZnJhbWVCZWdpblRpbWUpKTsKLX0K
LQotI2lmbmRlZiBOREVCVUcKLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc01haW5U
aHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOwotfQotCi0jaWYgVVNFKFRI
UkVBREVEX0NPTVBPU0lUSU5HKQotYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1w
bFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIGN1cnJlbnRUaHJlYWQoKSA9PSBjY1RocmVhZC0+dGhy
ZWFkSUQoKTsKLX0KLSNlbHNlCi1uYW1lc3BhY2UgewotYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZh
bHNlOwotfQotCi1ib29sIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkK
LXsKLSAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQ7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFsdWUpCi17Ci0gICAgZmFrZUltcGxUaHJl
YWQgPSB2YWx1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0KLSNl
bmRpZiAvLyAhTkRFQlVHCi0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0
RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFt
ZUFuZENvbW1pdCIsIHRoaXMsIDApOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5
ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRoaXMsIDApOwotICAgICAgICBtX2xheWVy
VHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwotICAgIH0KLQotICAg
IG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotCi0gICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0
Q29tbWl0dGVyKCk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5iZWdpbkNvbW1pdCgpOwotCi0gICAg
Ly8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBlcmZvcm1Db21t
aXQKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0
VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24u
d2FpdCgpOwotCi0gICAgY29tbWl0dGVyLmNsZWFyKCk7Ci0KLSAgICBtX2xheWVyVHJlZUhvc3Qt
PmNvbW1pdENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojpj
b21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciogY29tbWl0dGVyLCBDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkp
OwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NU
aHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgp
OwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Iiwg
dGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29tbWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9s
YXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgp
OwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKLX0KLQotdm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdMYXllcnNPbkNDVGhyZWFkKCkKLXsKLSAg
ICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpkcmF3TGF5ZXJzT25DQ1Ro
cmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1f
bGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXll
cnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzQ29tbWl0
QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7
Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1fbGF5ZXJUcmVlSG9zdEltcGwpOwotICAg
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZv
aWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQot
ewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSAmJiBt
X2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5zZXROZWVkc1Jl
ZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkND
VGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQotewotICAgIFRSQUNFX0VWRU5U
KCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbCA9
IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwodGhpcyk7Ci0gICAgY29t
cGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojps
YXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlv
bikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRy
ZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJl
YWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwotICAgIGNvbXBsZXRpb24t
PnNpZ25hbCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQ
cm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5
ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotI2Rl
ZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAotCi0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0
aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVk
ZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJU
cmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjsKLQotY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQgewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eSk7Ci1wdWJs
aWM6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5KCk7Ci0KLSAgICBib29s
IGlzU3RhcnRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygp
OwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLQotICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8g
TXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRoZSBwcm94eS4KLQotICAgIC8vIENDTGF5
ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24gQ0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZv
aWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgpOwotICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSNp
Zm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIGJvb2wgaXNNYWluVGhyZWFkKCk7Ci0gICAgc3RhdGlj
IGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0jaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAg
ICAvLyBGYWtlIHRocmVhZGVkIGNvbXBvc2l0aW5nIHNvIHdlIGNhbiBjYXRjaCBpbmNvcnJlY3Qg
dXNhZ2UuCi0gICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKLSNlbmRpZgotI2Vu
ZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHko
Q0NMYXllclRyZWVIb3N0Kik7Ci0gICAgdmlydHVhbCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9z
dEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkgPSAwOwotICAgIENDTGF5ZXJUcmVlSG9z
dCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdDsgfQotCi1wcml2YXRlOgot
ICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIHJlcXVlc3RGcmFtZUFuZENv
bW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotCi0gICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFk
Ci0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlciosIEND
Q29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBkcmF3TGF5ZXJzT25DQ1RocmVhZCgpOwotICAg
IHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKLSAgICB2b2lkIHNldE5lZWRzUmVk
cmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqKTsKLQotICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4K
LSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLQotICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhy
ZWFkIG9ubHkuCi0gICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAv
LyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNrZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5n
IGluaXRpYWxpemF0aW9uL3NodXRkb3duLgotICAgIE93blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBs
PiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRh
c2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFp
blRocmVhZFRhc2suaAppbmRleCBmYWM2ZTY0M2YwNWExOGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVh
YzhhLi40YzMzYmFhMDdhZGQzNTc3MzlkZGI1MTc2MWU4NDdiNzRlNTFjMzM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01haW5UaHJl
YWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0xNTgsNiArMTU4LDg4IEBAIHByaXZhdGU6CiAgICAg
UDMgbV9wYXJhbWV0ZXIzOwogfTsKIAorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorY2xhc3MgTWFpblRocmVh
ZFRhc2s0IDogcHVibGljIENDTWFpblRocmVhZDo6VGFzayB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpOworICAgIHR5cGVkZWYgTWFp
blRocmVhZFRhc2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIsIFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5U
aHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVm
IHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisK
KyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFkVGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBw
YXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0KSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNChUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhv
ZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVy
MywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgICAgIDogQ0NNYWluVGhyZWFkOjpUYXNrKGluc3Rh
bmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjEo
cGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKKyAgICAgICAg
LCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1l
dGVyNCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAg
ICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGluc3RhbmNlKCkpLiptX21ldGhvZCkobV9w
YXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVy
MTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1f
cGFyYW1ldGVyNDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBl
bmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFt
ZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBN
UDU+CitjbGFzcyBNYWluVGhyZWFkVGFzazUgOiBwdWJsaWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1Q
NCwgTVA1KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRUYXNrNTxULCBQMSwgTVAxLCBQMiwgTVAy
LCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBNYWluVGhyZWFkVGFza0ltcGw7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0x
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1U
eXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
Mz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKKworICAgIHN0YXRpYyBQ
YXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2Qg
bWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJh
bWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAg
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0
aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJh
bWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNShUKiBpbnN0
YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIy
LCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1
KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhpbnN0YW5jZSkKKyAgICAgICAgLCBtX21l
dGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCisgICAgICAg
ICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFt
ZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCisgICAgICAgICwgbV9w
YXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
ZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0YXRpY19jYXN0PFQqPihpbnN0YW5jZSgp
KS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1f
cGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9k
IG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7Cisg
ICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKKyAgICBQNSBtX3BhcmFt
ZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogUGFzc093blB0cjxDQ01haW5UaHJl
YWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAg
LTIxNSw2ICsyOTcsNDYgQEAgUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1h
aW5UaHJlYWRUYXNrKAogICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMykpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRh
c2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lk
IChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQpLAorICAgIGNvbnN0IFAxJiBwYXJhbWV0
ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAorICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIz
LAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0KQoreworICAgIHJldHVybiBNYWluVGhyZWFkVGFz
azQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBl
LCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwKKyAgICAgICAgbWV0aG9kLAorICAgICAg
ICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVyMSksCisgICAgICAgIENyb3Nz
VGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRD
b3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
ND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1l
IFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1
LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gY3JlYXRlTWFp
blRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVlLAorICAgIHZvaWQgKFQ6OiptZXRob2Qp
KE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwKKyAg
ICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25zdCBQMyYgcGFyYW1ldGVyMywKKyAgICBj
b25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQNSYgcGFyYW1ldGVyNSkKK3sKKyAgICBy
ZXR1cm4gTWFpblRocmVhZFRhc2s1PFQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBlLCBNUDMsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNT46
OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgY2FsbGVlLAorICAgICAgICBtZXRob2QsCisg
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+
Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNl
bmRpZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gKKyNlbmRpZiAvLyBNYWluVGhyZWFkVGFza19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggNjNlZGNmMGQ2N2E2ODRmNWRi
ZTBhMTJkNWQ5ZDI2MmEwYjE0YWMyMy4uYTlmNDUwZWQ0ODI0NWQ4MWIwYzQzMDcyY2EzOTM3MTJk
MGRkMzc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzEsNyAr
MzEsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
clJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ4LDcgKzQ4LDcgQEAgQ0NQbHVnaW5M
YXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiAKIHZvaWQgQ0NQbHVnaW5MYXllckltcGw6
OmRyYXcoKQogewotICAgIEFTU0VSVChDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkpOwogICAgIEFTU0VS
VChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IENDUGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFt
KiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclByb2dyYW0oKTsKICAgICBB
U1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDYxYTJlNTNlZDIzMGY5NjdlZTFkODVkZDA4M2NiYWNmOWMyNjcxOAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJveHkuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKworI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9D
Q01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisjaWZuZGVmIE5ERUJVRworYm9vbCBDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KQoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgpOworfQorCituYW1lc3BhY2UgeworYm9v
bCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOworc3RhdGljIFdURjo6VGhyZWFkSWRlbnRpZmllciBp
bXBsVGhyZWFkSUQ7Cit9CisKK2Jvb2wgQ0NQcm94eTo6aXNJbXBsVGhyZWFkKCkKK3sKKyAgICBy
ZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRocmVhZCgpID09IGltcGxUaHJlYWRJRDsK
K30KKwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgaXNJbXBsVGhyZWFkKQorewor
ICAgIGZha2VJbXBsVGhyZWFkID0gaXNJbXBsVGhyZWFkOworfQorCit2b2lkIENDUHJveHk6OnNl
dEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVyIGlkKQoreworICAgIGltcGxUaHJlYWRJ
RCA9IGlkOworfQorCisjZW5kaWYgLy8gIU5ERUJVRworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzQ1ZDJjZGFjMGE5ZjkzYTE4OWY0YTEwMzcyZWQwN2Q1YWE4OGJlYgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJv
eHkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1Byb3h5X2gK
KyNkZWZpbmUgQ0NQcm94eV9oCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworI2lmIFVTRShT
S0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NUaHJlYWQ7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbENsaWVudDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBU
ZXh0dXJlTWFuYWdlcjsKKworLy8gQWJzdHJhY3QgY2xhc3MgcmVzcG9uc2libGUgZm9yIHByb3h5
aW5nIGNvbW1hbmRzIGZyb20gdGhlIG1haW4tdGhyZWFkIHNpZGUgb2YKKy8vIHRoZSBjb21wb3Np
dG9yIG92ZXIgdG8gdGhlIGNvbXBvc2l0b3IgaW1wbGVtZW50YXRpb24uCitjbGFzcyBDQ1Byb3h5
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1Byb3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5DQ1Byb3h5KCkgeyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgY29tcG9zaXRlQW5kUmVhZGJh
Y2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JikgPSAwOworCisgICAgdmlydHVhbCB2b2lk
IGZpbmlzaEFsbFJlbmRlcmluZygpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIo
Q0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXcoKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSB1c2luZyB0aGUgcHJveHku
CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBk
ZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBEZWJ1ZyBob29rcworI2lmbmRlZiBOREVCVUcK
KyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsKKyAgICBzdGF0aWMgYm9vbCBpc0ltcGxU
aHJlYWQoKTsKKyNlbmRpZgorCisgICAgLy8gVGVzdGluZyBob29rcworICAgIHZpcnR1YWwgdm9p
ZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKSA9IDA7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhh
Y2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0Cisg
ICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVT
RShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpID0gMDsKKyNlbmRp
ZgorCisgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUgcmVuZGVyX3dpZGdldCBzdGlsbCBkb2Vz
IHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9zdE1haW5UaHJlYWRJCisgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0gMDsKKworICAgIC8vIFRlbXBvcmFyeSBoYWNr
IHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJlbmNlcyB0byBMYXllclJlbmRlcmVyQ2hy
b21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdlciogY29udGVudHNUZXh0dXJlTWFuYWdl
cigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIENDUHJveHkoKSB7IH0KKyAgICBmcmllbmQgY2xh
c3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RhdGljIHZvaWQg
c2V0SW1wbFRocmVhZChib29sKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6
VGhyZWFkSWRlbnRpZmllcik7CisjZW5kaWYKK307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjE4ZWE5Y2VlYjhkMmFm
MjQ2ZDY0Y2I5NGJlYjZkNzM2ODAxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApA
QCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRl
ICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVk
ZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNj
b3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgorICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQor
ICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1
ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOworI2Vu
ZGlmCisgICAgfQorfTsKKworUGFzc093blB0cjxDQ1Byb3h5PiBDQ1NpbmdsZVRocmVhZFByb3h5
OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQoreworICAgIHJldHVybiBh
ZG9wdFB0cihuZXcgQ0NTaW5nbGVUaHJlYWRQcm94eShsYXllclRyZWVIb3N0KSk7Cit9CisKK0ND
U2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkoQ0NMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0KQorICAgIDogbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCisgICAg
LCBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMoMCkKKyAgICAsIG1fZ3JhcGhpY3NDb250ZXh0
TG9zdChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NT
aW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsID0gbV9sYXllclRyZWVI
b3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOworfQorCitDQ1NpbmdsZVRocmVhZFByb3h5
Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhy
ZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5IiwgdGhpcywgMCk7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5
ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkgZ290IGNhbGxlZC4KK30KKworYm9vbCBD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayh2b2lkICpwaXhlbHMsIGNv
bnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAg
IGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29tbWl0SWZOZWVkZWQoKTsKKworCisgICAgaWYgKCFkb0NvbXBvc2l0ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5yZWFkYmFjayhw
aXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmlzQ29udGV4dExv
c3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb250ZXh0KCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAg
ICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpOworfQorCit2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgbV9sYXllclRy
ZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJl
YWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOworfQorCitib29sIENDU2luZ2xlVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCogb3duZXJI
YWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IG1fbGF5ZXJU
cmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChjb250ZXh0LT5oYXNPbmVSZWYo
KSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAg
cmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKG93bmVy
SGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwordm9pZCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQoreworICAgIG1fZ3JhcGhp
Y3NDb250ZXh0TG9zdCA9IHRydWU7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisj
aWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICBtX2xheWVyVHJlZUhvc3QtPnNjaGVk
dWxlQ29tcG9zaXRlKCk7CisjZWxzZQorICAgIC8vIFNpbmdsZSB0aHJlYWRlZCBvbmx5IHdvcmtz
IHdpdGggVEhSRUFERURfQ09NUE9TSVRJTkcuCisgICAgQ1JBU0goKTsKKyNlbmRpZgorfQorCit2
b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzUmVkcmF3KCkKK3sKKyAgICAvLyBGSVhN
RTogT25jZSB3ZSBtb3ZlIHJlbmRlcl93aWRnZXQgc2NoZWR1bGluZyBpbnRvIHRoaXMgY2xhc3Ms
IHdlIGNhbgorICAgIC8vIHRyZWF0IHJlZHJhdyByZXF1ZXN0cyBtb3JlIGVmZmljaWVudGx5IHRo
YW4gY29tbWl0QW5kUmVkcmF3IHJlcXVlc3RzLgorICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3
KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgpCit7CisgICAgVFJBQ0Vf
RVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3AiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIHsKKyAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CisgICAgfQorICAgIG1fbGF5
ZXJUcmVlSG9zdCA9IDA7Cit9CisKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogQ0NTaW5nbGVU
aHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0KCk7Cit9CisjZW5kaWYKKworVGV4dHVy
ZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQor
eworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPmNvbnRl
bnRzVGV4dHVyZU1hbmFnZXIoKTsKK30KKworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVsaW5nIHBhdGggKGUuZy4gd2hlcmUgcmVu
ZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCit7CisgICAgaWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5l
ZWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb21taXRJZk5lZWRlZCgpOworCisgICAg
aWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQo
KTsKK30KKyNlbmRpZgorCisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVjcmVhdGVDb250
ZXh0SWZOZWVkZWQoKQoreworICAgIGlmICghbV9ncmFwaGljc0NvbnRleHRMb3N0KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBt
X2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICBBU1NF
UlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5p
bml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0KSkgeworICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KHRydWUpOworICAgICAgICBtX2dyYXBo
aWNzQ29udGV4dExvc3QgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgLy8gVG9sZXJhdGUgYSBjZXJ0YWluIG51bWJlciBvZiByZWNyZWF0aW9uIGZhaWx1cmVzIHRv
IHdvcmsgYXJvdW5kIHJhY2VzCisgICAgLy8gaW4gdGhlIGNvbnRleHQtbG9zdCBtYWNoaW5lcnku
CisgICAgbV9udW1GYWlsZWRSZWNyZWF0ZUF0dGVtcHRzKys7CisgICAgaWYgKG1fbnVtRmFpbGVk
UmVjcmVhdGVBdHRlbXB0cyA8IDUpIHsKKyAgICAgICAgc2V0TmVlZHNDb21taXRBbmRSZWRyYXco
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGhhdmUgdHJpZWQg
dG9vIG1hbnkgdGltZXMgdG8gcmVjcmVhdGUgdGhlIGNvbnRleHQuIFRlbGwgdGhlIGhvc3QgdG8g
ZmFsbAorICAgIC8vIGJhY2sgdG8gc29mdHdhcmUgcmVuZGVyaW5nLgorICAgIG1fbGF5ZXJUcmVl
SG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoZmFsc2UpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCgpCit7Cisg
ICAgLy8gVXBkYXRlCisgICAgZG91YmxlIGZyYW1lQmVnaW5UaW1lID0gY3VycmVudFRpbWUoKTsK
KyAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdpblRpbWUpOwor
CisgICAgLy8gUHJlY29tbWl0IGlzIGEgdGVtcG9yYXJ5IHN0ZXAgd2UgbmVlZCB0byBwZXJmb3Jt
IHRvIHB1c2ggdGhpbmdzIGxpa2UKKyAgICAvLyB0aGUgdmlld3BvcnQgdG8gdGhlIExheWVyVHJl
ZUhvc3RJbXBsLCBiZWNhdXNlCisgICAgLy8gTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVy
cygpIGlzbid0IHNwbGl0IGludG8gaG9zdCBhbmQgaW1wbCBwYXJ0cy4KKyAgICB7CisgICAgICAg
IFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5wcmVD
b21taXQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgfQorCisgICAgLy8gVGhpcyBz
aG91bGQgYmVjb21lIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKCkgb25jZSB3ZSBzcGxp
dCBhcGFydAorICAgIC8vIExheWVyVHJlZUhvc3RJbXBsOjp1cGRhdGVMYXllcnMuCisgICAgbV9s
YXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7CisKKyAgICAvLyBDb21taXQKKyAgICB7
CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRU
byhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1w
bC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6ZG9Db21wb3NpdGUoKQoreworICAgIEFTU0VSVCghbV9ncmFwaGljc0NvbnRleHRMb3N0KTsK
KworICAgIHsKKyAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICAgIGlmIChtX2xheWVyVHJlZUhvc3RJbXBs
LT5pc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUg
Y29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKKyAgICAgICAg
ICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hhbm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdl
IHdpbGwgb25seSBiZQorICAgICAgICAgIC8vIGNhbGxlZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24g
b2YgdGhlIG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91cgorICAgICAgICAgIC8vIHJlY292ZXJ5
IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRo
ZQorICAgICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5l
eHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgorICAgICAgICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVw
YWludCB5ZXQgYWdhaW4uCisgICAgICAgICAgbV9ncmFwaGljc0NvbnRleHRMb3N0ID0gdHJ1ZTsK
KyAgICAgICAgICBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMgPSAwOworICAgICAgICAgIHNl
dE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Npbmds
ZVRocmVhZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYxYTBlNGE3OWU3MzU4MmZhNzExN2I0YjNkOTgx
MGM0Y2Y3YWUwZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2luZ2xlVGhyZWFkUHJveHlfaAorI2RlZmluZSBD
Q1NpbmdsZVRocmVhZFByb3h5X2gKKworI2luY2x1ZGUgImNjL0NDQ29tcGxldGlvbkV2ZW50Lmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5IDogcHVi
bGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPENDUHJveHk+IGNy
ZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2aXJ0dWFsIH5DQ1NpbmdsZVRocmVhZFByb3h5
KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBib29sIGNv
bXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmlu
aXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3Qq
IG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
JiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGxv
c2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZpcnR1
YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBIb3Jy
aWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUg
R3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBB
U0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgp
OworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSBMYXllckNocm9taXVtcyBo
b2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtcworICAgIHZpcnR1YWwgVGV4
dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKKworICAgIC8vIFNwZWNpYWwg
Y2FzZSBmdW5jdGlvbnMuCisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lk
IGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBleHBsaWNp
dCBDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworICAgIGJvb2wgcmVjcmVh
dGVDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB2b2lkIGNvbW1pdElmTmVlZGVkKCk7CisgICAgYm9v
bCBkb0NvbXBvc2l0ZSgpOworCisgICAgLy8gQWNjZXNzZWQgb24gbWFpbiB0aHJlYWQgb25seS4K
KyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVlSG9zdDsKKworICAgIC8vIFVzZWQgb24g
dGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6
YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJU
cmVlSG9zdEltcGw7CisKKyAgICBpbnQgbV9udW1GYWlsZWRSZWNyZWF0ZUF0dGVtcHRzOworICAg
IGJvb2wgbV9ncmFwaGljc0NvbnRleHRMb3N0OworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQwZmJlZTQxZmZhZjk2NWM4OWM1NzM0ZTRj
NzI0YTdlN2U0YTJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0wLDAgKzEsMjgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJjYy9DQ1Ro
cmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRl
ICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgeworQ0NUaHJlYWQqIGNjVGhyZWFkOworaW50
IG51bVByb3hpZXMgPSAwOworfQorCitQYXNzT3duUHRyPENDUHJveHk+IENDVGhyZWFkUHJveHk6
OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCit7CisgICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBDQ1RocmVhZFByb3h5KGxheWVyVHJlZUhvc3QpKTsKK30KKworQ0NUaHJlYWRQ
cm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QpCisgICAg
OiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBtX2xheWVyVHJlZUhvc3QobGF5ZXJUcmVl
SG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSIs
IHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbnVtUHJveGllcysr
OworICAgIGlmICghY2NUaHJlYWQpIHsKKyAgICAgICAgY2NUaHJlYWQgPSBtX2xheWVyVHJlZUhv
c3QtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFrUHRyKCk7CisjaWZuZGVmIE5ERUJVRwor
ICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGNjVGhyZWFkLT50aHJlYWRJRCgpKTsKKyNl
bmRpZgorICAgIH0KK30KKworQ0NUaHJlYWRQcm94eTo6fkNDVGhyZWFkUHJveHkoKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJ
bXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorICAgIEFTU0VSVCghbV9sYXll
clRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2FsbGVkLgorCisgICAgbnVtUHJv
eGllcy0tOworICAgIGlmICghbnVtUHJveGllcykgeworICAgICAgICBkZWxldGUgY2NUaHJlYWQ7
CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6
Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworR3Jh
cGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNvbnRleHQoKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmZp
bmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK2Jv
b2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXll
clRyZWVIb3N0SW1wbDsKK30KKworYm9vbCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjaykKK3sKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhv
c3RDb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworCisgICAgLy8gTGVhayB0aGUgY29u
dGV4dCBwb2ludGVyIHNvIHdlIGNhbiB0cmFuc2ZlciBvd25lcnNoaXAgb2YgaXQgdG8gdGhlIG90
aGVyIHNpZGUuLi4KKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dFB0ciA9IGNvbnRleHQu
cmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQoY29udGV4dFB0ci0+aGFzT25lUmVmKCkp
OworCisgICAgLy8gTWFrZSBhIGJsb2NraW5nIGNhbGwgdG8gaW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJPbkNDVGhyZWFkLiBUaGUgcmVzdWx0cyBvZiB0aGF0IGNhbGwKKyAgICAvLyBhcmUgcHVzaGVk
IGludG8gdGhlIGluaXRpYWxpemVTdWNjZWVkZWQgYW5kIGNhcGFiaWxpdGllcyBsb2NhbCB2YXJp
YWJsZXMuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29tcGxldGlvbjsKKyAgICBib29sIGluaXRp
YWxpemVTdWNjZWVkZWQ7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBjYXBhYmlsaXRp
ZXM7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhv
d25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKGNvbnRleHRQdHIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcygm
Y29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmluaXRpYWxpemVTdWNjZWVkZWQp
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmlsaXRpZXMpKSk7CisgICAgY29tcGxldGlv
bi53YWl0KCk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgbV9sYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENvcHkgPSBjYXBhYmlsaXRpZXM7CisgICAg
cmV0dXJuIGluaXRpYWxpemVTdWNjZWVkZWQ7Cit9CisKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMmIENDVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29w
eTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OnNldE5l
ZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIFRSQUNFX0VWRU5U
KCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhdyIsIHRoaXMsIDApOworICAg
IG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUND
VGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdP
bkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXcoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNy
ZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkND
VGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6c3RhcnQoKQoreworICAgIC8vIENy
ZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9u
OworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhy
ZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vz
cygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9uLndhaXQoKTsKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6c3Rv
cCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgLy8gU3luY2hy
b25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgorICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBsZXRp
b247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NU
aHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBB
U1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxl
dGVkLgorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9CisKKyNpZiBVU0UoU0tJQSkKK0dyQ29u
dGV4dCogQ0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAgIC8vIE5vdCBzdXBwb3J0
ZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIENS
QVNIKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKworVGV4dHVyZU1hbmFnZXIqIENDVGhy
ZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXRPbkNDVGhyZWFkKCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94
eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQo
aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIC8vIEZJWE1F
OiBjYWxsIGJlZ2luRnJhbWVBbmRDb21taXQgb24gbWFpbiB0aHJlYWQKK30KKwordm9pZCBDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9sYXllclRyZWVIb3N0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVz
dEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgi
Q0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0IiwgdGhpcywgMCk7CisgICAgICAgIG1f
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7CisgICAgfQor
CisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisKKyAgICAvLyBCbG9ja2luZyBjYWxsIHRv
IENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21taXQKKyAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21w
bGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
JmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7Cit9CisKK3ZvaWQgQ0NUaHJl
YWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikK
K3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CisgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNv
bW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgIH0KKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7
CisgICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94
eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxU
aHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXRO
ZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsK
KyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2xheWVyVHJlZUhvc3RJ
bXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5
OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplSW1wbE9u
Q0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCit7CisgICAgVFJBQ0VfRVZF
TlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwor
ICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1f
bGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKTsKKyAgICBjb21wbGV0aW9u
LT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0UHRyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogaW5p
dGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyogY2FwYWJpbGl0aWVz
KQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChhZG9wdFJlZihjb250ZXh0UHRy
KSk7CisgICAgKmluaXRpYWxpemVTdWNjZWVkZWQgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihvd25lckhhY2ssIGNvbnRleHQpOworICAgIGlmICgqaW5pdGlh
bGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgKmNhcGFiaWxpdGllcyA9IG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwo
KTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVh
ZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NU
aHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIo
KTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZiNmM0NDhiMGNlYWU3ZWJiZDQ2ODI2NDlhYTc5MjA1ZDRhYzUxMTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDQ1RocmVhZFByb3h5X2gKKyNkZWZpbmUgQ0NUaHJlYWRQcm94eV9oCisKKyNpbmNs
dWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJUcmVlSG9zdDsKKworY2xh
c3MgQ0NUaHJlYWRQcm94eSA6IHB1YmxpYyBDQ1Byb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1Byb3h5PiBjcmVhdGUoQ0NMYXllclRyZWVIb3N0Kik7CisKKyAgICB2aXJ0
dWFsIH5DQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0aW9uCisg
ICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3Qg
SW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBib29sIGlz
U3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJl
cihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBMYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1Jl
ZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9pZCBzdG9w
KCk7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBj
b2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50
aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250
ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFjayB3aGls
ZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVt
cworICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1RocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCop
OworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVhZAorICAgIHZvaWQgYmVnaW5GcmFtZUFu
ZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gQ2FsbGVkIG9uIENDVGhy
ZWFkCisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0T25DQ1RocmVhZCgpOworICAgIHZvaWQg
Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgZHJhd0xheWVy
c09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVJbXBsT25DQ1RocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCopOworICAgIHZvaWQgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFk
KENDTGF5ZXJUcmVlSG9zdCosIEdyYXBoaWNzQ29udGV4dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQq
LCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7
CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKTsKKyAgICB2b2lk
IHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAgIHZvaWQgbGF5ZXJUcmVlSG9zdENsb3Nl
ZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKKworICAgIC8vIFVzZWQgb24gbWFpbi10
aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UGVuZGluZzsKKworICAgIC8vIEFjY2Vzc2Vk
IG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXllclRyZWVIb3N0KiBtX2xheWVyVHJlZUhv
c3Q7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyBtX2xheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXNNYWluVGhyZWFkQ29weTsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQg
Y2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisg
ICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7Cit9Owor
Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAppbmRleCA5MWM1OGU1ZDI1YjdiYjI4
NmUyMTZjNGUwNjhjYmUxMDk1NzhmMTgzLi5kOGRlNGFiMDM0Njk4ODc2OWZiZTI2NzRmZDMyMzYx
MGM0NWQ3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaApAQCAtMTk4LDYgKzE5OCw0OCBAQCBw
cml2YXRlOgogICAgIFA0IG1fcGFyYW1ldGVyNDsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVu
YW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBDQ1RocmVhZFRhc2s1IDogcHVibGljIENDVGhy
ZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipNZXRob2QpKE1QMSwg
TVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIENDVGhyZWFkVGFzazU8VCwgUDEsIE1Q
MSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNT4gQ0NUaHJlYWRUYXNrSW1wbDsK
KyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlw
ZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+
OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNr
VHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3Nz
VGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OworCisgICAg
c3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1wbD4gY3JlYXRlKFQqIGluc3RhbmNlLCBN
ZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFt
MyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDVGhyZWFkVGFza0ltcGwoaW5zdGFuY2Us
IG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwgcGFyYW1ldGVyMywgcGFyYW1ldGVyNCwg
cGFyYW1ldGVyNSkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDQ1RocmVhZFRhc2s1KFQqIGlu
c3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRl
cjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRl
cjUpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5zdGFuY2UpCisgICAgICAgICwgbV9tZXRo
b2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQorICAgICAgICAs
IG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0
ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQorICAgICAgICAsIG1fcGFy
YW1ldGVyNShwYXJhbWV0ZXI1KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVy
Zm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSku
Km1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3Bh
cmFtZXRlcjQsIG1fcGFyYW1ldGVyNSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1ldGhvZCBt
X21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7CisgICAgUDIgbV9wYXJhbWV0ZXIyOworICAg
IFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFtZXRlcjQ7CisgICAgUDUgbV9wYXJhbWV0
ZXI1OworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRh
c2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKICAgICBUKiBjb25zdCBjYWxsZWUsCkBAIC0yNzQsNiAr
MzE2LDI3IEBAIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygK
IAogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBl
bmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgorUGFzc093
blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJlYWRUYXNrKAorICAgIFQqIGNvbnN0IGNh
bGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSksCisg
ICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29uc3QgUDImIHBhcmFtZXRlcjIsCisgICAg
Y29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3QgUDQmIHBhcmFtZXRlcjQsCisgICAgY29u
c3QgUDUmIHBhcmFtZXRlcjUpCit7CisgICAgcmV0dXJuIENDVGhyZWFkVGFzazU8VCwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5
cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1Pjo6Y3JlYXRlKAorICAgICAgICBj
YWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpj
b3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFy
YW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIz
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSkpOworCit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIENDVGhyZWFkVGFza19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVk
TGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGJmMjNiZGVmZDlmM2Y1Y2I4MTE4NjQ4MGRm
ZjgxYzM3MjY5MTk5ZTIuLjVmNWIyNTY0M2E4YmY4NGRjMGU2YTRmNTgxY2QwZGM2MzQ0MjEyNzcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCkBAIC0zMSw3ICszMSw2IEBACiAK
ICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggNGE1NWJjYTBhMzY3ZDcwZjM4NzRjNjA4M2Q1MzYz
YjVjNjRkNmJmMS4uOWZmMWZjY2M5NzE2YzEyNDJmZTM1ZmU2OTBhMmE4MDIxNjBkMmYwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3ICs3OSw3
IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4dHVyZShzaXplX3QgaW5kZXgsIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zCiAKIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJh
dygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6aXNJbXBsVGhyZWFk
KCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAKICAgICBpZiAobV9z
a2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
Yzc3ZTQ1OTJmN2MwZjkyNjgzMTM1Nzk1NjBhOGRiNTMyYjc1YzM5My4uZTAzZjQ2ZTY0OTUwZWQ4
MjMwZTIxODA5MDE5Y2U1NTYzOTQxODM4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOC0yOSAgTmF0IER1Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW2Nocm9taXVtXSBJbnRyb2R1Y2UgQ0NTaW5nbGVUaHJlYWRQcm94eSBpbiBv
cmRlciB0byBtb3ZlIExheWVyUmVuZGVyZXIgdG8gQ0NMYXllclRyZWVIb3N0SW1wbAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4MDcKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJWaWV3SW1w
bC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpjb21wb3NpdGUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorCiAyMDExLTA4LTI5ICBHcmVnIEJpbGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUu
Y29tPgogCiAgICAgICAgIFtDaHJvbWl1bV0gQWRkIGFiaWxpdHkgdG8gZG8gc3RhdGljIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZSBkZXNlcmlhbGl6YXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCBjZTRiM2YxZWVjOTQzZjRiMmJlOTQ3MmM0NDhiZDE0
NWU5YWJlYWU0Li5mOGVmNDkxMWVmMGQ4YzI0OTE0ZTllNGMxMjFmY2UxNmNjYjI1YjhiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCkBAIC0xMTUwLDcgKzEx
NTAsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQoKQogICAgIHZpZXctPmludmFs
aWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRl
KGJvb2wgZmluaXNoKQordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wpCiB7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElO
RykKQEAgLTExNjMsNyArMTE2Myw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmNvbXBvc2l0ZShib29s
IGZpbmlzaCkKICAgICBpZiAobV9wYWdlT3ZlcmxheSkKICAgICAgICAgbV9wYWdlT3ZlcmxheS0+
dXBkYXRlKCk7CiAKLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBvc2l0ZShmaW5pc2gpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMjUx
Nyw5ICsyNTE3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9vdEdyYXBoaWNzTGF5ZXIoR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0Um9vdExheWVy
KGxheWVyKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwgMCwgbV9zaXplLndpZHRoLCBt
X3NpemUuaGVpZ2h0KTsKLSAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUp
Ci0gICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFnZWRSZWN0KTsKLSAgICBlbHNl
CisgICAgaWYgKCFtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSkKICAgICAgICAgbV9j
bGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIApAQCAtMjYxMCwxMSAr
MjYwOCwxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdB
Y3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIFdlYkNvcmU6OkNDU2V0dGluZ3MgY2NTZXR0aW5n
czsKICAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBwYWdlKCktPnNldHRp
bmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKTsKICAgICAgICAgY2NTZXR0aW5ncy5j
b21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3NpdGVUb1RleHR1cmVFbmFibGVk
KCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAgICAgICBjY1NldHRpbmdzLmVu
YWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOworI2Vsc2UKKyAgICAgICAgY2NTZXR0aW5ncy5l
bmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisjZW5kaWYKICAgICAgICAgY2NTZXR0aW5n
cy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFNDb3VudGVyKCk7CiAgICAgICAg
IGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0dGluZ3MoKS0+c2hvd1BsYXRm
b3JtTGF5ZXJUcmVlKCk7CiAKICAgICAgICAgbV9sYXllclRyZWVIb3N0ID0gQ0NMYXllclRyZWVI
b3N0OjpjcmVhdGUodGhpcywgY2NTZXR0aW5ncyk7CiAgICAgICAgIGlmIChtX2xheWVyVHJlZUhv
c3QpIHsKKyAgICAgICAgICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdwb3J0KCk7CiAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBvc2l0aW5nKHRydWUpOwogICAg
ICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPSB0cnVlOwogICAgICAg
ICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxzZTsKQEAgLTI2NTksMTEgKzI2
NjMsMjAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVC
ZWdpblRpbWUpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KGJvb2wgc3VjY2VzcykKIHsKLSAgICAvLyBGb3JjZSBWaWV3SG9zdE1zZ19EaWRBY3RpdmF0ZUFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwotICAgIC8vIHRoYXQgdGhlIGJyb3dz
ZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgotICAgIG1faXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nQWN0aXZlID0gZmFsc2U7Ci0gICAgc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlKHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzICYmIG1fcGFnZU92ZXJsYXkpCisKKyAg
ICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcgbW9kZSwgaWYgbmVjZXNzYXJ5
CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEFTU0VSVChtX2lzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZSk7CisgICAgICAgIHNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZShmYWxzZSk7CisgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9uRmFpbGVkID0gdHJ1ZTsKKyAg
ICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgbV9zaXplLndp
ZHRoLCBtX3NpemUuaGVpZ2h0KSk7CisKKyAgICAgICAgLy8gRm9yY2UgYSBzdHlsZSByZWNhbGMg
dG8gcmVtb3ZlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMuCisgICAgICAgIG1fcGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5bGVSZWNhbGMoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2VPdmVybGF5KQogICAgICAgICBtX3Bh
Z2VPdmVybGF5LT51cGRhdGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKaW5kZXggMWM1Zjg3NzI1MjY2YjA4OGY2ODY2NzQ2
YzhkM2ExZjk2M2I1NzdjMi4uZDk5NDNlNzEzYTIwYTRkN2IwOTA0MWE0ZWNjZjc3ZDkwYjMzYjM2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkVGFza1Rl
c3QuY3BwCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBNT0NLX01FVEhPRDIobWV0aG9k
Miwgdm9pZChpbnQgYTEsIGludCBhMikpOwogICAgIE1PQ0tfTUVUSE9EMyhtZXRob2QzLCB2b2lk
KGludCBhMSwgaW50IGEyLCBpbnQgYTMpKTsKICAgICBNT0NLX01FVEhPRDQobWV0aG9kNCwgdm9p
ZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBpbnQgYTQpKTsKKyAgICBNT0NLX01FVEhPRDUobWV0
aG9kNSwgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBpbnQgYTQsIGludCBhNSkpOwogfTsK
IAogVEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1ldGhvZHMpCkBAIC01MSwxMiArNTIs
MTQgQEAgVEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1ldGhvZHMpCiAgICAgRVhQRUNU
X0NBTEwobW9jaywgbWV0aG9kMig5LCA4KSkuVGltZXMoMSk7CiAgICAgRVhQRUNUX0NBTEwobW9j
aywgbWV0aG9kMyg5LCA4LCA3KSkuVGltZXMoMSk7CiAgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0
aG9kNCg5LCA4LCA3LCA2KSkuVGltZXMoMSk7CisgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9k
NSg5LCA4LCA3LCA2LCA1KSkuVGltZXMoMSk7CiAKICAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1v
Y2ssICZNb2NrOjptZXRob2QwKS0+cGVyZm9ybVRhc2soKTsKICAgICBjcmVhdGVDQ1RocmVhZFRh
c2soJm1vY2ssICZNb2NrOjptZXRob2QxLCA5KS0+cGVyZm9ybVRhc2soKTsKICAgICBjcmVhdGVD
Q1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QyLCA5LCA4KS0+cGVyZm9ybVRhc2soKTsK
ICAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QzLCA5LCA4LCA3KS0+
cGVyZm9ybVRhc2soKTsKICAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRo
b2Q0LCA5LCA4LCA3LCA2KS0+cGVyZm9ybVRhc2soKTsKKyAgICBjcmVhdGVDQ1RocmVhZFRhc2so
Jm1vY2ssICZNb2NrOjptZXRob2Q1LCA5LCA4LCA3LCA2LCA1KS0+cGVyZm9ybVRhc2soKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105998</attachid>
            <date>2011-09-01 11:39:07 -0700</date>
            <delta_ts>2011-09-01 12:58:18 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66807-20110901113906.patch</filename>
            <type>text/plain</type>
            <size>127830</size>
            <attacher name="Nat Duca">nduca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQzMTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiN2FiZWU0ODkzZTJiM2Rk
ZDY1ZTI2ZGUwYWZiOGRlZjU4Yjg1Mjc4Li44NDcxYjFmOTU0ZmMxZGM1NjAyMWI1ZjEwMTc2ZWU4
ZjMwNDMxYTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA4LTI5ICBOYXQg
RHVjYSAgPG5kdWNhQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIEludHJvZHVj
ZSBDQ1NpbmdsZVRocmVhZFByb3h5IGluIG9yZGVyIHRvIG1vdmUgTGF5ZXJSZW5kZXJlciB0byBD
Q0xheWVyVHJlZUhvc3RJbXBsCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjgwNworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgor
CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0NvbnRlbnRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
bnRMYXllckNocm9taXVtOjpjcmVhdGVUZXh0dXJlVXBkYXRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlVGV4dHVyZVVwZGF0ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdMYXllcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRPZmZzY3JlZW5M
YXllclRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
c0NvbnRleHRMb3N0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cm9vdExheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRleHRTdXBwb3J0c01hcFN1Yik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJl
bmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnJlc2VydmVUZXh0dXJlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNMYXllckltcGw6OmRyYXcpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OkNDTGF5ZXJUcmVlSG9zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OnByZUNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJl
ZUhvc3Q6OmNvbW1pdFRvKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6Y3Jl
YXRlQ29tcG9zaXRvclRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2NoZWR1bGVDb21wb3NpdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NM
YXllclRyZWVIb3N0OjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdDo6c2tpYUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6
OnNldFZpc2libGUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpsb3NlQ29t
cG9zaXRvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb250
ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6
Y29tcG9zaXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDU2V0dGluZ3M6OkNDU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczo6TGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb21taXRDb21wbGV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6ZmluaXNoQWxsUmVuZGVyaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OmlzQ29udGV4dExvc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpwcmVzZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnJlYWRiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnNldFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaXNpYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycyk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6bGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpyb290TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVh
ZFRhc2suaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6TWFpblRocmVhZFRhc2s0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1haW5UaHJlYWRUYXNrNDo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWFpblRocmVhZFRhc2s1OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRo
cmVhZFRhc2s1OjpNYWluVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6TWFpblRocmVh
ZFRhc2s1OjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVNYWluVGhyZWFk
VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5M
YXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NQbHVnaW5MYXllckltcGw6OmRyYXcp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0Q29tbWl0dGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OmlzTWFpblRocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Byb3h5Ojppc0ltcGxUaHJlYWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NQcm94eTo6c2V0SW1wbFRocmVhZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNDUHJveHk6On5DQ1Byb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OkNDUHJveHk6
OkNDUHJveHkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFNldElt
cGxUaHJlYWQ6OlNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVk
U2V0SW1wbFRocmVhZDo6flNjb3BlZFNldEltcGxUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6fkNDU2luZ2xlVGhyZWFkUHJveHkpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Npbmds
ZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NT
aW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xl
VGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDU2luZ2xlVGhyZWFkUHJveHk6OmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6bG9zZUNvbXBvc2l0b3JDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5k
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGVudHNUZXh0dXJlTWFuYWdl
cik6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1l
ZGlhdGVseSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3Np
dGVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpkb0Nv
bXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojp+Q0NUaHJlYWRQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb21wb3NpdGVBbmRSZWFkYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFBy
b3h5Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmZpbmlzaEFs
bFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppc1N0YXJ0ZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRv
ckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21t
aXRBbmRSZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNS
ZWRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1Ro
cmVhZFByb3h5Ojpza2lhQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
Ojpjb250ZW50c1RleHR1cmVNYW5hZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkND
VGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NU
aHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVh
ZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NU
aHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENs
b3NlZE9uQ0NUaHJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkVGFzay5oOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaHJlYWRUYXNrNTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhy
ZWFkVGFzazU6OkNDVGhyZWFkVGFzazUpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRUYXNr
NTo6cGVyZm9ybVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ0NUaHJlYWRUYXNrKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmRyYXcpOgor
CiAyMDExLTA5LTAxICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZCAnbXV0ZWQnIGNvbnRlbnQgYXR0cmlidXRlIHRvIEhUTUxNZWRpYUVsZW1lbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQppbmRleCBiNTI2ODQwNjRhZGZmNDg2ZmU5N2U0MjkyNDRhZDkwYThlNzE0
MWZjLi5hNTQ4NDVjZWNiYjUzMGU1NTNjYThjOTM5NTFkMzdmNzc2YjZkMTIxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCkBAIC0zNTM3LDIwICszNTM3LDIyIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgnLAot
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1Byb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUHJveHkuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWQuaCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFBy
b3h5LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRUYXNrLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29udGVudExheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGU1NmFiNmI4NWFmMjNjMmZiNjY3NzkxMzU2YjE3N2VlYjgwYTk5ZWMu
LjBhNjlmYzZiOWE2ZmNkMDAzMWUzODI5YWZiMGE2YjJlODhjZjEzNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbnRlbnRMYXllckNocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b250ZW50TGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTEyMCwxNiArMTIwLDE4IEBAIGJvb2wgQ29udGVu
dExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgpIGNvbnN0CiAKIHZvaWQgQ29udGVudExheWVy
Q2hyb21pdW06OmNyZWF0ZVRleHR1cmVVcGRhdGVyKGNvbnN0IENDTGF5ZXJUcmVlSG9zdCogaG9z
dCkKIHsKLSNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShTS0lBKQorICAg
IC8vIE5vdGUgdGhhdCBob3N0LT5za2lhQ29udGV4dCgpIHdpbGwgY3Jhc2ggaWYgY2FsbGVkIHdo
aWxlIGluIHRocmVhZGVkCisgICAgLy8gbW9kZS4gVGhpcyB0aHVzIGRlcGVuZHMgb24gQ0NMYXll
clRyZWVIb3N0Ojppbml0aWFsaXplIHR1cm5pbmcgb2ZmCisgICAgLy8gYWNjZWxlcmF0ZVBhaW50
aW5nIHRvIHByZXZlbnQgdGhpcyBmcm9tIGNyYXNoaW5nLgogICAgIGlmIChob3N0LT5zZXR0aW5n
cygpLmFjY2VsZXJhdGVQYWludGluZykgewotICAgICAgICBtX3RleHR1cmVVcGRhdGVyID0gTGF5
ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6Y3JlYXRlKENvbnRlbnRMYXllclBhaW50ZXI6OmNy
ZWF0ZShtX293bmVyKSwgaG9zdC0+bGF5ZXJSZW5kZXJlcigpLT5za2lhQ29udGV4dCgpKTsKKyAg
ICAgICAgR3JDb250ZXh0KiBjb250ZXh0ID0gY29uc3RfY2FzdDxDQ0xheWVyVHJlZUhvc3QqPiho
b3N0KS0+c2tpYUNvbnRleHQoKTsKKyAgICAgICAgbV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4
dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OmNyZWF0ZShDb250ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUo
bV9vd25lciksIGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIFNL
SUEKLSNlbmRpZiAvLyAhVEhSRUFERURfQ09NUE9TSVRJTkcKIAotICAgIG1fdGV4dHVyZVVwZGF0
ZXIgPSBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpjcmVhdGUoQ29udGVudExheWVyUGFpbnRl
cjo6Y3JlYXRlKG1fb3duZXIpLCBob3N0LT5jb250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAg
bV90ZXh0dXJlVXBkYXRlciA9IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OmNyZWF0ZShDb250
ZW50TGF5ZXJQYWludGVyOjpjcmVhdGUobV9vd25lciksIGhvc3QtPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ01hcFN1Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwCmluZGV4IDIzYzg1NTVmNTBiZTE2ZThmOGJmMzE5MWY4ZWM1NzgxOWQyY2M1YmMuLjcx
YmMwYjZiOWRiNjU2YmM0NjBmNGY4NTY1NDk0ZmE1N2FiNTBiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcApAQCAtMTgxLDcgKzE4MSw3IEBAIGJvb2wgSW1hZ2VMYXllckNocm9t
aXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogCiB2b2lkIEltYWdlTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlVGV4dHVyZVVwZGF0ZXIoY29uc3QgQ0NMYXllclRyZWVIb3N0KiBob3N0KQogewotICAgIG1f
dGV4dHVyZVVwZGF0ZXIgPSBJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OmNyZWF0ZShob3N0LT5j
b250ZXh0U3VwcG9ydHNNYXBTdWIoKSk7CisgICAgbV90ZXh0dXJlVXBkYXRlciA9IEltYWdlTGF5
ZXJUZXh0dXJlVXBkYXRlcjo6Y3JlYXRlKGhvc3QtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMo
KS51c2luZ01hcFN1Yik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggOTU2M2Vh
YTU3ZjU2NzNjODU5OWQ0ZGJhYWM4OGI5MmQ5YzQ5NDM0OC4uZWVlYWJiMjEwYWExYjMyNTg5YzY3
MWI4YzM3MTExNDQ5MmIwMzMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTk2LDYgKzk2
LDE5IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcygpCiB7CiB9CiAKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIHJlbmRlcmVyKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRy
ZW4oKS5zaXplKCk7ICsraSkKKyAgICAgICAgY2hpbGRyZW4oKVtpXS0+c2V0TGF5ZXJSZW5kZXJl
clJlY3Vyc2l2ZShyZW5kZXJlcik7CisKKyAgICBpZiAobWFza0xheWVyKCkpCisgICAgICAgIG1h
c2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKHJlbmRlcmVyKTsKKyAgICBpZiAo
cmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FMYXllcigpLT5zZXRMYXllclJlbmRlcmVy
UmVjdXJzaXZlKHJlbmRlcmVyKTsKKworICAgIHNldExheWVyUmVuZGVyZXIocmVuZGVyZXIpOwor
fQorCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiByZW5kZXJlcikKIHsKICAgICAvLyBJZiB3ZSdyZSBjaGFuZ2luZyBsYXllciByZW5k
ZXJlcnMgdGhlbiB3ZSBuZWVkIHRvIGZyZWUgdXAgYW55IHJlc291cmNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCmluZGV4IDU4ZWQxYjA0MDk2ZGFjM2UxYmY2ZTc3OTZhZjU5MDZiODM4OGNjODUuLmZlMmU0
YzcxMzczYmU1MjVkNThjNjNiN2NlMGE4MWVhOGUxZTVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
QEAgLTE1Myw2ICsxNTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1Jvb3RMYXllcihib29s
IGlzUm9vdExheWVyKSB7IG1faXNSb290TGF5ZXIgPSBpc1Jvb3RMYXllcjsgfQogICAgIGJvb2wg
aXNSb290TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2lzUm9vdExheWVyOyB9CiAKKyAgICB2b2lk
IHNldExheWVyUmVuZGVyZXJSZWN1cnNpdmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKik7CisKICAg
ICAvLyBEZXJpdmVkIHR5cGVzIG11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhleSBuZWVk
IHRvIHJlYWN0IHRvIGEgY2hhbmdlCiAgICAgLy8gaW4gdGhlIExheWVyUmVuZGVyZXJDaHJvbWl1
bS4KICAgICAvLyBGSVhNRSwgcmVwbGFjZSB3aXRoIENDTGF5ZXJUcmVlSG9zdC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDZlYjE5ZWU0YTk3YmVjZDAzNTc0NmEy
NWNiOGVlZDVmZmI1ODc4ZTYuLjlkNzE0YWUzZGRjNzI4OGIwMjVmN2I3MTM5NWZiZDgyNDVlZTNh
NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDUsNiArNDUs
NyBAQAogI2luY2x1ZGUgIkxheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaCIKICNpbmNsdWRlICJO
b25Db21wb3NpdGVkQ29udGVudEhvc3QuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIu
aCIKQEAgLTQ0OCwxMyArNDQ5LDEzIEBAIGJvb2wgY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQ
YWludGluZyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKIH0KICNlbmRpZgogCi1QYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUo
Q0NMYXllclRyZWVIb3N0KiBvd25lciwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCkKK1Bhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIG93bmVyLCBDQ0xheWVyVHJlZUhvc3RJbXBs
KiBvd25lckltcGwsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7CiAj
aWYgVVNFKFNLSUEpCiAgICAgaWYgKG93bmVyLT5zZXR0aW5ncygpLmFjY2VsZXJhdGVQYWludGlu
ZyAmJiAhY29udGV4dFN1cHBvcnRzQWNjZWxlcmF0ZWRQYWludGluZyhjb250ZXh0LmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAjZW5kaWYKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9t
aXVtPiBsYXllclJlbmRlcmVyKGFkb3B0UmVmKG5ldyBMYXllclJlbmRlcmVyQ2hyb21pdW0ob3du
ZXIsIGNvbnRleHQpKSk7CisgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbGF5ZXJS
ZW5kZXJlcihhZG9wdFJlZihuZXcgTGF5ZXJSZW5kZXJlckNocm9taXVtKG93bmVyLCBvd25lcklt
cGwsIGNvbnRleHQpKSk7CiAgICAgaWYgKCFsYXllclJlbmRlcmVyLT5pbml0aWFsaXplKCkpCiAg
ICAgICAgIHJldHVybiAwOwogCkBAIC00NjIsOCArNDYzLDEwIEBAIFBhc3NSZWZQdHI8TGF5ZXJS
ZW5kZXJlckNocm9taXVtPiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShDQ0xheWVyVHJl
ZUhvc3QqCiB9CiAKIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6TGF5ZXJSZW5kZXJlckNocm9taXVt
KENDTGF5ZXJUcmVlSG9zdCogb3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lckltcGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0KQogICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1fb3duZXJJbXBs
KG93bmVySW1wbCkKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2UoMCkKICAgICAsIG1fb2Zm
c2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCkBAIC00ODIs
MTQgKzQ4NSwxOCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZSgpCiAg
ICAgICAgIC8vIExpbWl0IHRoZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRo
ZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCiAgICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAqIDEwMjQgKiAxMDI0OwogICAgICAgICBtX3NraWFDb250
ZXh0LT5zZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1
cmVDYWNoZUJ5dGVzKTsKKyAgICAgICAgbV9jYXBhYmlsaXRpZXMudXNpbmdBY2NlbGVyYXRlZFBh
aW50aW5nID0gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAogICAgIFdlYkNvcmU6OkV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fY29udGV4
dFN1cHBvcnRzTWFwU3ViID0gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX21hcF9z
dWIiKTsKLSAgICBpZiAobV9jb250ZXh0U3VwcG9ydHNNYXBTdWIpCisgICAgbV9jYXBhYmlsaXRp
ZXMudXNpbmdNYXBTdWIgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQ0hST01JVU1fbWFwX3N1
YiIpOworICAgIGlmIChtX2NhcGFiaWxpdGllcy51c2luZ01hcFN1YikKICAgICAgICAgZXh0ZW5z
aW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fbWFwX3N1YiIpOwogCisgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfU0laRSwgJm1fY2FwYWJpbGl0aWVzLm1heFRleHR1cmVTaXplKSk7CisgICAg
bV9jYXBhYmlsaXRpZXMuYmVzdFRleHR1cmVGb3JtYXQgPSBQbGF0Zm9ybUNvbG9yOjpiZXN0VGV4
dHVyZUZvcm1hdChtX2NvbnRleHQuZ2V0KCkpOworCiAgICAgaWYgKCFpbml0aWFsaXplU2hhcmVk
T2JqZWN0cygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTUxMywxMSArNTIwLDEwIEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhclJlbmRlclN1cmZhY2VzT25DQ0xheWVy
SW1wbFJlY3Vyc2l2ZShDQ0xheWVySW1wCiAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgp
OwogfQogCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYXJSb290Q0NMYXllckltcGwo
KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsb3NlKCkKIHsKLSAgICBpZiAobV9yb290
Q0NMYXllckltcGwpCi0gICAgICAgIGNsZWFyUmVuZGVyU3VyZmFjZXNPbkNDTGF5ZXJJbXBsUmVj
dXJzaXZlKG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKTsKLSAgICBtX3Jvb3RDQ0xheWVySW1wbC5j
bGVhcigpOworICAgIGlmIChyb290TGF5ZXJJbXBsKCkpCisgICAgICAgIGNsZWFyUmVuZGVyU3Vy
ZmFjZXNPbkNDTGF5ZXJJbXBsUmVjdXJzaXZlKHJvb3RMYXllckltcGwoKSk7CiB9CiAKIEdyYXBo
aWNzQ29udGV4dDNEKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNvbnRleHQoKQpAQCAtNTU4LDYg
KzU2NCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWV3cG9ydENoYW5nZWQoKQog
CiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKCkKIHsKKyAgICBpZiAo
IXJvb3RMYXllcigpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAobV9vd25lci0+dmlld3Bv
cnRTaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU2NiwxMyArNTc1LDYg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycygpCiAgICAgLy8gUmVu
ZGVyV2lkZ2V0LgogICAgIG1faGVhZHNVcERpc3BsYXktPm9uRnJhbWVCZWdpbihjdXJyZW50VGlt
ZSgpKTsKIAotICAgIC8vIFJlY2hlY2sgdGhhdCB3ZSBzdGlsbCBoYXZlIGEgcm9vdCBsYXllci4g
VGhpcyBtYXkgYmVjb21lIG51bGwgaWYKLSAgICAvLyBjb21wb3NpdGluZyBnZXRzIHR1cm5lZCBv
ZmYgZHVyaW5nIGEgcGFpbnQgb3BlcmF0aW9uLgotICAgIGlmICghcm9vdExheWVyKCkpIHsKLSAg
ICAgICAgbV9yb290Q0NMYXllckltcGwuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQogICAgIHVwZGF0ZUxheWVycyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpKTsKIH0KIApA
QCAtNTgxLDEyICs1ODMsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVy
cygpCiAgICAgaWYgKCFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgewotICAg
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVz
IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhyb290TGF5ZXIoKS0+cGxhdGZvcm1MYXllcigpLCBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSk7Ci0gICAgfQotCi0KICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJl
TWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyh0ZXh0dXJlTWVtb3J5SGlnaExpbWl0Qnl0ZXMg
LSBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpKTsKICAg
ICBkcmF3TGF5ZXJzSW50ZXJuYWwoKTsKIApAQCAtNjIzLDcgKzYxOSw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKQog
CiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnM6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxMYXllckNocm9taXVtLCBSZW5kZXJTdXJmYWNlQ2hyb21p
dW0sIHZvaWQqPihyb290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCByb290UmVuZGVyU3VyZmFjZS0+bGF5ZXJM
aXN0KCksIDAsIG1fbWF4VGV4dHVyZVNpemUpOworICAgICAgICBjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtc0FuZFZpc2liaWxpdHk8TGF5ZXJDaHJvbWl1bSwgUmVuZGVyU3VyZmFjZUNocm9taXVtLCB2
b2lkKj4ocm9vdExheWVyLCByb290TGF5ZXIsIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgcm9vdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgp
LCAwLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CiAgICAgfQogCiAgICAgcGFpbnRM
YXllckNvbnRlbnRzKHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwpAQCAtNzMxLDcgKzcyNyw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogICAgICAg
ICByZXR1cm47CiAKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TGF5ZXJzIiwgdGhpcywgMCk7Ci0gICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jv
b3RDQ0xheWVySW1wbC5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogcm9vdERyYXdMYXllciA9IHJv
b3RMYXllckltcGwoKTsKICAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGlmICghcm9v
dERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtNzQ5LDcgKzc0NSw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWwoKQogCiAgICAgewogICAgICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzSW50ZXJuYWw6
OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7Ci0gICAgICAgIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVyU29ydGVy
Pihyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPmxh
eWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgICAgIGNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eTxDQ0xheWVySW1wbCwgQ0NSZW5kZXJT
dXJmYWNlLCBDQ0xheWVyU29ydGVyPihyb290RHJhd0xheWVyLCByb290RHJhd0xheWVyLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVm
YXVsdFJlbmRlclN1cmZhY2UtPmxheWVyTGlzdCgpLCAmbV9sYXllclNvcnRlciwgbV9jYXBhYmls
aXRpZXMubWF4VGV4dHVyZVNpemUpOwogICAgIH0KIAogICAgIC8vIFRoZSBHTCB2aWV3cG9ydCBj
b3ZlcnMgdGhlIGVudGlyZSB2aXNpYmxlIGFyZWEsIGluY2x1ZGluZyB0aGUgc2Nyb2xsYmFycy4K
QEAgLTgzOSwyMCArODM1LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnByZXNlbnQo
KQogICAgIG1faGVhZHNVcERpc3BsYXktPm9uUHJlc2VudCgpOwogfQogCi12b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBs
YXllcikKLXsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxk
cmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGls
ZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShjaGls
ZHJlbltpXS5nZXQoKSk7Ci0KLSAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICBz
ZXRMYXllclJlbmRlcmVyUmVjdXJzaXZlKGxheWVyLT5tYXNrTGF5ZXIoKSk7Ci0gICAgaWYgKGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgc2V0TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShs
YXllci0+cmVwbGljYUxheWVyKCkpOwotCi0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhp
cyk7Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpnZXRGcmFtZWJ1ZmZlclBpeGVs
cyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKHJlY3Qu
bWF4WCgpIDw9IHZpZXdwb3J0V2lkdGgoKSAmJiByZWN0Lm1heFkoKSA8PSB2aWV3cG9ydEhlaWdo
dCgpKTsKQEAgLTk0Nyw3ICs5MjksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXllcikKIAogTWFuYWdlZFRl
eHR1cmUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Z2V0T2Zmc2NyZWVuTGF5ZXJUZXh0dXJlKCkK
IHsKLSAgICByZXR1cm4gc2V0dGluZ3MoKS5jb21wb3NpdGVPZmZzY3JlZW4gJiYgbV9yb290Q0NM
YXllckltcGwgPyBtX3Jvb3RDQ0xheWVySW1wbC0+cmVuZGVyU3VyZmFjZSgpLT5jb250ZW50c1Rl
eHR1cmUoKSA6IDA7CisgICAgcmV0dXJuIHNldHRpbmdzKCkuY29tcG9zaXRlT2Zmc2NyZWVuICYm
IHJvb3RMYXllckltcGwoKSA/IHJvb3RMYXllckltcGwoKS0+cmVuZGVyU3VyZmFjZSgpLT5jb250
ZW50c1RleHR1cmUoKSA6IDA7CiB9CiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjb3B5
T2Zmc2NyZWVuVGV4dHVyZVRvRGlzcGxheSgpCkBAIC0xMDkyLDEwICsxMDc0LDYgQEAgYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyIs
IHRoaXMsIDApOwogICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gR2V0IHRoZSBt
YXggdGV4dHVyZSBzaXplIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLgotICAgIG1fbWF4VGV4dHVy
ZVNpemUgPSAwOwotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVTaXpl
KSk7Ci0KICAgICAvLyBDcmVhdGUgYW4gRkJPIGZvciBkb2luZyBvZmZzY3JlZW4gcmVuZGVyaW5n
LgogICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCA9IG1f
Y29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSk7CiAKQEAgLTExMDcsOCArMTA4NSw4IEBAIGJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAKICAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCi0gICAgbV9jb250
ZW50c1RleHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5
SGlnaExpbWl0Qnl0ZXMsIG1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1fcmVuZGVyU3VyZmFjZVRl
eHR1cmVNYW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZSh0ZXh0dXJlTWVtb3J5SGlnaExp
bWl0Qnl0ZXMsIG1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdl
ciA9IFRleHR1cmVNYW5hZ2VyOjpjcmVhdGUodGV4dHVyZU1lbW9yeUhpZ2hMaW1pdEJ5dGVzLCBt
X2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKHRleHR1cmVNZW1vcnlIaWdoTGltaXRC
eXRlcywgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOwogI2lmbmRlZiBOREVCVUcKICAg
ICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnNldEFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5
KG1fY29udGV4dC5nZXQoKSk7CiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNl
dEFzc29jaWF0ZWRDb250ZXh0RGVidWdPbmx5KG1fY29udGV4dC5nZXQoKSk7CkBAIC0xMjk4LDcg
KzEyNzYsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHVtcFJlbmRlclN1cmZhY2Vz
KFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50LCBjb25zdAogICAgICAgICBkdW1wUmVuZGVyU3Vy
ZmFjZXModHMsIGluZGVudCwgbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOwogfQogCi1ib29s
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNDb21wb3NpdG9yQ29udGV4dExvc3QoKQorYm9vbCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmlzQ29udGV4dExvc3QoKQogewogICAgIHJldHVybiAobV9j
b250ZXh0LmdldCgpLT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIo
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uaAppbmRleCAyZDgwNDAzZGQ1MjZiY2VlYzg0YjNlOWNhNGM4MDkyNjFhYzE3
NWZkLi5lN2Y0MjFiMzZhYmU0YTU1YTRhNjVlYmMwN2MyZWE0MTNjYjlkMDU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgImNj
L0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUGx1Z2luTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC02Myw3ICs2
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NIZWFkc1VwRGlzcGxheTsKIGNs
YXNzIENDTGF5ZXJJbXBsOwotY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVyOworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0OyAvLyBGSVhNRTogcmVtb3ZlIHBvaW50ZXJzIHRvIHRoaXMuCiBjbGFz
cyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgR2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3Jh
cGhpY3NDb250ZXh0M0Q7CkBAIC03MiwxMSArNzMsMTUgQEAgY2xhc3MgTm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0OwogLy8gQ2xhc3MgdGhhdCBoYW5kbGVzIGRyYXdpbmcgb2YgY29tcG9zaXRlZCBy
ZW5kZXIgbGF5ZXJzIHVzaW5nIEdMLgogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtIDogcHVi
bGljIFJlZkNvdW50ZWQ8TGF5ZXJSZW5kZXJlckNocm9taXVtPiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBjcmVhdGUoQ0NMYXllclRyZWVI
b3N0KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gY3JlYXRlKENDTGF5ZXJUcmVlSG9zdCosIENDTGF5
ZXJUcmVlSG9zdEltcGwqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisKKyAgICAv
LyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5ZXJSZW5kZXJlckNocm9t
aXVtIHRvIGRlc3RydWN0CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdmlydHVhbCB+TGF5ZXJS
ZW5kZXJlckNocm9taXVtKCk7CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXItPnNldHRpbmdzKCk7IH0KKyAgICBjb25zdCBMYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBjb25zdCB7IHJldHVybiBtX2NhcGFiaWxp
dGllczsgfQogCiAgICAgQ0NMYXllclRyZWVIb3N0KiBvd25lcigpIHsgcmV0dXJuIG1fb3duZXI7
IH0KICAgICBjb25zdCBDQ0xheWVyVHJlZUhvc3QqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9v
d25lcjsgfQpAQCAtODQsMTQgKzg5LDE3IEBAIHB1YmxpYzoKICAgICBHcmFwaGljc0xheWVyKiBy
b290TGF5ZXIoKSB7IHJldHVybiBtX293bmVyLT5yb290TGF5ZXIoKTsgfQogICAgIGNvbnN0IEdy
YXBoaWNzTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXItPnJvb3RMYXll
cigpOyB9CiAKKyAgICBDQ0xheWVySW1wbCogcm9vdExheWVySW1wbCgpIHsgcmV0dXJuIG1fb3du
ZXJJbXBsLT5yb290TGF5ZXIoKTsgfQorICAgIGNvbnN0IENDTGF5ZXJJbXBsKiByb290TGF5ZXJJ
bXBsKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckltcGwtPnJvb3RMYXllcigpOyB9CisKICAgICBH
cmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFw
U3ViKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KKyAgICBib29s
IGNvbnRleHRTdXBwb3J0c01hcFN1YigpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzLnVz
aW5nTWFwU3ViOyB9CiAKICNpZiBVU0UoU0tJQSkKICAgICBHckNvbnRleHQqIHNraWFDb250ZXh0
KCkgeyByZXR1cm4gbV9za2lhQ29udGV4dC5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICBjb25zdCBJ
bnRTaXplJiB2aWV3cG9ydFNpemUoKSB7IHJldHVybiBtX293bmVyLT52aWV3cG9ydFNpemUoKTsg
fQorICAgIGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSgpIHsgcmV0dXJuIG1fb3duZXJJbXBs
LT52aWV3cG9ydFNpemUoKTsgfQogICAgIGludCB2aWV3cG9ydFdpZHRoKCkgeyByZXR1cm4gdmll
d3BvcnRTaXplKCkud2lkdGgoKTsgfQogICAgIGludCB2aWV3cG9ydEhlaWdodCgpIHsgcmV0dXJu
IHZpZXdwb3J0U2l6ZSgpLmhlaWdodCgpOyB9CiAKQEAgLTExNSw4ICsxMjMsNiBAQCBwdWJsaWM6
CiAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgoKSBjb25z
dCB7IHJldHVybiBtX3Byb2plY3Rpb25NYXRyaXg7IH0KICAgICBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0K
IAotICAgIGludCBtYXhUZXh0dXJlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VGV4dHVyZVNp
emU7IH0KLQogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25z
dCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJDaHJv
bWl1bTo6Qm9yZGVyUHJvZ3JhbSogYm9yZGVyUHJvZ3JhbSgpOwogICAgIGNvbnN0IENDSGVhZHNV
cERpc3BsYXk6OlByb2dyYW0qIGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwpAQCAtMTQyLDI0ICsx
NDgsMTcgQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGxheWVyVHJlZUFzVGV4dCgpIGNvbnN0Owog
Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGNvbXBvc2l0b3IgY29udGV4dCBoYXMgYW4gZXJy
b3IuCi0gICAgYm9vbCBpc0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpOworICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpOwogCiAgICAgdm9pZCByZWxlYXNlVGV4dHVyZXMoKTsKIAotICAgIHZvaWQgc2V0
TGF5ZXJSZW5kZXJlclJlY3Vyc2l2ZShMYXllckNocm9taXVtKik7Ci0KICAgICBHQzNEZW51bSBi
ZXN0VGV4dHVyZUZvcm1hdCgpOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPExheWVyQ2hy
b21pdW0+ID4gTGF5ZXJMaXN0OwogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1w
bD4gPiBDQ0xheWVyTGlzdDsKIAotICAgIHZvaWQgY2xlYXJSb290Q0NMYXllckltcGwoKTsKIHBy
aXZhdGU6Ci0gICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDTGF5
ZXJUcmVlSG9zdEltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4KLSAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IG1fcm9vdENDTGF5ZXJJbXBsOwotCi0gICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKEND
TGF5ZXJUcmVlSG9zdCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKKyAgICBMYXll
clJlbmRlcmVyQ2hyb21pdW0oQ0NMYXllclRyZWVIb3N0KiwgQ0NMYXllclRyZWVIb3N0SW1wbCos
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+KTsKICAgICBib29sIGluaXRpYWxpemUoKTsK
IAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKQEAgLTE5Miw5ICsxOTEs
MTMgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlc09uQ0NMYXllcklt
cGxSZWN1cnNpdmUoQ0NMYXllckltcGwqKTsKIAotICAgIC8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0
byBDQ0xheWVyVHJlZUhvc3RJbXBsCisgICAgLy8gRklYTUU6IFJlbW92ZSBDQ0xheWVyVHJlZUhv
c3QgZmllbGQKICAgICBDQ0xheWVyVHJlZUhvc3QqIG1fb3duZXI7CiAKKyAgICBDQ0xheWVyVHJl
ZUhvc3RJbXBsKiBtX293bmVySW1wbDsKKworICAgIExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMg
bV9jYXBhYmlsaXRpZXM7CisKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Byb2plY3Rpb25N
YXRyaXg7CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKQEAgLTIw
Myw5ICsyMDYsNiBAQCBwcml2YXRlOgogICAgIENDUmVuZGVyU3VyZmFjZSogbV9jdXJyZW50UmVu
ZGVyU3VyZmFjZTsKICAgICB1bnNpZ25lZCBtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQ7CiAKLSAg
ICAvLyBNYXhpbXVtIHRleHR1cmUgZGltZW5zaW9ucyBzdXBwb3J0ZWQuCi0gICAgaW50IG1fbWF4
VGV4dHVyZVNpemU7Ci0KICAgICAvLyBTdG9yZSB2YWx1ZXMgdGhhdCBhcmUgc2hhcmVkIGJldHdl
ZW4gaW5zdGFuY2VzIG9mIGVhY2ggbGF5ZXIgdHlwZQogICAgIC8vIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGluc3RhbmNlIG9mIHRoZSBjb21wb3NpdG9yLiBTaW5jZSB0aGVyZSBjYW4gYmUKICAgICAv
LyBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIGNvbXBvc2l0b3IgcnVubmluZyBpbiB0aGUgc2Ft
ZSByZW5kZXJlciBwcm9jZXNzCkBAIC0yMzQsOCArMjM0LDYgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8R3JDb250ZXh0PiBtX3NraWFDb250ZXh0OwogI2VuZGlmCiAKLSAgICBib29sIG1fY29udGV4
dFN1cHBvcnRzTWFwU3ViOwotCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiBtX2RlZmF1bHRSZW5kZXJT
dXJmYWNlOwogCiAgICAgQ0NMYXllclNvcnRlciBtX2xheWVyU29ydGVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBk
YXRlckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCmluZGV4IDI2Y2U4YjVkOTE5N2JhMzY4Njk0Mjll
NmIwYzFmNDZjNDhiMGFhNTYuLmM2ZWE3YmMxZWMzZmU4Nzk5ZWYxOWE3MWExMzgwZjRiMmQ0M2Ew
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgKQEAgLTgwLDcg
KzgwLDYgQEAgcHJpdmF0ZToKICAgICBMYXllclRleHR1cmVTdWJJbWFnZSBtX3RleFN1YkltYWdl
OwogfTsKIAotI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCiAjaWYgVVNFKFNLSUEpCiBj
bGFzcyBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlIDogcHVibGljIExheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExheWVyVGV4dHVyZVVwZGF0
ZXJTa1BpY3R1cmUpOwpAQCAtMTEwLDcgKzEwOSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNr
Q2FudmFzPiBtX2NhbnZhczsgLy8gR1BVIGFjY2VsZXJhdGVkIGNhbnZhcy4KIH07CiAjZW5kaWYg
Ly8gU0tJQQotI2VuZGlmIC8vICFUSFJFQURFRF9DT01QT1NJVElORwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggM2UxMDJlYzg2NTY5NWY4M2JiNzA4MWUzYmZm
NjE5MWJiYWQ5ZTJjMy4uY2ZkZjEyM2FmYTc0M2RiMjE2MTQzN2ZkOWJlOWQzNDQ3MThmNDZhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGls
ZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC02NSw2ICs2NSw3IEBAIHByaXZh
dGU6CiAKIFRpbGVkTGF5ZXJDaHJvbWl1bTo6VGlsZWRMYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBMYXllckNocm9taXVtKG93bmVyKQorICAgICwgbV9s
YXllclRyZWVIb3N0KDApCiAgICAgLCBtX3RpbGluZ09wdGlvbihBdXRvVGlsZSkKICAgICAsIG1f
dGV4dHVyZUZvcm1hdChHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNKQogICAgICwgbV9z
a2lwc0RyYXcoZmFsc2UpCkBAIC0xMTUsNyArMTE2LDcgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21p
dW06OnVwZGF0ZVRpbGVTaXplQW5kVGlsaW5nT3B0aW9uKCkKICAgICAgICAgaXNUaWxlZCA9IGF1
dG9UaWxlZDsKIAogICAgIEludFNpemUgcmVxdWVzdGVkU2l6ZSA9IGlzVGlsZWQgPyB0aWxlU2l6
ZSA6IGNvbnRlbnRCb3VuZHMoKTsKLSAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IGxheWVyUmVuZGVy
ZXIoKS0+bWF4VGV4dHVyZVNpemUoKTsKKyAgICBjb25zdCBpbnQgbWF4U2l6ZSA9IG1fbGF5ZXJU
cmVlSG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1heFRleHR1cmVTaXplOwogICAg
IEludFNpemUgY2xhbXBlZFNpemUgPSByZXF1ZXN0ZWRTaXplLnNocnVua1RvKEludFNpemUobWF4
U2l6ZSwgbWF4U2l6ZSkpOwogICAgIG1fdGlsZXItPnNldFRpbGVTaXplKGNsYW1wZWRTaXplKTsK
IH0KQEAgLTEzNiwxMiArMTM3LDE0IEBAIGJvb2wgVGlsZWRMYXllckNocm9taXVtOjpkcmF3c0Nv
bnRlbnQoKSBjb25zdAogCiB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9z
dChDQ0xheWVyVHJlZUhvc3QqIGhvc3QpCiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJU
cmVlSG9zdChob3N0KTsKKyAgICBtX2xheWVyVHJlZUhvc3QgPSBob3N0OwogICAgIGlmIChtX3Rp
bGVyKQogICAgICAgICByZXR1cm47CiAKICAgICBjcmVhdGVUZXh0dXJlVXBkYXRlcihob3N0KTsK
IAotICAgIG1fdGV4dHVyZUZvcm1hdCA9IGhvc3QtPmJlc3RUZXh0dXJlRm9ybWF0KCk7CisgICAg
bV90ZXh0dXJlRm9ybWF0ID0gaG9zdC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLmJlc3RU
ZXh0dXJlRm9ybWF0OwogICAgIG1fdGV4dHVyZU9yaWVudGF0aW9uID0gdGV4dHVyZVVwZGF0ZXIo
KS0+b3JpZW50YXRpb24oKTsKICAgICBtX3NhbXBsZWRUZXhlbEZvcm1hdCA9IHRleHR1cmVVcGRh
dGVyKCktPnNhbXBsZWRUZXhlbEZvcm1hdChtX3RleHR1cmVGb3JtYXQpOwogICAgIG1fdGlsZXIg
PSBDQ0xheWVyVGlsaW5nRGF0YTo6Y3JlYXRlKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApp
bmRleCA1ODU2OTE4MTQ0MDY5M2Y2MGY2ZGQ2YjI5OWNiYjlkYzg5ZDFhNDVjLi5iYjI4NmQ2NjBk
YWFlOTE1OGI2YjA1MjA2NjMwNDUxYjM5MGNjYTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uaApAQCAtODgsNiArODgsOCBAQCBwcml2YXRlOgogCiAgICAgVGV4dHVyZU1hbmFnZXIqIHRl
eHR1cmVNYW5hZ2VyKCkgY29uc3Q7CiAKKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVl
SG9zdDsKKwogICAgIC8vIFN0YXRlIGhlbGQgYmV0d2VlbiB1cGRhdGUgYW5kIHVwbG9hZC4KICAg
ICBJbnRSZWN0IG1fcGFpbnRSZWN0OwogICAgIEludFJlY3QgbV91cGRhdGVSZWN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNjUyZDI4ZGZiM2M2MjM2ZTcwM2MxOTNkNGVl
NTc2ZTE2OTk4ZDFjZi4uNzYwNzI4MWYwZjBkMTg0MzFhMzdhYjJlNjUwYjgyMTEwN2JhNWVhMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC0xNDcsNiArMTQ3LDcgQEAgdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVy
KQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJl
ZUhvc3QqIGxheWVyVHJlZUhvc3QpCiB7CisgICAgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVl
SG9zdChsYXllclRyZWVIb3N0KTsKICAgICBpZiAobV9sYXllclRyZWVIb3N0ID09IGxheWVyVHJl
ZUhvc3QpCiAgICAgICAgIHJldHVybjsKIApAQCAtMTc4LDcgKzE3OSw3IEBAIGJvb2wgVmlkZW9M
YXllckNocm9taXVtOjpyZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBm
cmFtZSwgR0MzRGVuCiAgICAgQVNTRVJUKGZyYW1lKTsKICAgICBBU1NFUlQodGV4dHVyZUZvcm1h
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAKLSAgICBpbnQgbWF4VGV4
dHVyZVNpemUgPSBtX2xheWVyVHJlZUhvc3QtPm1heFRleHR1cmVTaXplKCk7CisgICAgaW50IG1h
eFRleHR1cmVTaXplID0gbV9sYXllclRyZWVIb3N0LT5sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
KCkubWF4VGV4dHVyZVNpemU7CiAKICAgICBmb3IgKHVuc2lnbmVkIHBsYW5lID0gMDsgcGxhbmUg
PCBmcmFtZS0+cGxhbmVzKCk7IHBsYW5lKyspIHsKICAgICAgICAgSW50U2l6ZSByZXF1aXJlZFRl
eHR1cmVTaXplID0gZnJhbWUtPnJlcXVpcmVkVGV4dHVyZVNpemUocGxhbmUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuY3BwCmluZGV4IGE4NjZhMTc5YTcwOTk1NWVkY2Y1OGM4MGQ3
MTI5NGVlYTAyNTkyNzQuLjBlNzU3MjQ4NzQ2ZmY2ZTI0ZjMxZWQwOTE3ZmQ3ZmQ0OGEzMDQ4ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTMxLDcgKzMxLDcgQEAK
IAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCi0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisj
aW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MCw3ICs1MCw3IEBAIENDQ2FudmFzTGF5ZXJJbXBs
Ojp+Q0NDYW52YXNMYXllckltcGwoKQogCiB2b2lkIENDQ2FudmFzTGF5ZXJJbXBsOjpkcmF3KCkK
IHsKLSAgICBBU1NFUlQoQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc0ltcGxUaHJlYWQoKSk7
CisgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKICAgICBjb25zdCBDQ0NhbnZhc0xheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXIoKS0+Y2FudmFzTGF5ZXJQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHBy
b2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmNwcAppbmRleCA1ZDZiYzljMzI3MzUyNjc5ZTU4NjRhYzgyYmU1YmJmNDRlZTUyZTZmLi5k
ZWI5ZDRmZDY0M2RlZjQyM2NhMTJhM2JiN2VmZjYxNWYzY2RlNjlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwLDEwICszMCwxMiBAQAogI2luY2x1ZGUgIkxheWVyUGFp
bnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5j
bHVkZSAiTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db2xv
ci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhv
c3RDb21taXR0ZXIuaCIKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RocmVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGhyZWFkUHJv
eHkuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwyOCArNDgsMzAgQEAgUGFzc1Jl
ZlB0cjxDQ0xheWVyVHJlZUhvc3Q+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlKENDTGF5ZXJUcmVl
SG9zdENsaWVudCogY2xpZW4KIH0KIAogQ0NMYXllclRyZWVIb3N0OjpDQ0xheWVyVHJlZUhvc3Qo
Q0NMYXllclRyZWVIb3N0Q2xpZW50KiBjbGllbnQsIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdz
KQotICAgIDogbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0KGZhbHNlKQotICAgICwgbV9tYXhU
ZXh0dXJlU2l6ZSgwKQotICAgICwgbV9jb250ZXh0U3VwcG9ydHNNYXBTdWIoZmFsc2UpCi0gICAg
LCBtX2FuaW1hdGluZyhmYWxzZSkKKyAgICA6IG1fYW5pbWF0aW5nKGZhbHNlKQogICAgICwgbV9j
bGllbnQoY2xpZW50KQogICAgICwgbV9mcmFtZU51bWJlcigwKQogICAgICwgbV9ub25Db21wb3Np
dGVkQ29udGVudEhvc3QoTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpjcmVhdGUobV9jbGllbnQt
PmNyZWF0ZVJvb3RMYXllclBhaW50ZXIoKSkpCiAgICAgLCBtX3NldHRpbmdzKHNldHRpbmdzKQor
ICAgICwgbV92aXNpYmxlKHRydWUpCiB7CiB9CiAKIGJvb2wgQ0NMYXllclRyZWVIb3N0Ojppbml0
aWFsaXplKCkKIHsKLSAgICBtX2xheWVyUmVuZGVyZXIgPSBjcmVhdGVMYXllclJlbmRlcmVyKCk7
Ci0gICAgaWYgKCFtX2xheWVyUmVuZGVyZXIpCisgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29t
cG9zaXRvclRocmVhZCkgeworICAgICAgICAvLyBBY2NlbGVyYXRlZCBQYWludGluZyBpcyBub3Qg
c3VwcG9ydGVkIGluIHRocmVhZGVkIG1vZGUuIFR1cm4gaXQgb2ZmLgorICAgICAgICBtX3NldHRp
bmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworICAgICAgICBtX3Byb3h5ID0gQ0NUaHJl
YWRQcm94eTo6Y3JlYXRlKHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBtX3Byb3h5ID0gQ0NT
aW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKHRoaXMpOworICAgIG1fcHJveHktPnN0YXJ0KCk7CisK
KyAgICBpZiAoIW1fcHJveHktPmluaXRpYWxpemVMYXllclJlbmRlcmVyKHRoaXMpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGSVhNRTogSW4gdGhlIHRocmVhZGVkIGNhc2UsIHRo
ZXNlIHZhbHVlcyB3aWxsIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQKLSAgICAvLyBieSBzb21ldGhp
bmcgb3RoZXIgdGhhbiBtX2xheWVyUmVuZGVyZXIuCi0gICAgbV9tYXhUZXh0dXJlU2l6ZSA9IG1f
bGF5ZXJSZW5kZXJlci0+bWF4VGV4dHVyZVNpemUoKTsKLSAgICBtX2Jlc3RUZXh0dXJlRm9ybWF0
ID0gUGxhdGZvcm1Db2xvcjo6YmVzdFRleHR1cmVGb3JtYXQobV9sYXllclJlbmRlcmVyLT5jb250
ZXh0KCkpOwotICAgIG1fY29udGV4dFN1cHBvcnRzTWFwU3ViID0gbV9sYXllclJlbmRlcmVyLT5j
b250ZXh0U3VwcG9ydHNNYXBTdWIoKTsKKyAgICAvLyBVcGRhdGUgbV9zZXR0aW5ncyBiYXNlZCBv
biBjYXBhYmlsaXRpZXMgdGhhdCB3ZSBnb3QgYmFjayBmcm9tIHRoZSByZW5kZXJlci4KKyAgICBt
X3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IG1fcHJveHktPmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoKS51c2luZ0FjY2VsZXJhdGVkUGFpbnRpbmc7CiAKICAgICBtX3Jvb3RMYXllciA9
IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZSgwKTsKICNpZm5kZWYgTkRFQlVHCkBAIC03NywxMiArODEs
OCBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6aW5pdGlhbGl6ZSgpCiAKICAgICBtX3Jvb3RMYXll
ci0+YWRkQ2hpbGQobV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmdyYXBoaWNzTGF5ZXIoKSk7
CiAKLQotI2lmIFVTRShUSFJFQURFRF9DT01QT1NJVElORykKLSAgICBtX3Byb3h5ID0gQ0NMYXll
clRyZWVIb3N0SW1wbFByb3h5OjpjcmVhdGUodGhpcyk7Ci0gICAgQVNTRVJUKG1fcHJveHktPmlz
U3RhcnRlZCgpKTsKKyAgICAvLyBXZSBjaGFuZ2VkIHRoZSByb290IGxheWVyLiBUZWxsIHRoZSBw
cm94eSBhIGNvbW1pdCBpcyBuZWVkZWQuCiAgICAgbV9wcm94eS0+c2V0TmVlZHNDb21taXRBbmRS
ZWRyYXcoKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC05MCw2MiArOTAsODUg
QEAgYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmluaXRpYWxpemUoKQogQ0NMYXllclRyZWVIb3N0Ojp+
Q0NMYXllclRyZWVIb3N0KCkKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp+
Q0NMYXllclRyZWVIb3N0IiwgdGhpcywgMCk7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQogICAgIG1fcHJveHktPnN0b3AoKTsKICAgICBtX3Byb3h5LmNsZWFyKCk7Ci0jZW5kaWYKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmJlZ2luQ29tbWl0KCkKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBtX2Fu
aW1hdGluZyA9IHRydWU7CisgICAgbV9jbGllbnQtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVCZWdp
blRpbWUpOworICAgIG1fYW5pbWF0aW5nID0gZmFsc2U7Cit9CisKK3ZvaWQgQ0NMYXllclRyZWVI
b3N0OjpwcmVDb21taXQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CisgICAgaG9z
dEltcGwtPnNldFZpc2libGUobV92aXNpYmxlKTsKKyAgICBob3N0SW1wbC0+c2V0Vmlld3BvcnQo
dmlld3BvcnRTaXplKCkpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0Q29tcGxl
dGUoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdEltcGwq
IGhvc3RJbXBsKQogeworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CisgICAg
VFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKKyAgICBo
b3N0SW1wbC0+c2V0U291cmNlRnJhbWVOdW1iZXIoZnJhbWVOdW1iZXIoKSk7CisKKyAgICAvLyBT
eW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwuLi4KKyAgICBpZiAocm9vdExh
eWVyKCkpIHsKKyAgICAgICAgLy8gVGhlIGxheWVyUmVuZGVyZXIgbmVlZHMgdG8gYmUgc2V0IHNv
IHRoYXQgY2hpbGQgbGF5ZXJzIHBpY2sgdXAgdGhlIGxheWVyUmVuZGVyZXIKKyAgICAgICAgLy8g
YXMgd2VsbCBkdXJpbmcgdGhlIHN5bmNocm9uaXplIHN0ZXAuCisgICAgICAgIGlmIChyb290TGF5
ZXIoKS0+cGxhdGZvcm1MYXllcigpLT5sYXllclJlbmRlcmVyKCkgIT0gaG9zdEltcGwtPmxheWVy
UmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUoaG9zdEltcGwtPmxheWVyUmVuZGVyZXIoKSk7CisKKyAg
ICAgICAgaG9zdEltcGwtPnNldFJvb3RMYXllcihUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6
ZVRyZWVzKHJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCksIGhvc3RJbXBsLT5yb290TGF5ZXIo
KSkpOworICAgIH0gZWxzZQorICAgICAgICBob3N0SW1wbC0+c2V0Um9vdExheWVyKDApOworCiAg
ICAgbV9mcmFtZU51bWJlcisrOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFu
ZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCitQYXNzT3duUHRyPENDVGhyZWFkPiBDQ0xh
eWVyVHJlZUhvc3Q6OmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKQogewotICAgIG1fYW5pbWF0aW5n
ID0gdHJ1ZTsKLSAgICBtX2NsaWVudC0+YW5pbWF0ZUFuZExheW91dChmcmFtZUJlZ2luVGltZSk7
Ci0gICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmNyZWF0ZUNv
bXBvc2l0b3JUaHJlYWQoKTsKIH0KIAotUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RDb21taXR0
ZXI+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbW1pdHRlcigpCitQYXNz
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyVHJl
ZUhvc3RDb250ZXh0M0QoKQogewotICAgIC8vIEZJWE1FOiBvbmx5IGNhbGxlZCBpbiB0aHJlYWRp
bmcgY2FzZSwgZml4IHdoZW4gcG9zc2libGUuCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIG1fY2xpZW50LT5jcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiB9CiAKLVBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRy
ZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGllbnQpCitQYXNzT3duUHRy
PENDTGF5ZXJUcmVlSG9zdEltcGw+IENDTGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKQogewotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKG1f
bGF5ZXJSZW5kZXJlcik7Ci0gICAgcmV0dXJuIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShj
bGllbnQsIHJlbmRlcmVyKTsKKyAgICByZXR1cm4gQ0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRl
KG1fc2V0dGluZ3MpOwogfQogCi1HcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0Ojpj
b250ZXh0KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4
dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgp
OworICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKIH0K
IAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYgcmVjdCkKKyNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnNjaGVkdWxlQ29tcG9zaXRlKCkKIHsKLSNpZiBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi0gICAgLy8gRklYTUU6IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMu
Ci0jZWxzZQotICAgIGNvbXBvc2l0ZShmYWxzZSk7Ci0gICAgbV9sYXllclJlbmRlcmVyLT5nZXRG
cmFtZWJ1ZmZlclBpeGVscyhwaXhlbHMsIHJlY3QpOworICAgIG1fY2xpZW50LT5zY2hlZHVsZUNv
bXBvc2l0ZSgpOworfQogI2VuZGlmCisKKy8vIFRlbXBvcmFyeSBoYWNrIHVudGlsIFdlYlZpZXdJ
bXBsIGNvbnRleHQgY3JlYXRpb24gZ2V0cyBzaW1wbGlmaWVkCitHcmFwaGljc0NvbnRleHQzRCog
Q0NMYXllclRyZWVIb3N0Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoIW1fc2V0dGluZ3MuZW5h
YmxlQ29tcG9zaXRvclRocmVhZCk7CisgICAgcmV0dXJuIG1fcHJveHktPmNvbnRleHQoKTsKK30K
KworYm9vbCBDQ0xheWVyVHJlZUhvc3Q6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVs
cywgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gbV9wcm94eS0+Y29tcG9zaXRl
QW5kUmVhZGJhY2socGl4ZWxzLCByZWN0KTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmZp
bmlzaEFsbFJlbmRlcmluZygpCiB7Ci0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotICAg
IC8vIEZJWE1FOiBuZWVkIHRvIGltcGxlbWVudCB0aGlzLgotI2Vsc2UKLSAgICBtX2xheWVyUmVu
ZGVyZXItPmZpbmlzaCgpOwotI2VuZGlmCisgICAgbV9wcm94eS0+ZmluaXNoQWxsUmVuZGVyaW5n
KCk7CiB9CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChj
b25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCkBAIC0xNTMsNiArMTc2LDExIEBAIHZvaWQgQ0NMYXll
clRyZWVIb3N0OjppbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJl
Y3QpCiAgICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVSZWN0KGRpcnR5
UmVjdCk7CiB9CiAKK2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVl
SG9zdDo6bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJveHktPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsKK30KKwogdm9pZCBDQ0xheWVyVHJl
ZUhvc3Q6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKIHsKICNpZiBVU0UoVEhSRUFERURfQ09N
UE9TSVRJTkcpCkBAIC0xNzcsMTMgKzIwNSwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6c2V0
Um9vdExheWVyKEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIG1fbm9uQ29tcG9zaXRlZENv
bnRlbnRIb3N0LT5ncmFwaGljc0xheWVyKCktPnJlbW92ZUFsbENoaWxkcmVuKCk7CiAgICAgbV9u
b25Db21wb3NpdGVkQ29udGVudEhvc3QtPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgIGlm
IChsYXllcikgeworICAgIGlmIChsYXllcikKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29udGVu
dEhvc3QtPmdyYXBoaWNzTGF5ZXIoKS0+YWRkQ2hpbGQobGF5ZXIpOwotICAgICAgICBsYXllci0+
cGxhdGZvcm1MYXllcigpLT5zZXRMYXllclJlbmRlcmVyKG1fbGF5ZXJSZW5kZXJlci5nZXQoKSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGxheWVyUmVuZGVyZXIoKS0+Y2xlYXJSb290Q0NMYXllcklt
cGwoKTsKK30KIAorI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBDQ0xheWVyVHJlZUhvc3Q6OnNr
aWFDb250ZXh0KCkKK3sKKyAgICBBU1NFUlQobV9zZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcp
OworICAgIHJldHVybiBtX3Byb3h5LT5za2lhQ29udGV4dCgpOwogfQorI2VuZGlmCiAKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUs
IGNvbnN0IEludFNpemUmIGNvbnRlbnRzU2l6ZSwgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0
aW9uKQogewpAQCAtMTkzLDExNCArMjI1LDMzIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpzZXRW
aWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IEludFNpemUmIGNvCiAg
ICAgbV9ub25Db21wb3NpdGVkQ29udGVudEhvc3QtPnNldFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uKTsKICAgICBtX25vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC0+Z3JhcGhpY3NMYXllcigp
LT5zZXRTaXplKGNvbnRlbnRzU2l6ZSk7CiAKLSAgICBpZiAodmlzaWJsZVJlY3RDaGFuZ2VkKSB7
CisgICAgaWYgKHZpc2libGVSZWN0Q2hhbmdlZCkKICAgICAgICAgbV9ub25Db21wb3NpdGVkQ29u
dGVudEhvc3QtPmludmFsaWRhdGVFbnRpcmVMYXllcigpOwotICAgICAgICBpZiAobV9sYXllclJl
bmRlcmVyKQotICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyLT52aWV3cG9ydENoYW5nZWQoKTsK
LSAgICB9CiAKICAgICBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwogfQogCiB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6c2V0VmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0jaWYgIVVTRShUSFJFQURF
RF9DT01QT1NJVElORykKLSAgICBpZiAoIXZpc2libGUpCi0gICAgICAgIG1fbGF5ZXJSZW5kZXJl
ci0+cmVsZWFzZVRleHR1cmVzKCk7Ci0jZW5kaWYKKyAgICBtX3Zpc2libGUgPSB2aXNpYmxlOwor
ICAgIG1fcHJveHktPnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CiB9CiAKLVBhc3NSZWZQdHI8
TGF5ZXJSZW5kZXJlckNocm9taXVtPiBDQ0xheWVyVHJlZUhvc3Q6OmNyZWF0ZUxheWVyUmVuZGVy
ZXIoKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxvc2VDb21wb3NpdG9yQ29udGV4dCgpCiB7Ci0g
ICAgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSBtaWdodCBmYWlsIGFuZCByZXR1cm4gMCwg
aW4gdGhhdCBjYXNlIGZhbGwgYmFjayB0byBzb2Z0d2FyZS4KLSAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBtX2NsaWVudC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQz
RCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBBY3R1
YWxseSBjcmVhdGUgdGhlIHJlbmRlcmVyLgotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21p
dW0+IGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZSh0aGlzLCBj
b250ZXh0KTsKLQotICAgIC8vIElmIGNyZWF0aW9uIGZhaWxlZCwgYW5kIHdlIGhhZCBhc2tlZCBm
b3IgYWNjZWxlcmF0ZWQgcGFpbnRpbmcsIGRpc2FibGUgYWNjZWxlcmF0ZWQgcGFpbnRpbmcKLSAg
ICAvLyBhbmQgdHJ5IGNyZWF0aW5nIHRoZSByZW5kZXJlciBhZ2Fpbi4KLSAgICBpZiAobV9zZXR0
aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgJiYgIWxheWVyUmVuZGVyZXIpIHsKLSAgICAgICAgbV9z
ZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRpbmcgPSBmYWxzZTsKLSAgICAgICAgbGF5ZXJSZW5kZXJl
ciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRlKHRoaXMsIGNvbnRleHQpOwotICAgIH0K
LQotICAgIHJldHVybiBsYXllclJlbmRlcmVyOworICAgIG1fcHJveHktPmxvc2VDb21wb3NpdG9y
Q29udGV4dCgpOwogfQogCiBUZXh0dXJlTWFuYWdlciogQ0NMYXllclRyZWVIb3N0Ojpjb250ZW50
c1RleHR1cmVNYW5hZ2VyKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBjbGFzcyBzaG91
bGQgb3duIHRoZSBjb250ZW50cyB0ZXh0dXJlIG1hbmFnZXIKLSAgICBpZiAoIW1fbGF5ZXJSZW5k
ZXJlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29u
dGVudHNUZXh0dXJlTWFuYWdlcigpOworICAgIHJldHVybiBtX3Byb3h5LT5jb250ZW50c1RleHR1
cmVNYW5hZ2VyKCk7CiB9CiAKICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmRvQ29tcG9zaXRlKCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21w
b3NpdGUoKQogewotI2lmbmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6
OnNldEltcGxUaHJlYWQodHJ1ZSk7Ci0jZW5kaWYKLSAgICBBU1NFUlQobV9sYXllclJlbmRlcmVy
KTsKLSAgICBtX2xheWVyUmVuZGVyZXItPnVwZGF0ZUxheWVycygpOwotICAgIG1fbGF5ZXJSZW5k
ZXJlci0+ZHJhd0xheWVycygpOwotI2lmbmRlZiBOREVCVUcKLSAgICBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ0NMYXll
clRyZWVIb3N0Ojpjb21wb3NpdGUoYm9vbCBmaW5pc2gpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlIiwgdGhpcywgMCk7Ci0KLSAgICBpZiAobV9yZWNyZWF0
aW5nR3JhcGhpY3NDb250ZXh0KSB7Ci0gICAgICAgIC8vIHJlYWxsb2NhdGVSZW5kZXJlciB3aWxs
IHJlcXVlc3QgYSByZXBhaW50IHdoZXRoZXIgb3Igbm90IGl0IHN1Y2NlZWRlZAotICAgICAgICAv
LyBpbiBjcmVhdGluZyBhIG5ldyBjb250ZXh0LgotICAgICAgICByZWFsbG9jYXRlUmVuZGVyZXIo
KTsKLSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gZmFsc2U7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBEbyBub3QgY29tcG9zaXRlIGlmIHRoZSBjb21wb3Np
dG9yIGNvbnRleHQgaXMgYWxyZWFkeSBsb3N0LgotICAgIGlmICghbV9sYXllclJlbmRlcmVyLT5p
c0NvbXBvc2l0b3JDb250ZXh0TG9zdCgpKSB7Ci0gICAgICAgIGRvQ29tcG9zaXRlKCk7Ci0KLSAg
ICAgICAgLy8gUHV0IHJlc3VsdCBvbnNjcmVlbi4KLSAgICAgICAgbV9sYXllclJlbmRlcmVyLT5w
cmVzZW50KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlci0+aXNDb21wb3NpdG9y
Q29udGV4dExvc3QoKSkgewotICAgICAgICAvLyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4
dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsgaWYgR1BVIHByb2Nlc3MKLSAgICAgICAgLy8gZGll
ZC4gVGhpcyBpcyBiZWNhdXNlIEdwdUNoYW5uZWxIb3N0OjpPbkVycm9yTWVzc2FnZSB3aWxsIG9u
bHkgYmUKLSAgICAgICAgLy8gY2FsbGVkIGF0IHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgbWVz
c2FnZSBsb29wLCByZXZlcnRpbmcgb3VyCi0gICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhl
cmUuIEluc3RlYWQsIHdlIGRldGFjaCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQotICAgICAgICAv
LyByZW5kZXJlciwgcmVjcmVhdGUgdGhlIHJlbmRlcmVyIGF0IHRoZSBuZXh0IG1lc3NhZ2UgbG9v
cCBpdGVyYXRpb24KLSAgICAgICAgLy8gYW5kIHJlcXVlc3QgYSByZXBhaW50IHlldCBhZ2Fpbi4K
LSAgICAgICAgbV9yZWNyZWF0aW5nR3JhcGhpY3NDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgc2V0
TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKLSAgICB9Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0
Ojpsb3NlQ29tcG9zaXRvckNvbnRleHQoKQotewotICAgIG1fcmVjcmVhdGluZ0dyYXBoaWNzQ29u
dGV4dCA9IHRydWU7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0OjpyZWFsbG9jYXRlUmVuZGVy
ZXIoKQotewotICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGxheWVyUmVuZGVyZXIg
PSBjcmVhdGVMYXllclJlbmRlcmVyKCk7Ci0gICAgaWYgKCFsYXllclJlbmRlcmVyKSB7Ci0gICAg
ICAgIG1fY2xpZW50LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChmYWxzZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXllclJlbmRlcmVyLT5zZXRMYXllclJlbmRlcmVyUmVj
dXJzaXZlKG1fcm9vdExheWVyLT5wbGF0Zm9ybUxheWVyKCkpOwotICAgIG1fbGF5ZXJSZW5kZXJl
ciA9IGxheWVyUmVuZGVyZXI7Ci0KLSAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0Nv
bnRleHQodHJ1ZSk7CisgICAgQVNTRVJUKCFtX3NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJl
YWQpOworICAgIHN0YXRpY19jYXN0PENDU2luZ2xlVGhyZWFkUHJveHkqPihtX3Byb3h5LmdldCgp
KS0+Y29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKIH0KICNlbmRpZiAvLyAhVVNFKFRIUkVBREVEX0NP
TVBPU0lUSU5HKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDk5YjhiZjIwOTRk
ODM2NDE0ODNiNDlkOTNjNjkwZmIxZWFiYWU4YzYuLjVmOWNiNzA5ODFlNGY1MzQxOThjNWJjMmVl
NzFiNWI1OTY5OTkwOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yNywxNyAr
MjcsMTkgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCIKLSNpbmNsdWRl
ICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CiAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAorI2lmIFVTRShTS0lBKQorY2xhc3Mg
R3JDb250ZXh0OworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXll
clRyZWVIb3N0SW1wbDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CiBjbGFzcyBD
Q1RocmVhZDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsK
QEAgLTY1LDM1ICs2Nyw2NCBAQCBzdHJ1Y3QgQ0NTZXR0aW5ncyB7CiAgICAgQ0NTZXR0aW5ncygp
CiAgICAgICAgICAgICA6IGFjY2VsZXJhdGVQYWludGluZyhmYWxzZSkKICAgICAgICAgICAgICwg
Y29tcG9zaXRlT2Zmc2NyZWVuKGZhbHNlKQorICAgICAgICAgICAgLCBlbmFibGVDb21wb3NpdG9y
VGhyZWFkKGZhbHNlKQogICAgICAgICAgICAgLCBzaG93RlBTQ291bnRlcihmYWxzZSkKICAgICAg
ICAgICAgICwgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlKGZhbHNlKSB7IH0KIAogICAgIGJvb2wgYWNj
ZWxlcmF0ZVBhaW50aW5nOwogICAgIGJvb2wgY29tcG9zaXRlT2Zmc2NyZWVuOworICAgIGJvb2wg
ZW5hYmxlQ29tcG9zaXRvclRocmVhZDsKICAgICBib29sIHNob3dGUFNDb3VudGVyOwogICAgIGJv
b2wgc2hvd1BsYXRmb3JtTGF5ZXJUcmVlOwogfTsKIAorLy8gUHJvdmlkZXMgaW5mb3JtYXRpb24g
b24gYW4gSW1wbCdzIHJlbmRlcmluZyBjYXBhYmlsaXRpZXMgYmFjayB0byB0aGUgQ0NMYXllclRy
ZWVIb3N0CitzdHJ1Y3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyB7CisgICAgTGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpCisgICAgICAgIDogYmVzdFRleHR1cmVGb3JtYXQoMCkKKyAgICAg
ICAgLCB1c2luZ01hcFN1YihmYWxzZSkKKyAgICAgICAgLCB1c2luZ0FjY2VsZXJhdGVkUGFpbnRp
bmcoZmFsc2UpCisgICAgICAgICwgbWF4VGV4dHVyZVNpemUoMCkgeyB9CisKKyAgICBHQzNEZW51
bSBiZXN0VGV4dHVyZUZvcm1hdDsKKyAgICBib29sIHVzaW5nTWFwU3ViOworICAgIGJvb2wgdXNp
bmdBY2NlbGVyYXRlZFBhaW50aW5nOworICAgIGludCBtYXhUZXh0dXJlU2l6ZTsKK307CisKIGNs
YXNzIENDTGF5ZXJUcmVlSG9zdCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJUcmVlSG9zdD4g
ewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJUcmVlSG9zdD4gY3JlYXRl
KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICB2aXJ0dWFs
IH5DQ0xheWVyVHJlZUhvc3QoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0
KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7Ci0gICAgdmlydHVhbCB2b2lkIGJlZ2luQ29tbWl0KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNvbW1pdENvbXBsZXRlKCk7Ci0KLSAgICB2aXJ0dWFsIFBhc3NP
d25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCopOwotICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJl
ZUhvc3RDb21taXR0ZXI+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb21taXR0ZXIoKTsKKyAgICAvLyBD
Q0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCisgICAgdm9pZCBhbmltYXRlQW5k
TGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSk7CisgICAgdm9pZCBwcmVDb21taXQoQ0NMYXll
clRyZWVIb3N0SW1wbCopOyAvLyBUZW1wb3JhcnkgaGFjayB1bnRpbCBDQ0xheWVyVHJlZUhvc3RJ
bXBsOjp1cGRhdGVMYXllcnMgaXMgc3BsaXQgYXBhcnQuCisgICAgdm9pZCBjb21taXRUbyhDQ0xh
eWVyVHJlZUhvc3RJbXBsKik7CisgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9z
aXRvclRocmVhZCgpOworICAgIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxh
eWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdElt
cGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCk7CisgICAgdm9pZCBkaWRSZWNyZWF0ZUdyYXBo
aWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOworI2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcp
CisgICAgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpOworI2VuZGlmCiAKKyAgICAvLyBDQ0xheWVy
VHJlZUhvc3QgaW50ZXJmYWNlIHRvIFdlYlZpZXcuCiAgICAgYm9vbCBhbmltYXRpbmcoKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgYW5p
bWF0aW5nKSB7IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9IC8vIENhbiBiZSByZW1vdmVkIHdo
ZW4gbm9uLXRocmVhZGVkIHNjaGVkdWxpbmcgbW92ZXMgaW5zaWRlLgogCiAgICAgQ0NMYXllclRy
ZWVIb3N0Q2xpZW50KiBjbGllbnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCisjaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZSgpOworI2VuZGlmCisKICAg
ICBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpOwogCi0gICAgdm9pZCBjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKKyAgICAvLyBDb21wb3NpdGVz
IGFuZCBhdHRlbXB0cyB0byByZWFkIGJhY2sgdGhlIHJlc3VsdCBpbnRvIHRoZSBwcm92aWRlZAor
ICAgIC8vIGJ1ZmZlci4gSWYgaXQgd2Fzbid0IHBvc3NpYmxlLCBlLmcuIGR1ZSB0byBjb250ZXh0
IGxvc3QsIHdpbGwgcmV0dXJuCisgICAgLy8gZmFsc2UuCisgICAgYm9vbCBjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKIAogICAgIHZvaWQgZmluaXNo
QWxsUmVuZGVyaW5nKCk7CiAKQEAgLTEwMSw2ICsxMzIsMTEgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBpbnZhbGlkYXRlUm9vdExheWVyUmVjdChjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOwogCisg
ICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcygpIGNvbnN0OworCisgICAgLy8gVGVzdC1vbmx5IGhvb2sKKyAgICB2b2lkIGxvc2VDb21w
b3NpdG9yQ29udGV4dCgpOworCiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwog
ICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKIApAQCAtMTEwLDYgKzE0NiwxMiBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
dGluZ3M7IH0KIAorICAgIC8vIEhvcnJpYmxlIHVnbHkgaGFjayB0byBhbGxvdyBtYWluIHRocmVh
ZGVkIGNvZGUgdG8gZ2V0IHRvIHRoZSBHckNvbnRleHQKKyAgICAvLyBmb3IgYWNjZWxlcmF0ZWQg
cGFpbnRpbmcuIFJlbW92ZSB0aGlzIEFTQVAuCisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0
KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKICAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGVudHNTaXplLCBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pOwogCiAgICAgY29uc3QgSW50U2l6ZSYgdmlld3BvcnRT
aXplKCkgY29uc3QgeyByZXR1cm4gbV92aWV3cG9ydFNpemU7IH0KQEAgLTExNywyMSArMTU5LDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRWaXNpYmxlKGJvb2wpOwogCi0gICAgLy8gVGVtcG9y
YXJ5IGhvbWUgZm9yIHRoZSBub24tdGhyZWFkZWQgcmVuZGVyaW5nIHBhdGguCi0jaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKLSAgICB2b2lkIGNvbXBvc2l0ZShib29sIGZpbmlzaCk7Ci0K
LSAgICB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOwotCi0gICAgTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlbmRlcmVyLmdl
dCgpOyB9Ci0jZW5kaWYKLQogICAgIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdCogbm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0KCkgY29uc3QgeyByZXR1cm4gbV9ub25Db21wb3NpdGVkQ29udGVudEhv
c3QuZ2V0KCk7IH0KIAotICAgIGJvb2wgY29udGV4dFN1cHBvcnRzTWFwU3ViKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0U3VwcG9ydHNNYXBTdWI7IH0KLSAgICBpbnQgbWF4VGV4dHVyZVNpemUo
KSBjb25zdCB7IHJldHVybiBtX21heFRleHR1cmVTaXplOyB9Ci0gICAgR0MzRGVudW0gYmVzdFRl
eHR1cmVGb3JtYXQoKSB7IHJldHVybiBtX2Jlc3RUZXh0dXJlRm9ybWF0OyB9Ci0KIHByb3RlY3Rl
ZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgY29uc3QgQ0NT
ZXR0aW5ncyYpOwogCkBAIC0xNDAsMjYgKzE2OSwxMyBAQCBwcml2YXRlOgogCiAgICAgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IGNyZWF0ZUxheWVyUmVuZGVyZXIoKTsKIAotICAg
IC8vIFRlbXBvcmFyeSBob21lIGZvciB0aGUgbm9uLXRocmVhZGVkIHJlbmRlcmluZyBwYXRoLgot
I2lmICFVU0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCi0gICAgdm9pZCBkb0NvbXBvc2l0ZSgpOwot
ICAgIHZvaWQgcmVhbGxvY2F0ZVJlbmRlcmVyKCk7Ci0KLSAgICBib29sIG1fcmVjcmVhdGluZ0dy
YXBoaWNzQ29udGV4dDsKLSAgICBSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xheWVy
UmVuZGVyZXI7Ci0jZW5kaWYKLQotICAgIGludCBtX21heFRleHR1cmVTaXplOwotICAgIEdDM0Rl
bnVtIG1fYmVzdFRleHR1cmVGb3JtYXQ7Ci0gICAgYm9vbCBtX2NvbnRleHRTdXBwb3J0c01hcFN1
YjsKLQogICAgIGJvb2wgbV9hbmltYXRpbmc7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQq
IG1fY2xpZW50OwogCiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKLSAgICBPd25QdHI8Q0NMYXll
clRyZWVIb3N0SW1wbFByb3h5PiBtX3Byb3h5OworICAgIE93blB0cjxDQ1Byb3h5PiBtX3Byb3h5
OwogCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fcm9vdExheWVyOwogICAgIE93blB0cjxO
b25Db21wb3NpdGVkQ29udGVudEhvc3Q+IG1fbm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OwpAQCAt
MTY3LDYgKzE4Myw3IEBAIHByaXZhdGU6CiAgICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwogCiAg
ICAgSW50U2l6ZSBtX3ZpZXdwb3J0U2l6ZTsKKyAgICBib29sIG1fdmlzaWJsZTsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmRkNzE0YmU3ZTM4NGM4ZWY5ZTEwOTI0ZmY1Y2QyMDU4
Njk5YmVhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RD
b21taXR0ZXIuaCIKLQotI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgotI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNz
T3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gQ0NMYXllclRyZWVIb3N0Q29tbWl0dGVy
OjpjcmVhdGUoKQotewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyKCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcjo6Y29tbWl0KEND
TGF5ZXJUcmVlSG9zdCogaG9zdCwgQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCi17Ci0g
ICAgaG9zdEltcGwtPnNldFNvdXJjZUZyYW1lTnVtYmVyKGhvc3QtPmZyYW1lTnVtYmVyKCkpOwot
fQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21taXR0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1pdHRlci5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzMxOGE0YTcxNDIzMmQzMTg0ZDJmZWQ0YWQ4MDk1
MTc1ODNjYzk5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBDQ0xheWVyVHJlZUhvc3RDb21taXR0ZXJfaAotI2RlZmluZSBDQ0xheWVy
VHJlZUhvc3RDb21taXR0ZXJfaAotCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
Q0xheWVyVHJlZUhvc3Q7Ci1jbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwotCi0vLyBGSVhNRTog
bWVyZ2UgaW4gVHJlZVN5bmNocm9uaXplciBjb2RlIGludG8gaGVyZQotY2xhc3MgQ0NMYXllclRy
ZWVIb3N0Q29tbWl0dGVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0xheWVyVHJlZUhv
c3RDb21taXR0ZXIpOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5ZXJUcmVl
SG9zdENvbW1pdHRlcj4gY3JlYXRlKCk7Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0Q29t
bWl0dGVyKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KENDTGF5ZXJUcmVlSG9zdCos
IENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKLQotcHJvdGVjdGVkOgotICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1pdHRlcigpIHsgfQotfTsKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKaW5kZXggNGUyZDFiODQzYzE4MzJjZmFmYTE0MzU0ODYyY2JmYTE1
Mzg2NjlhZS4uNDNjNzQ1NmNmOGY3YjM3MzhjZDQ1MzY5Mzg5OTljZTRhNzhhM2I1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTM4LDI0ICszOCwyMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4g
Q0NMYXllclRyZWVIb3N0SW1wbDo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQqIGNs
aWVudCwgUGFzc1JlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+IHJlbmRlcmVyKQorUGFzc093
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoY29u
c3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ0xh
eWVyVHJlZUhvc3RJbXBsKGNsaWVudCwgcmVuZGVyZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQdHIo
bmV3IENDTGF5ZXJUcmVlSG9zdEltcGwoc2V0dGluZ3MpKTsKIH0KIAotQ0NMYXllclRyZWVIb3N0
SW1wbDo6Q0NMYXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiBjbGll
bnQsIFBhc3NSZWZQdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiByZW5kZXJlcikKK0NDTGF5ZXJU
cmVlSG9zdEltcGw6OkNDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGlu
Z3MpCiAgICAgOiBtX3NvdXJjZUZyYW1lTnVtYmVyKC0xKQogICAgICwgbV9mcmFtZU51bWJlcigw
KQotICAgICwgbV9jbGllbnQoY2xpZW50KQotICAgICwgbV9jb21taXRQZW5kaW5nKGZhbHNlKQot
ICAgICwgbV9sYXllclJlbmRlcmVyKHJlbmRlcmVyKQotICAgICwgbV9yZWRyYXdQZW5kaW5nKGZh
bHNlKQorICAgICwgbV9zZXR0aW5ncyhzZXR0aW5ncykKIHsKIH0KIAogQ0NMYXllclRyZWVIb3N0
SW1wbDo6fkNDTGF5ZXJUcmVlSG9zdEltcGwoKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsOjp+Q0NMYXllclRyZWVIb3N0SW1wbCgpIiwgdGhpcywgMCk7CisgICAgaWYg
KG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT5jbG9zZSgpOwogfQog
CiB2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OmJlZ2luQ29tbWl0KCkKQEAgLTY0LDcxICs2Mywx
MDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiZWdpbkNvbW1pdCgpCiAKIHZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbDo6Y29tbWl0Q29tcGxldGUoKQogewotICAgIG1fY29tbWl0UGVuZGlu
ZyA9IGZhbHNlOwotICAgIHNldE5lZWRzUmVkcmF3KCk7CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVI
b3N0SW1wbDo6ZHJhd0xheWVycygpCitHcmFwaGljc0NvbnRleHQzRCogQ0NMYXllclRyZWVIb3N0
SW1wbDo6Y29udGV4dCgpCiB7Ci0gICAgLy8gSWYgYSBjb21taXQgaXMgcGVuZGluZywgZG8gbm90
IGRyYXcuIFRoaXMgaXMgYSB0ZW1wb3JhcnkgcmVzdHJpY3Rpb24gdGhhdAotICAgIC8vIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIGRyYXdMYXllcnMgaXMgY3VycmVudGx5IGEgYmxvY2tpbmcgb3BlcmF0
aW9uIG9uIHRoZSBtYWluIHRocmVhZC4KLSAgICBpZiAobV9jb21taXRQZW5kaW5nKQotICAgICAg
ICByZXR1cm47CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlciA/IG1fbGF5ZXJSZW5kZXJlci0+
Y29udGV4dCgpIDogMDsKK30KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpkcmF3TGF5ZXJz
KCkKK3sKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVycyIs
IHRoaXMsIDApOwotICAgIEFTU0VSVChtX3JlZHJhd1BlbmRpbmcpOwotICAgIG1fcmVkcmF3UGVu
ZGluZyA9IGZhbHNlOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIpOworICAgIGlmIChtX2xh
eWVyUmVuZGVyZXItPm93bmVyKCktPnJvb3RMYXllcigpKQorICAgICAgICBtX2xheWVyUmVuZGVy
ZXItPmRyYXdMYXllcnMoKTsKIAotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdEltcGw6OmRyYXdMYXllcnNBbmRQcmVzZW50IiwgdGhpcywgMCk7Ci0gICAgICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247Ci0gICAgICAgIGJvb2wgY29udGV4dExvc3Q7Ci0g
ICAgICAgIENDTWFpblRocmVhZDo6cG9zdFRhc2soY3JlYXRlTWFpblRocmVhZFRhc2sodGhpcywg
JkNDTGF5ZXJUcmVlSG9zdEltcGw6OmRyYXdMYXllcnNPbk1haW5UaHJlYWQsIEFsbG93Q3Jvc3NU
aHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb250ZXh0
TG9zdCkpKTsKLSAgICAgICAgY29tcGxldGlvbi53YWl0KCk7CisgICAgKyttX2ZyYW1lTnVtYmVy
OworfQogCi0gICAgICAgIC8vIEZJWE1FOiBTZW5kIHRoZSAiVXBkYXRlUmVjdCIgbWVzc2FnZSB1
cCB0byB0aGUgUmVuZGVyV2lkZ2V0IFtvciBtb3ZlcGx1Z2luIGVxdWl2YWxlbnRzLi4uXQordm9p
ZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpmaW5pc2hBbGxSZW5kZXJpbmcoKQoreworICAgIG1fbGF5
ZXJSZW5kZXJlci0+ZmluaXNoKCk7Cit9CiAKLSAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBjb250
ZXh0IGxvc3QKLSAgICAgICAgaWYgKGNvbnRleHRMb3N0KQotICAgICAgICAgICAgRkFUQUwoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bUltcGwgZG9lcyBub3QgaGFuZGxlIGNvbnRleHQgbG9zdCB5ZXQu
Iik7Ci0gICAgfQorYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppc0NvbnRleHRMb3N0KCkKK3sK
KyAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyKTsKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVy
LT5pc0NvbnRleHRMb3N0KCk7Cit9CiAKLSAgICArK21fZnJhbWVOdW1iZXI7Citjb25zdCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyLT5jYXBh
YmlsaXRpZXMoKTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1p
dEFuZFJlZHJhdygpCit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnByZXNlbnQoKQogewotICAg
IFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
dyIsIHRoaXMsIDApOworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4dExv
c3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5wcmVzZW50KCk7Cit9CiAKLSAgICAvLyBGSVhN
RTogbW92ZSB0aGUgcmVxdWVzdEZyYW1lQW5kQ29tbWl0IG91dCBmcm9tIGhlcmUgb25jZSB3ZSBh
ZGQgZnJhbWVyYXRlIHRocm90dGxpbmcvYW5pbWF0aW9uCi0gICAgZG91YmxlIGZyYW1lQmVnaW5U
aW1lID0gY3VycmVudFRpbWUoKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0cnVlOwotICAgIG1f
Y2xpZW50LT5yZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGZyYW1lQmVnaW5UaW1lKTsK
K3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cmVhZGJhY2sodm9pZCogcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVChtX2xheWVyUmVuZGVyZXIgJiYgIWlzQ29udGV4
dExvc3QoKSk7CisgICAgbV9sYXllclJlbmRlcmVyLT5nZXRGcmFtZWJ1ZmZlclBpeGVscyhwaXhl
bHMsIHJlY3QpOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnNldE5lZWRzUmVkcmF3
KCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Um9vdExheWVyKFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IGxheWVyKQogewotICAgIGlmIChtX3JlZHJhd1BlbmRpbmcgfHwgbV9jb21taXRQ
ZW5kaW5nKQotICAgICAgICByZXR1cm47CisgICAgbV9yb290TGF5ZXJJbXBsID0gbGF5ZXI7Cit9
CiAKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0TmVlZHNSZWRyYXci
LCB0aGlzLCAwKTsKLSAgICBtX3JlZHJhd1BlbmRpbmcgPSB0cnVlOwotICAgIG1fY2xpZW50LT5w
b3N0RHJhd0xheWVyc1Rhc2tPbkNDVGhyZWFkKCk7Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6
OnNldFZpc2libGUoYm9vbCB2aXNpYmxlKQoreworICAgIGlmIChtX2xheWVyUmVuZGVyZXIgJiYg
IXZpc2libGUpCisgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cmVsZWFzZVRleHR1cmVzKCk7CiB9
CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZHJhd0xheWVyc09uTWFpblRocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbiwgYm9vbCogY29udGV4dExvc3QpCitib29sIENDTGF5
ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKENDTGF5ZXJUcmVlSG9zdCog
aW1wbEhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCiB7Ci0gICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICAvLyBJZiBtX2xheWVyUmVuZGVyZXIgZXhpc3Rz
LCB0aGVuIHdlIGFyZSByZWNvdmVyaW5nIGZyb20gYSBsb3N0IGNvbnRleHQKKyAgICBib29sIHJl
Y3JlYXRpbmdSZW5kZXJlciA9IG1fbGF5ZXJSZW5kZXJlcjsKKworICAgIC8vIEZpcnN0IHRpbWUg
bGF5ZXJSZW5kZXJlciBjcmVhdGlvbgorICAgIFJlZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+
IGxheWVyUmVuZGVyZXI7CisgICAgaWYgKCFyZWNyZWF0aW5nUmVuZGVyZXIpCisgICAgICAgIGxh
eWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNyZWF0ZShpbXBsSGFjaywgdGhp
cywgY29udGV4dCk7CisgICAgZWxzZQorICAgICAgICBsYXllclJlbmRlcmVyID0gTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjcmVhdGUobV9sYXllclJlbmRlcmVyLT5vd25lcigpLCB0aGlzLCBjb250
ZXh0KTsKKworCisgICAgLy8gSWYgY3JlYXRpb24gZmFpbGVkLCBhbmQgd2UgaGFkIGFza2VkIGZv
ciBhY2NlbGVyYXRlZCBwYWludGluZywgZGlzYWJsZSBhY2NlbGVyYXRlZCBwYWludGluZworICAg
IC8vIGFuZCB0cnkgY3JlYXRpbmcgdGhlIHJlbmRlcmVyIGFnYWluLgorICAgIGlmICghbGF5ZXJS
ZW5kZXJlciAmJiBtX3NldHRpbmdzLmFjY2VsZXJhdGVQYWludGluZykgeworICAgICAgICBtX3Nl
dHRpbmdzLmFjY2VsZXJhdGVQYWludGluZyA9IGZhbHNlOworCisgICAgICAgIGlmICghcmVjcmVh
dGluZ1JlbmRlcmVyKQorICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6Y3JlYXRlKGltcGxIYWNrLCB0aGlzLCBjb250ZXh0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbGF5ZXJSZW5kZXJlciA9IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y3JlYXRl
KG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKSwgdGhpcywgY29udGV4dCk7CisgICAgfQogCi0gICAg
aWYgKG1fbGF5ZXJSZW5kZXJlci0+b3duZXIoKS0+cm9vdExheWVyKCkpIHsKLSAgICAgICAgbV9s
YXllclJlbmRlcmVyLT5kcmF3TGF5ZXJzKCk7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+cHJl
c2VudCgpOworICAgIC8vIElmIHJlY3JlYXRpbmcgcmVuZGVyZXIsIHVwZGF0ZSB0aGUgbGF5ZXJz
IHRvIHBvaW50IGF0IHRoZSBuZXcgcmVuZGVyZXIKKyAgICBpZiAobV9sYXllclJlbmRlcmVyKQor
ICAgICAgICBtX2xheWVyUmVuZGVyZXItPnJvb3RMYXllcigpLT5wbGF0Zm9ybUxheWVyKCktPnNl
dExheWVyUmVuZGVyZXJSZWN1cnNpdmUobGF5ZXJSZW5kZXJlci5nZXQoKSk7CiAKLSAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2xheWVyUmVuZGVyZXItPmNvbnRleHQoKTsK
LSAgICAgICAgKmNvbnRleHRMb3N0ID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAg
IH0gZWxzZQotICAgICAgICAqY29udGV4dExvc3QgPSBmYWxzZTsKLSAgICBjb21wbGV0aW9uLT5z
aWduYWwoKTsKKyAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyOworICAgIHJldHVy
biBtX2xheWVyUmVuZGVyZXI7Cit9CisKKy8vIEZJWE1FOiBtb3ZlIGFsbCB0aGlzIGNvZGUgdG8g
Q0NMYXllclRyZWVIb3N0Cit2b2lkIENDTGF5ZXJUcmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycygp
Cit7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKKyAgICAgICAgbV9sYXllclJlbmRlcmVyLT51
cGRhdGVMYXllcnMoKTsKK30KKwordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzZXRWaWV3cG9y
dChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUpCit7CisgICAgYm9vbCBjaGFuZ2VkID0gdmll
d3BvcnRTaXplICE9IG1fdmlld3BvcnRTaXplOworICAgIG1fdmlld3BvcnRTaXplID0gdmlld3Bv
cnRTaXplOworICAgIGlmIChjaGFuZ2VkKQorICAgICAgICBtX2xheWVyUmVuZGVyZXItPnZpZXdw
b3J0Q2hhbmdlZCgpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgK
aW5kZXggYzQxMWNjYzczNTU0ZjFkZDMyYmNjZTJlMTVlNDhkYmVjYWM0YTg4ZS4uZDY4YmI4ZDYw
NzMzOTBlYmQwODRlOTE0Y2FiMDE5MjYxZmE5MDc4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdEltcGwuaApAQCAtMjUsNTYgKzI1LDY5IEBACiAjaWZuZGVmIENDTGF5ZXJUcmVlSG9z
dEltcGxfaAogI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsX2gKIAotI2luY2x1ZGUgImNjL0ND
VGhyZWFkLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCisjaWYg
VVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKK2NsYXNzIENDTGF5ZXJJbXBsOwogY2xhc3Mg
TGF5ZXJSZW5kZXJlckNocm9taXVtOwotCi0vLyBQcm92aWRlcyBzY2hlZHVsaW5nIGluZnJhc3Ry
dWN0dXJlIGZvciBhIENDTGF5ZXJUcmVlSG9zdEltcGwKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdElt
cGxDbGllbnQgIHsKLXB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNr
T25DQ1RocmVhZCgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKLQotcHJvdGVjdGVkOgotICAg
IHZpcnR1YWwgfkNDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQoKSB7IH0KLX07CitzdHJ1Y3QgTGF5
ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25zIHRo
ZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3RhdGUK
IGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEND
TGF5ZXJUcmVlSG9zdEltcGwpOwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1Jl
ZlB0cjxMYXllclJlbmRlcmVyQ2hyb21pdW0+KTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ0xh
eWVyVHJlZUhvc3RJbXBsPiBjcmVhdGUoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIHZpcnR1YWwg
fkNDTGF5ZXJUcmVlSG9zdEltcGwoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdCgp
OwogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZSgpOwogCisgICAgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQoKTsKKwogICAgIHZvaWQgZHJhd0xheWVycygpOwogCisgICAgdm9pZCBm
aW5pc2hBbGxSZW5kZXJpbmcoKTsKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lTnVtYmVyOyB9CiAKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3KCk7Ci0gICAgdm9p
ZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2ssIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+KTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKTsKKyAgICBMYXllclJlbmRlcmVyQ2hy
b21pdW0qIGxheWVyUmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIuZ2V0KCk7IH0K
KyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJp
bGl0aWVzKCkgY29uc3Q7CisKKyAgICB2b2lkIHByZXNlbnQoKTsKKworICAgIHZvaWQgcmVhZGJh
Y2sodm9pZCogcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBDQ0xheWVySW1wbCogcm9v
dExheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yb290TGF5ZXJJbXBsLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRSb290TGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworCisgICAgdm9pZCBzZXRW
aXNpYmxlKGJvb2wpOwogCiAgICAgaW50IHNvdXJjZUZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2VGcmFtZU51bWJlcjsgfQogICAgIHZvaWQgc2V0U291cmNlRnJhbWVOdW1iZXIo
aW50IGZyYW1lTnVtYmVyKSB7IG1fc291cmNlRnJhbWVOdW1iZXIgPSBmcmFtZU51bWJlcjsgfQog
CisgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKKworICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3Qg
SW50U2l6ZSYgdmlld3BvcnRTaXplKTsKKyAgICBjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUo
KSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0U2l6ZTsgfQorCiBwcm90ZWN0ZWQ6Ci0gICAgQ0NM
YXllclRyZWVIb3N0SW1wbChDQ0xheWVyVHJlZUhvc3RJbXBsQ2xpZW50KiwgUGFzc1JlZlB0cjxM
YXllclJlbmRlcmVyQ2hyb21pdW0+KTsKLSAgICB2b2lkIGRyYXdMYXllcnNPbk1haW5UaHJlYWQo
Q0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBjb250ZXh0TG9zdCk7CisgICAgZXhwbGljaXQgQ0NM
YXllclRyZWVIb3N0SW1wbChjb25zdCBDQ1NldHRpbmdzJik7CiAgICAgaW50IG1fc291cmNlRnJh
bWVOdW1iZXI7CiAgICAgaW50IG1fZnJhbWVOdW1iZXI7CiAKIHByaXZhdGU6Ci0gICAgQ0NMYXll
clRyZWVIb3N0SW1wbENsaWVudCogbV9jbGllbnQ7Ci0gICAgYm9vbCBtX2NvbW1pdFBlbmRpbmc7
CiAgICAgUmVmUHRyPExheWVyUmVuZGVyZXJDaHJvbWl1bT4gbV9sYXllclJlbmRlcmVyOwotICAg
IGJvb2wgbV9yZWRyYXdQZW5kaW5nOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yb290TGF5
ZXJJbXBsOworICAgIENDU2V0dGluZ3MgbV9zZXR0aW5nczsKKyAgICBJbnRTaXplIG1fdmlld3Bv
cnRTaXplOwogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNjY5Mjg4NTY0NTk2ZDg3
ODI2NzY2MWQzZjk0NjFlYmZiNjYyZTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMzUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAi
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCi0KLSNpbmNsdWRlICJUcmFjZUV2ZW50Lmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NNYWluVGhy
ZWFkVGFzay5oIgotI2luY2x1ZGUgImNjL0NDVGhyZWFkVGFzay5oIgotI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotbmFtZXNwYWNlIHsKLUNDVGhyZWFkKiBjY1RocmVhZDsKLWludCBudW1Qcm94aWVzID0g
MDsKLX0KLQotQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpDQ0xheWVyVHJlZUhvc3RJbXBsUHJv
eHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQotICAgIDogbV9jb21taXRQZW5kaW5n
KGZhbHNlKQotICAgICwgbV9sYXllclRyZWVIb3N0KGxheWVyVHJlZUhvc3QpCi17Ci0gICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Q0NMYXllclRyZWVIb3N0SW1wbFBy
b3h5IiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBudW1Qcm94
aWVzKys7Ci0gICAgaWYgKCFjY1RocmVhZCkKLSAgICAgICAgY2NUaHJlYWQgPSBsYXllclRyZWVI
b3N0LT5jbGllbnQoKS0+Y3JlYXRlQ29tcG9zaXRvclRocmVhZCgpLmxlYWtQdHIoKTsKLX0KLQot
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c3RhcnQoKQotewotICAgIC8vIENyZWF0
ZSBMYXllclRyZWVIb3N0SW1wbC4KLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOwot
ICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKCZjb21wbGV0aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotfQotCi1DQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkoKQotewotICAgIFRS
QUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6On5DQ0xheWVyVHJlZUhvc3RJbXBs
UHJveHkiLCB0aGlzLCAwKTsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VS
VCghbV9sYXllclRyZWVIb3N0SW1wbCAmJiAhbV9sYXllclRyZWVIb3N0KTsgLy8gbWFrZSBzdXJl
IHN0b3AoKSBnb3QgY2FsbGVkLgotCi0gICAgbnVtUHJveGllcy0tOwotICAgIGlmICghbnVtUHJv
eGllcykgewotICAgICAgICBkZWxldGUgY2NUaHJlYWQ7Ci0gICAgICAgIGNjVGhyZWFkID0gMDsK
LSAgICB9Ci19Ci0KLWJvb2wgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5Ojppc1N0YXJ0ZWQoKSBj
b25zdAotewotICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfQotCi12b2lkIENDTGF5
ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQotewotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1fY29tbWl0UGVuZGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0
TmVlZHNDb21taXRBbmRSZWRyYXciLCB0aGlzLCAwKTsKLSAgICBtX2NvbW1pdFBlbmRpbmcgPSB0
cnVlOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFk
KSk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXROZWVkc1JlZHJhdygp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBjY1RocmVhZC0+cG9zdFRhc2so
Y3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnNldE5l
ZWRzUmVkcmF3T25DQ1RocmVhZCkpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9zdEltcGxQcm94
eTo6c3RvcCgpCi17Ci0gICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6
c3RvcCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgLy8gU3lu
Y2hyb25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgotICAgIENDQ29tcGxldGlvbkV2ZW50IGNvbXBs
ZXRpb247Ci0gICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAm
Q0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKLSAgICBjb21wbGV0aW9uLndh
aXQoKTsKLQotICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0SW1wbCk7IC8vIHZlcmlmeSB0aGF0
IHRoZSBpbXBsIGRlbGV0ZWQuCi0gICAgbV9sYXllclRyZWVIb3N0ID0gMDsKLX0KLQotdm9pZCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnBvc3REcmF3TGF5ZXJzVGFza09uQ0NUaHJlYWQoKQot
ewotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdElt
cGwpCi0gICAgICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywg
JkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpKTsKLX0KLQot
dm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NU
aHJlYWQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQiLCB0aGlz
LCAwKTsKLSAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIGlmIChtX2xheWVyVHJlZUhv
c3RJbXBsKQotICAgICAgICBDQ01haW5UaHJlYWQ6OnBvc3RUYXNrKGNyZWF0ZU1haW5UaHJlYWRU
YXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1p
dCwgZnJhbWVCZWdpblRpbWUpKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLWJvb2wgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5Ojppc01haW5UaHJlYWQoKQotewotICAgIHJldHVybiA6OmlzTWFpblRo
cmVhZCgpOwotfQotCi0jaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQotYm9vbCBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpCi17Ci0gICAgcmV0dXJuIGN1cnJlbnRU
aHJlYWQoKSA9PSBjY1RocmVhZC0+dGhyZWFkSUQoKTsKLX0KLSNlbHNlCi1uYW1lc3BhY2Ugewot
Ym9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOwotfQotCi1ib29sIENDTGF5ZXJUcmVlSG9zdElt
cGxQcm94eTo6aXNJbXBsVGhyZWFkKCkKLXsKLSAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQ7Ci19
Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRJbXBsVGhyZWFkKGJvb2wgdmFs
dWUpCi17Ci0gICAgZmFrZUltcGxUaHJlYWQgPSB2YWx1ZTsKLX0KLSNlbmRpZiAvLyBVU0UoVEhS
RUFERURfQ09NUE9TSVRJTkcpCi0KLSNlbmRpZiAvLyAhTkRFQlVHCi0KLXZvaWQgQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpyZXF1ZXN0RnJhbWVBbmRDb21taXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKQotewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFtX2xheWVyVHJl
ZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnJlcXVlc3RGcmFtZUFuZENvbW1pdCIsIHRoaXMsIDApOwotICAgIHsKLSAg
ICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dCIsIHRo
aXMsIDApOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRMYXlvdXQoZnJhbWVC
ZWdpblRpbWUpOwotICAgIH0KLQotICAgIG1fY29tbWl0UGVuZGluZyA9IGZhbHNlOwotCi0gICAg
T3duUHRyPENDTGF5ZXJUcmVlSG9zdENvbW1pdHRlcj4gY29tbWl0dGVyID0gbV9sYXllclRyZWVI
b3N0LT5jcmVhdGVMYXllclRyZWVIb3N0Q29tbWl0dGVyKCk7Ci0gICAgbV9sYXllclRyZWVIb3N0
LT5iZWdpbkNvbW1pdCgpOwotCi0gICAgLy8gQmxvY2tpbmcgY2FsbCB0byBDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnBlcmZvcm1Db21taXQKLSAgICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0
aW9uOwotICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkND
TGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6Y29tbWl0T25DQ1RocmVhZCwgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyhjb21taXR0ZXIuZ2V0KCkpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjb21wbGV0
aW9uKSkpOwotICAgIGNvbXBsZXRpb24ud2FpdCgpOwotCi0gICAgY29tbWl0dGVyLmNsZWFyKCk7
Ci0KLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdENvbXBsZXRlKCk7Ci19Ci0KLXZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlciogY29tbWl0dGVyLCBDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAg
ICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKLSAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsLT5iZWdpbkNvbW1pdCgpOwotICAgIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkND
TGF5ZXJUcmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIGNvbW1pdHRlci0+Y29t
bWl0KG1fbGF5ZXJUcmVlSG9zdCwgbV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7Ci0gICAgfQot
ICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotCi0gICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29t
bWl0Q29tcGxldGUoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmRyYXdM
YXllcnNPbkNDVGhyZWFkKCkKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0SW1w
bFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0lt
cGxUaHJlYWQoKSk7Ci0gICAgaWYgKG1fbGF5ZXJUcmVlSG9zdEltcGwpCi0gICAgICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKLX0KLQotdm9pZCBDQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3T25DQ1RocmVhZCgpCi17Ci0gICAgVFJB
Q0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdEltcGxQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRy
YXdPbkNDVGhyZWFkIiwgdGhpcywgMCk7Ci0gICAgQVNTRVJUKGlzSW1wbFRocmVhZCgpICYmIG1f
bGF5ZXJUcmVlSG9zdEltcGwpOwotICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPnNldE5lZWRzQ29t
bWl0QW5kUmVkcmF3KCk7Ci19Ci0KLXZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5OjpzZXRO
ZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHk6OnNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFT
U0VSVChpc0ltcGxUaHJlYWQoKSAmJiBtX2xheWVyVHJlZUhvc3RJbXBsKTsKLSAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5zZXROZWVkc1JlZHJhdygpOwotfQotCi12b2lkIENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6aW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0
aW9uKQotewotICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHk6OmluaXRJ
bXBsT25DQ1RocmVhZCIsIHRoaXMsIDApOwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0g
ICAgbV9sYXllclRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVl
SG9zdEltcGwodGhpcyk7Ci0gICAgY29tcGxldGlvbi0+c2lnbmFsKCk7Ci19Ci0KLXZvaWQgQ0NM
YXllclRyZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0Nv
bXBsZXRpb25FdmVudCogY29tcGxldGlvbikKLXsKLSAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRy
ZWVIb3N0SW1wbFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDAp
OwotICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0SW1wbC5j
bGVhcigpOwotICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwotfQotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBkMDIwN2U1NjE3NjJhYzFkZGY5ZGQ4NzgzNzhkNTQ2MzU2Yzc4N2JhLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGxQcm94eS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwotICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDQ0xheWVy
VHJlZUhvc3RJbXBsUHJveHlfaAotI2RlZmluZSBDQ0xheWVyVHJlZUhvc3RJbXBsUHJveHlfaAot
Ci0jaW5jbHVkZSAiY2MvQ0NDb21wbGV0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmgiCi0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKLWNsYXNzIENDTGF5ZXJUcmVlSG9zdENv
bW1pdHRlcjsKLQotY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5IDogcHVibGljIENDTGF5
ZXJUcmVlSG9zdEltcGxDbGllbnQgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENDTGF5ZXJU
cmVlSG9zdEltcGxQcm94eSk7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+Q0NMYXllclRyZWVIb3N0
SW1wbFByb3h5KCk7Ci0KLSAgICBib29sIGlzU3RhcnRlZCgpIGNvbnN0OwotCi0gICAgdm9pZCBz
ZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOwotICAgIHZvaWQgc2V0TmVlZHNSZWRyYXcoKTsKLQot
ICAgIHZvaWQgc3RhcnQoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIHVzaW5nIHRoZSBwcm94
eS4KLSAgICB2b2lkIHN0b3AoKTsgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGRlbGV0aW5nIHRo
ZSBwcm94eS4KLQotICAgIC8vIENDTGF5ZXJUcmVlSG9zdEltcGxDaWVudCAtLSBjYWxsZWQgb24g
Q0NUaHJlYWQKLSAgICB2aXJ0dWFsIHZvaWQgcG9zdERyYXdMYXllcnNUYXNrT25DQ1RocmVhZCgp
OwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKGRvdWJs
ZSBmcmFtZUJlZ2luVGltZSk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgc3RhdGljIGJvb2wgaXNN
YWluVGhyZWFkKCk7Ci0gICAgc3RhdGljIGJvb2wgaXNJbXBsVGhyZWFkKCk7Ci0jaWYgIVVTRShU
SFJFQURFRF9DT01QT1NJVElORykKLSAgICAvLyBGYWtlIHRocmVhZGVkIGNvbXBvc2l0aW5nIHNv
IHdlIGNhbiBjYXRjaCBpbmNvcnJlY3QgdXNhZ2UuCi0gICAgc3RhdGljIHZvaWQgc2V0SW1wbFRo
cmVhZChib29sKTsKLSNlbmRpZgotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBD
Q0xheWVyVHJlZUhvc3RJbXBsUHJveHkoQ0NMYXllclRyZWVIb3N0Kik7Ci0gICAgdmlydHVhbCBQ
YXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IGNyZWF0ZUxheWVyVHJlZUhvc3RJbXBsKCkg
PSAwOwotICAgIENDTGF5ZXJUcmVlSG9zdCogaG9zdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJU
cmVlSG9zdDsgfQotCi1wcml2YXRlOgotICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAg
ICB2b2lkIHJlcXVlc3RGcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotCi0g
ICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCi0gICAgdm9pZCBjb21taXRPbkNDVGhyZWFkKENDTGF5
ZXJUcmVlSG9zdENvbW1pdHRlciosIENDQ29tcGxldGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBkcmF3
TGF5ZXJzT25DQ1RocmVhZCgpOwotICAgIHZvaWQgaW5pdEltcGxPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50Kik7Ci0gICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQo
KTsKLSAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOwotICAgIHZvaWQgbGF5ZXJU
cmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsKLQotICAgIC8vIFVz
ZWQgb24gbWFpbi10aHJlYWQgb25seS4KLSAgICBib29sIG1fY29tbWl0UGVuZGluZzsKLQotICAg
IC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCi0gICAgQ0NMYXllclRyZWVIb3N0KiBt
X2xheWVyVHJlZUhvc3Q7Ci0KLSAgICAvLyBVc2VkIG9uIHRoZSBDQ1RocmVhZCwgYnV0IGNoZWNr
ZWQgb24gbWFpbiB0aHJlYWQgZHVyaW5nIGluaXRpYWxpemF0aW9uL3NodXRkb3duLgotICAgIE93
blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBtX2xheWVyVHJlZUhvc3RJbXBsOwotfTsKLQotfQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWFpblRocmVhZFRhc2suaAppbmRleCBmYWM2ZTY0M2YwNWEx
OGJiYmFhZDU3YjI5YmJjMDNhNjI4MGVhYzhhLi40YzMzYmFhMDdhZGQzNTc3MzlkZGI1MTc2MWU4
NDdiNzRlNTFjMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ01haW5UaHJlYWRUYXNrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYWluVGhyZWFkVGFzay5oCkBAIC0xNTgsNiAr
MTU4LDg4IEBAIHByaXZhdGU6CiAgICAgUDMgbV9wYXJhbWV0ZXIzOwogfTsKIAorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlw
ZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5h
bWUgTVA0PgorY2xhc3MgTWFpblRocmVhZFRhc2s0IDogcHVibGljIENDTWFpblRocmVhZDo6VGFz
ayB7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIChUOjoqTWV0aG9kKShNUDEsIE1QMiwgTVAz
LCBNUDQpOworICAgIHR5cGVkZWYgTWFpblRocmVhZFRhc2s0PFQsIFAxLCBNUDEsIFAyLCBNUDIs
IFAzLCBNUDMsIFA0LCBNUDQ+IE1haW5UaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVu
YW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlw
ZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0y
OworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1U
eXBlIFBhcmFtMzsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
ND46OlBhcmFtVHlwZSBQYXJhbTQ7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxNYWluVGhyZWFk
VGFza0ltcGw+IGNyZWF0ZShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFt
ZXRlcjQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJlYWRUYXNr
SW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJhbWV0ZXIz
LCBwYXJhbWV0ZXI0KSk7CisgICAgfQorCitwcml2YXRlOgorICAgIE1haW5UaHJlYWRUYXNrNChU
KiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCisgICAgICAgIDog
Q0NNYWluVGhyZWFkOjpUYXNrKGluc3RhbmNlKQorICAgICAgICAsIG1fbWV0aG9kKG1ldGhvZCkK
KyAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKKyAgICAgICAgLCBtX3BhcmFtZXRl
cjIocGFyYW1ldGVyMikKKyAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKKyAgICAg
ICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHBlcmZvcm1UYXNrKCkKKyAgICB7CisgICAgICAgICgqc3RhdGljX2Nhc3Q8VCo+KGlu
c3RhbmNlKCkpLiptX21ldGhvZCkobV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1l
dGVyMywgbV9wYXJhbWV0ZXI0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0
aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsKKyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMg
bV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFyYW1ldGVyNDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBN
UDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQs
IHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBNYWluVGhyZWFkVGFzazUgOiBwdWJs
aWMgQ0NNYWluVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIHZvaWQgKFQ6OipN
ZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVmIE1haW5UaHJlYWRU
YXNrNTxULCBQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBNYWlu
VGhyZWFkVGFza0ltcGw7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFp
dHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOworICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKKyAgICB0eXBlZGVmIHR5cGVuYW1l
IENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00Owor
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBl
IFBhcmFtNTsKKworICAgIHN0YXRpYyBQYXNzT3duUHRyPE1haW5UaHJlYWRUYXNrSW1wbD4gY3Jl
YXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0y
IHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFyYW01
IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1haW5UaHJl
YWRUYXNrSW1wbChpbnN0YW5jZSwgbWV0aG9kLCBwYXJhbWV0ZXIxLCBwYXJhbWV0ZXIyLCBwYXJh
bWV0ZXIzLCBwYXJhbWV0ZXI0LCBwYXJhbWV0ZXI1KSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IE1haW5UaHJlYWRUYXNrNShUKiBpbnN0YW5jZSwgTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFt
ZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQorICAgICAgICA6IENDTWFpblRocmVhZDo6VGFzayhp
bnN0YW5jZSkKKyAgICAgICAgLCBtX21ldGhvZChtZXRob2QpCisgICAgICAgICwgbV9wYXJhbWV0
ZXIxKHBhcmFtZXRlcjEpCisgICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCisgICAg
ICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCisgICAgICAgICwgbV9wYXJhbWV0ZXI0KHBh
cmFtZXRlcjQpCisgICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCisgICAgeworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzaygpCisgICAgeworICAgICAgICAoKnN0
YXRpY19jYXN0PFQqPihpbnN0YW5jZSgpKS4qbV9tZXRob2QpKG1fcGFyYW1ldGVyMSwgbV9wYXJh
bWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1KTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgTWV0aG9kIG1fbWV0aG9kOworICAgIFAxIG1fcGFyYW1ldGVyMTsK
KyAgICBQMiBtX3BhcmFtZXRlcjI7CisgICAgUDMgbV9wYXJhbWV0ZXIzOworICAgIFA0IG1fcGFy
YW1ldGVyNDsKKyAgICBQNSBtX3BhcmFtZXRlcjU7Cit9OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAog
ICAgIFQqIGNvbnN0IGNhbGxlZSwKQEAgLTIxNSw2ICsyOTcsNDYgQEAgUGFzc093blB0cjxDQ01h
aW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAogICAgICAgICBDcm9zc1RocmVh
ZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0
eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgorUGFz
c093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZU1haW5UaHJlYWRUYXNrKAorICAgIFQq
IGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEsIE1QMiwgTVAzLCBNUDQp
LAorICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLAorICAgIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLAor
ICAgIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLAorICAgIGNvbnN0IFA0JiBwYXJhbWV0ZXI0KQorewor
ICAgIHJldHVybiBNYWluVGhyZWFkVGFzazQ8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAy
LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQ+OjpjcmVhdGUoCisgICAgICAgIGNhbGxlZSwK
KyAgICAgICAgbWV0aG9kLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFy
YW1ldGVyMSksCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIy
KSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLAorICAg
ICAgICBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOworCit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAy
LCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0
eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitQYXNzT3duUHRyPENDTWFp
blRocmVhZDo6VGFzaz4gY3JlYXRlTWFpblRocmVhZFRhc2soCisgICAgVCogY29uc3QgY2FsbGVl
LAorICAgIHZvaWQgKFQ6OiptZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwKKyAgICBj
b25zdCBQMSYgcGFyYW1ldGVyMSwKKyAgICBjb25zdCBQMiYgcGFyYW1ldGVyMiwKKyAgICBjb25z
dCBQMyYgcGFyYW1ldGVyMywKKyAgICBjb25zdCBQNCYgcGFyYW1ldGVyNCwKKyAgICBjb25zdCBQ
NSYgcGFyYW1ldGVyNSkKK3sKKyAgICByZXR1cm4gTWFpblRocmVhZFRhc2s1PFQsIHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBl
LCBNUDMsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlwZSwgTVA0LCB0eXBlbmFt
ZSBDcm9zc1RocmVhZENvcGllcjxQNT46OlR5cGUsIE1QNT46OmNyZWF0ZSgKKyAgICAgICAgY2Fs
bGVlLAorICAgICAgICBtZXRob2QsCisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFt
ZXRlcjIpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyks
CisgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKKyAgICAg
ICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpKTsKKworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBDQ01haW5UaHJlYWRUYXNrX2gKKyNlbmRp
ZiAvLyBNYWluVGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAK
aW5kZXggNjNlZGNmMGQ2N2E2ODRmNWRiZTBhMTJkNWQ5ZDI2MmEwYjE0YWMyMy4uYTlmNDUwZWQ0
ODI0NWQ4MWIwYzQzMDcyY2EzOTM3MTJkMGRkMzc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmNwcApAQCAtMzEsNyArMzEsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5LmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAg
LTQ4LDcgKzQ4LDcgQEAgQ0NQbHVnaW5MYXllckltcGw6On5DQ1BsdWdpbkxheWVySW1wbCgpCiAK
IHZvaWQgQ0NQbHVnaW5MYXllckltcGw6OmRyYXcoKQogewotICAgIEFTU0VSVChDQ0xheWVyVHJl
ZUhvc3RJbXBsUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKKyAgICBBU1NFUlQoQ0NQcm94eTo6aXNJ
bXBsVGhyZWFkKCkpOwogICAgIEFTU0VSVChsYXllclJlbmRlcmVyKCkpOwogICAgIGNvbnN0IEND
UGx1Z2luTGF5ZXJJbXBsOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVn
aW5MYXllclByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFs
aXplZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDYxYTJlNTNlZDIzMGY5NjdlZTFk
ODVkZDA4M2NiYWNmOWMyNjcxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuY3BwCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDUHJv
eHkuaCIKKworI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJl
ZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVkZSAiY2Mv
Q0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZuZGVmIE5ERUJVRworYm9v
bCBDQ1Byb3h5Ojppc01haW5UaHJlYWQoKQoreworICAgIHJldHVybiA6OmlzTWFpblRocmVhZCgp
OworfQorCituYW1lc3BhY2UgeworYm9vbCBmYWtlSW1wbFRocmVhZCA9IGZhbHNlOworc3RhdGlj
IFdURjo6VGhyZWFkSWRlbnRpZmllciBpbXBsVGhyZWFkSUQ7Cit9CisKK2Jvb2wgQ0NQcm94eTo6
aXNJbXBsVGhyZWFkKCkKK3sKKyAgICByZXR1cm4gZmFrZUltcGxUaHJlYWQgfHwgY3VycmVudFRo
cmVhZCgpID09IGltcGxUaHJlYWRJRDsKK30KKwordm9pZCBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFk
KGJvb2wgaXNJbXBsVGhyZWFkKQoreworICAgIGZha2VJbXBsVGhyZWFkID0gaXNJbXBsVGhyZWFk
OworfQorCit2b2lkIENDUHJveHk6OnNldEltcGxUaHJlYWQoV1RGOjpUaHJlYWRJZGVudGlmaWVy
IGlkKQoreworICAgIGltcGxUaHJlYWRJRCA9IGlkOworfQorCisjZW5kaWYgLy8gIU5ERUJVRwor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Byb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1Byb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQ1ZDJjZGFjMGE5ZjkzYTE4OWY0YTEwMzcyZWQw
N2Q1YWE4OGJlYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUHJveHkuaApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBDQ1Byb3h5X2gKKyNkZWZpbmUgQ0NQcm94eV9oCisKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KKworI2lmIFVTRShTS0lBKQorY2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NUaHJlYWQ7CitjbGFzcyBDQ0xheWVyVHJl
ZUhvc3Q7CitjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOworY2xhc3MgQ0NMYXllclRyZWVIb3N0
SW1wbENsaWVudDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworc3RydWN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXM7CitjbGFzcyBUZXh0dXJlTWFuYWdlcjsKKworLy8gQWJzdHJhY3QgY2xh
c3MgcmVzcG9uc2libGUgZm9yIHByb3h5aW5nIGNvbW1hbmRzIGZyb20gdGhlIG1haW4tdGhyZWFk
IHNpZGUgb2YKKy8vIHRoZSBjb21wb3NpdG9yIG92ZXIgdG8gdGhlIGNvbXBvc2l0b3IgaW1wbGVt
ZW50YXRpb24uCitjbGFzcyBDQ1Byb3h5IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ1By
b3h5KTsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5DQ1Byb3h5KCkgeyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgY29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIGZpbmlzaEFsbFJlbmRlcmluZygpID0gMDsKKworICAg
IHZpcnR1YWwgYm9vbCBpc1N0YXJ0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wg
aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoQ0NMYXllclRyZWVIb3N0KiBvd25lckhhY2spID0gMDsK
KworICAgIHZpcnR1YWwgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcyYgbGF5ZXJSZW5k
ZXJlckNhcGFiaWxpdGllcygpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVk
c0NvbW1pdEFuZFJlZHJhdygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNSZWRyYXco
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnQoKSA9IDA7IC8vIE11c3QgYmUgY2FsbGVk
IGJlZm9yZSB1c2luZyB0aGUgcHJveHkuCisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSA9IDA7IC8v
IE11c3QgYmUgY2FsbGVkIGJlZm9yZSBkZWxldGluZyB0aGUgcHJveHkuCisKKyAgICAvLyBEZWJ1
ZyBob29rcworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgYm9vbCBpc01haW5UaHJlYWQoKTsK
KyAgICBzdGF0aWMgYm9vbCBpc0ltcGxUaHJlYWQoKTsKKyNlbmRpZgorCisgICAgLy8gVGVzdGlu
ZyBob29rcworICAgIHZpcnR1YWwgdm9pZCBsb3NlQ29tcG9zaXRvckNvbnRleHQoKSA9IDA7CisK
KyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRv
IGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBS
ZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBz
a2lhQ29udGV4dCgpID0gMDsKKyNlbmRpZgorCisgICAgLy8gVGVtcG9yYXJ5IGhhY2sgd2hpbGUg
cmVuZGVyX3dpZGdldCBzdGlsbCBkb2VzIHNjaGVkdWxpbmcgZm9yIENDTGF5ZXJUcmVlSG9zdE1h
aW5UaHJlYWRJCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpID0gMDsK
KworICAgIC8vIFRlbXBvcmFyeSBoYWNrIHdoaWxlIExheWVyQ2hyb21pdW1zIGhvbGQgcmVmZXJl
bmNlcyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW1zCisgICAgdmlydHVhbCBUZXh0dXJlTWFuYWdl
ciogY29udGVudHNUZXh0dXJlTWFuYWdlcigpID0gMDsKKworcHJvdGVjdGVkOgorICAgIENDUHJv
eHkoKSB7IH0KKyAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKKyNpZm5kZWYg
TkRFQlVHCisgICAgc3RhdGljIHZvaWQgc2V0SW1wbFRocmVhZChib29sKTsKKyAgICBzdGF0aWMg
dm9pZCBzZXRJbXBsVGhyZWFkKFdURjo6VGhyZWFkSWRlbnRpZmllcik7CisjZW5kaWYKK307CisK
K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjc2YjE4ZWE5Y2VlYjhkMmFmMjQ2ZDY0Y2I5NGJlYjZkNzM2ODAxZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRl
cmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NM
YXllclRyZWVIb3N0LmgiCisjaW5jbHVkZSAiY2MvQ0NNYWluVGhyZWFkVGFzay5oIgorI2luY2x1
ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFNjb3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgorICAg
IFNjb3BlZFNldEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEND
UHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7CisjZW5kaWYKKyAgICB9CisgICAgflNjb3BlZFNl
dEltcGxUaHJlYWQoKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIENDUHJveHk6OnNl
dEltcGxUaHJlYWQoZmFsc2UpOworI2VuZGlmCisgICAgfQorfTsKKworUGFzc093blB0cjxDQ1By
b3h5PiBDQ1NpbmdsZVRocmVhZFByb3h5OjpjcmVhdGUoQ0NMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIb3N0KQoreworICAgIHJldHVybiBhZG9wdFB0cihuZXcgQ0NTaW5nbGVUaHJlYWRQcm94eShs
YXllclRyZWVIb3N0KSk7Cit9CisKK0NDU2luZ2xlVGhyZWFkUHJveHk6OkNDU2luZ2xlVGhyZWFk
UHJveHkoQ0NMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0KQorICAgIDogbV9sYXllclRyZWVI
b3N0KGxheWVyVHJlZUhvc3QpCisgICAgLCBtX251bUZhaWxlZFJlY3JlYXRlQXR0ZW1wdHMoMCkK
KyAgICAsIG1fZ3JhcGhpY3NDb250ZXh0TG9zdChmYWxzZSkKK3sKKyAgICBUUkFDRV9FVkVOVCgi
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Q0NTaW5nbGVUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
c3RhcnQoKQoreworICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBtX2xheWVyVHJl
ZUhvc3RJbXBsID0gbV9sYXllclRyZWVIb3N0LT5jcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOwor
fQorCitDQ1NpbmdsZVRocmVhZFByb3h5Ojp+Q0NTaW5nbGVUaHJlYWRQcm94eSgpCit7CisgICAg
VFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6On5DQ1NpbmdsZVRocmVhZFByb3h5Iiwg
dGhpcywgMCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIW1fbGF5
ZXJUcmVlSG9zdEltcGwgJiYgIW1fbGF5ZXJUcmVlSG9zdCk7IC8vIG1ha2Ugc3VyZSBzdG9wKCkg
Z290IGNhbGxlZC4KK30KKworYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVBbmRS
ZWFkYmFjayh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKKworICAgIGlmICghcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29tbWl0SWZOZWVkZWQoKTsKKworCisgICAg
aWYgKCFkb0NvbXBvc2l0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xheWVy
VHJlZUhvc3RJbXBsLT5yZWFkYmFjayhwaXhlbHMsIHJlY3QpOworCisgICAgaWYgKG1fbGF5ZXJU
cmVlSG9zdEltcGwtPmlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEKiBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpjb250ZXh0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbC0+Y29u
dGV4dCgpOworfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmlu
ZygpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7
Cit9CisKK2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBs
OworfQorCitib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KENDTGF5ZXJUcmVlSG9zdCogb3duZXJIYWNrKQoreworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4gY29udGV4dCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRl
eHQzRCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFT
U0VSVChjb250ZXh0LT5oYXNPbmVSZWYoKSk7CisKKyAgICB7CisgICAgICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKKyAgICAgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmluaXRp
YWxpemVMYXllclJlbmRlcmVyKG93bmVySGFjaywgY29udGV4dCk7CisgICAgfQorfQorCitjb25z
dCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBDQ1NpbmdsZVRocmVhZFByb3h5OjpsYXllclJl
bmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29uc3QKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGlt
cGw7CisgICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpsb3NlQ29tcG9zaXRvckNv
bnRleHQoKQoreworICAgIG1fZ3JhcGhpY3NDb250ZXh0TG9zdCA9IHRydWU7Cit9CisKK3ZvaWQg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKQoreworICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKKyAg
ICBtX2xheWVyVHJlZUhvc3QtPnNjaGVkdWxlQ29tcG9zaXRlKCk7CisjZWxzZQorICAgIC8vIFNp
bmdsZSB0aHJlYWRlZCBvbmx5IHdvcmtzIHdpdGggVEhSRUFERURfQ09NUE9TSVRJTkcuCisgICAg
Q1JBU0goKTsKKyNlbmRpZgorfQorCit2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
UmVkcmF3KCkKK3sKKyAgICAvLyBGSVhNRTogT25jZSB3ZSBtb3ZlIHJlbmRlcl93aWRnZXQgc2No
ZWR1bGluZyBpbnRvIHRoaXMgY2xhc3MsIHdlIGNhbgorICAgIC8vIHRyZWF0IHJlZHJhdyByZXF1
ZXN0cyBtb3JlIGVmZmljaWVudGx5IHRoYW4gY29tbWl0QW5kUmVkcmF3IHJlcXVlc3RzLgorICAg
IHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7Cit9CisKK3ZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6c3RvcCgpCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDU2luZ2xlVGhyZWFkUHJveHk6OnN0b3Ai
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHsKKyAgICAgICAg
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNs
ZWFyKCk7CisgICAgfQorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9CisKKyNpZiBVU0UoU0tJ
QSkKK0dyQ29udGV4dCogQ0NTaW5nbGVUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQoKQoreworICAg
IHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNraWFDb250ZXh0
KCk7Cit9CisjZW5kaWYKKworVGV4dHVyZU1hbmFnZXIqIENDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKQoreworICAgIHJldHVybiBtX2xheWVyVHJlZUhvc3RJbXBs
LT5sYXllclJlbmRlcmVyKCktPmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKK30KKworI2lmICFV
U0UoVEhSRUFERURfQ09NUE9TSVRJTkcpCisvLyBDYWxsZWQgYnkgdGhlIGxlZ2FjeSBzY2hlZHVs
aW5nIHBhdGggKGUuZy4gd2hlcmUgcmVuZGVyX3dpZGdldCBkb2VzIHRoZSBzY2hlZHVsaW5nKQor
dm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCit7CisgICAg
aWYgKCFyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b21taXRJZk5lZWRlZCgpOworCisgICAgaWYgKGRvQ29tcG9zaXRlKCkpCisgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPnByZXNlbnQoKTsKK30KKyNlbmRpZgorCisKK2Jvb2wgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQoreworICAgIGlmICghbV9ncmFw
aGljc0NvbnRleHRMb3N0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhv
c3RDb250ZXh0M0QoKTsKKyAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkpOworICAgIGlm
IChtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcigwLCBjb250ZXh0
KSkgeworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0
KHRydWUpOworICAgICAgICBtX2dyYXBoaWNzQ29udGV4dExvc3QgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8gVG9sZXJhdGUgYSBjZXJ0YWluIG51bWJlciBv
ZiByZWNyZWF0aW9uIGZhaWx1cmVzIHRvIHdvcmsgYXJvdW5kIHJhY2VzCisgICAgLy8gaW4gdGhl
IGNvbnRleHQtbG9zdCBtYWNoaW5lcnkuCisgICAgbV9udW1GYWlsZWRSZWNyZWF0ZUF0dGVtcHRz
Kys7CisgICAgaWYgKG1fbnVtRmFpbGVkUmVjcmVhdGVBdHRlbXB0cyA8IDUpIHsKKyAgICAgICAg
c2V0TmVlZHNDb21taXRBbmRSZWRyYXcoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIFdlIGhhdmUgdHJpZWQgdG9vIG1hbnkgdGltZXMgdG8gcmVjcmVhdGUgdGhlIGNv
bnRleHQuIFRlbGwgdGhlIGhvc3QgdG8gZmFsbAorICAgIC8vIGJhY2sgdG8gc29mdHdhcmUgcmVu
ZGVyaW5nLgorICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQo
ZmFsc2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojpjb21taXRJZk5lZWRlZCgpCit7CisgICAgLy8gVXBkYXRlCisgICAgZG91YmxlIGZyYW1lQmVn
aW5UaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmFuaW1hdGVBbmRM
YXlvdXQoZnJhbWVCZWdpblRpbWUpOworCisgICAgLy8gUHJlY29tbWl0IGlzIGEgdGVtcG9yYXJ5
IHN0ZXAgd2UgbmVlZCB0byBwZXJmb3JtIHRvIHB1c2ggdGhpbmdzIGxpa2UKKyAgICAvLyB0aGUg
dmlld3BvcnQgdG8gdGhlIExheWVyVHJlZUhvc3RJbXBsLCBiZWNhdXNlCisgICAgLy8gTGF5ZXJU
cmVlSG9zdEltcGw6OnVwZGF0ZUxheWVycygpIGlzbid0IHNwbGl0IGludG8gaG9zdCBhbmQgaW1w
bCBwYXJ0cy4KKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5wcmVDb21taXQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7
CisgICAgfQorCisgICAgLy8gVGhpcyBzaG91bGQgYmVjb21lIG1fbGF5ZXJUcmVlSG9zdC0+dXBk
YXRlTGF5ZXJzKCkgb25jZSB3ZSBzcGxpdCBhcGFydAorICAgIC8vIExheWVyVHJlZUhvc3RJbXBs
Ojp1cGRhdGVMYXllcnMuCisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+dXBkYXRlTGF5ZXJzKCk7
CisKKyAgICAvLyBDb21taXQKKyAgICB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKKyAgICB9Cit9CisK
K2Jvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZG9Db21wb3NpdGUoKQoreworICAgIEFTU0VSVCgh
bV9ncmFwaGljc0NvbnRleHRMb3N0KTsKKworICAgIHsKKyAgICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKyAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKKyAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3RJbXBsLT5pc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgICAv
LyBUcnlpbmcgdG8gcmVjb3ZlciB0aGUgY29udGV4dCByaWdodCBoZXJlIHdpbGwgbm90IHdvcmsg
aWYgR1BVIHByb2Nlc3MKKyAgICAgICAgICAvLyBkaWVkLiBUaGlzIGlzIGJlY2F1c2UgR3B1Q2hh
bm5lbEhvc3Q6Ok9uRXJyb3JNZXNzYWdlIHdpbGwgb25seSBiZQorICAgICAgICAgIC8vIGNhbGxl
ZCBhdCB0aGUgbmV4dCBpdGVyYXRpb24gb2YgdGhlIG1lc3NhZ2UgbG9vcCwgcmV2ZXJ0aW5nIG91
cgorICAgICAgICAgIC8vIHJlY292ZXJ5IGF0dGVtcHRzIGhlcmUuIEluc3RlYWQsIHdlIGRldGFj
aCB0aGUgcm9vdCBsYXllciBmcm9tIHRoZQorICAgICAgICAgIC8vIHJlbmRlcmVyLCByZWNyZWF0
ZSB0aGUgcmVuZGVyZXIgYXQgdGhlIG5leHQgbWVzc2FnZSBsb29wIGl0ZXJhdGlvbgorICAgICAg
ICAgIC8vIGFuZCByZXF1ZXN0IGEgcmVwYWludCB5ZXQgYWdhaW4uCisgICAgICAgICAgbV9ncmFw
aGljc0NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICAgICAgICBtX251bUZhaWxlZFJlY3JlYXRlQXR0
ZW1wdHMgPSAwOworICAgICAgICAgIHNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCk7CisgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmYxYTBl
NGE3OWU3MzU4MmZhNzExN2I0YjNkOTgxMGM0Y2Y3YWUwZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFk
UHJveHkuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIENDU2luZ2xl
VGhyZWFkUHJveHlfaAorI2RlZmluZSBDQ1NpbmdsZVRocmVhZFByb3h5X2gKKworI2luY2x1ZGUg
ImNjL0NDQ29tcGxldGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5oIgorI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllclRyZWVIb3N0OworCitjbGFzcyBD
Q1NpbmdsZVRocmVhZFByb3h5IDogcHVibGljIENDUHJveHkgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzT3duUHRyPENDUHJveHk+IGNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqKTsKKyAgICB2aXJ0
dWFsIH5DQ1NpbmdsZVRocmVhZFByb3h5KCk7CisKKyAgICAvLyBDQ1Byb3h5IGltcGxlbWVudGF0
aW9uCisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywg
Y29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5nKCk7CisgICAgdmlydHVhbCBi
b29sIGlzU3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7CisgICAgdmlydHVhbCBjb25zdCBM
YXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzKCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29udGV4dCgpOworICAgIHZpcnR1
YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9p
ZCBzdG9wKCk7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sgdG8gYWxsb3cgbWFpbiB0aHJl
YWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAgLy8gZm9yIGFjY2VsZXJhdGVk
IHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShTS0lBKQorICAgIHZpcnR1YWwg
R3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKKyAgICAvLyBUZW1wb3JhcnkgaGFj
ayB3aGlsZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMgdG8gTGF5ZXJSZW5kZXJlckNo
cm9taXVtcworICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKTsKKworICAgIC8vIFNwZWNpYWwgY2FzZSBmdW5jdGlvbnMuCisjaWYgIVVTRShUSFJFQURF
RF9DT01QT1NJVElORykKKyAgICB2b2lkIGNvbXBvc2l0ZUltbWVkaWF0ZWx5KCk7CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVl
SG9zdCopOworICAgIGJvb2wgcmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKTsKKyAgICB2b2lkIGNv
bW1pdElmTmVlZGVkKCk7CisgICAgYm9vbCBkb0NvbXBvc2l0ZSgpOworCisgICAgLy8gQWNjZXNz
ZWQgb24gbWFpbiB0aHJlYWQgb25seS4KKyAgICBDQ0xheWVyVHJlZUhvc3QqIG1fbGF5ZXJUcmVl
SG9zdDsKKworICAgIC8vIFVzZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWlu
IHRocmVhZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5
ZXJUcmVlSG9zdEltcGw+IG1fbGF5ZXJUcmVlSG9zdEltcGw7CisKKyAgICBpbnQgbV9udW1GYWls
ZWRSZWNyZWF0ZUF0dGVtcHRzOworICAgIGJvb2wgbV9ncmFwaGljc0NvbnRleHRMb3N0OworfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQw
ZmJlZTQxZmZhZjk2NWM4OWM1NzM0ZTRjNzI0YTdlN2U0YTJjZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJjYy9DQ1RocmVhZFByb3h5LmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ01haW5UaHJlYWRUYXNrLmgiCisjaW5jbHVk
ZSAiY2MvQ0NUaHJlYWRUYXNrLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2Ugewor
Q0NUaHJlYWQqIGNjVGhyZWFkOworaW50IG51bVByb3hpZXMgPSAwOworfQorCitQYXNzT3duUHRy
PENDUHJveHk+IENDVGhyZWFkUHJveHk6OmNyZWF0ZShDQ0xheWVyVHJlZUhvc3QqIGxheWVyVHJl
ZUhvc3QpCit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDQ1RocmVhZFByb3h5KGxheWVyVHJl
ZUhvc3QpKTsKK30KKworQ0NUaHJlYWRQcm94eTo6Q0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvc3QpCisgICAgOiBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCisgICAgLCBt
X2xheWVyVHJlZUhvc3QobGF5ZXJUcmVlSG9zdCkKK3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6Q0NUaHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgbnVtUHJveGllcysrOworICAgIGlmICghY2NUaHJlYWQpIHsKKyAgICAgICAg
Y2NUaHJlYWQgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUNvbXBvc2l0b3JUaHJlYWQoKS5sZWFr
UHRyKCk7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGNj
VGhyZWFkLT50aHJlYWRJRCgpKTsKKyNlbmRpZgorICAgIH0KK30KKworQ0NUaHJlYWRQcm94eTo6
fkNDVGhyZWFkUHJveHkoKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojp+Q0NU
aHJlYWRQcm94eSIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAg
QVNTRVJUKCFtX2xheWVyVHJlZUhvc3RJbXBsKTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBnb3QgY2Fs
bGVkLgorICAgIEFTU0VSVCghbV9sYXllclRyZWVIb3N0KTsgLy8gTWFrZSBzdXJlIHN0b3AoKSBn
b3QgY2FsbGVkLgorCisgICAgbnVtUHJveGllcy0tOworICAgIGlmICghbnVtUHJveGllcykgewor
ICAgICAgICBkZWxldGUgY2NUaHJlYWQ7CisgICAgICAgIGNjVGhyZWFkID0gMDsKKyAgICB9Cit9
CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxz
LCBjb25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworR3JhcGhpY3NDb250ZXh0M0QqIENDVGhyZWFkUHJveHk6OmNv
bnRleHQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
Cit2b2lkIENDVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZygpCit7CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK2Jvb2wgQ0NUaHJlYWRQcm94eTo6aXNTdGFydGVkKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9sYXllclRyZWVIb3N0SW1wbDsKK30KKworYm9vbCBDQ1RocmVh
ZFByb3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFj
aykKK3sKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBtX2xheWVyVHJl
ZUhvc3QtPmNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKTsKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoY29udGV4dC0+aGFzT25lUmVmKCkp
OworCisgICAgLy8gTGVhayB0aGUgY29udGV4dCBwb2ludGVyIHNvIHdlIGNhbiB0cmFuc2ZlciBv
d25lcnNoaXAgb2YgaXQgdG8gdGhlIG90aGVyIHNpZGUuLi4KKyAgICBHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dFB0ciA9IGNvbnRleHQucmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICBBU1NFUlQo
Y29udGV4dFB0ci0+aGFzT25lUmVmKCkpOworCisgICAgLy8gTWFrZSBhIGJsb2NraW5nIGNhbGwg
dG8gaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkLiBUaGUgcmVzdWx0cyBvZiB0aGF0
IGNhbGwKKyAgICAvLyBhcmUgcHVzaGVkIGludG8gdGhlIGluaXRpYWxpemVTdWNjZWVkZWQgYW5k
IGNhcGFiaWxpdGllcyBsb2NhbCB2YXJpYWJsZXMuCisgICAgQ0NDb21wbGV0aW9uRXZlbnQgY29t
cGxldGlvbjsKKyAgICBib29sIGluaXRpYWxpemVTdWNjZWVkZWQ7CisgICAgTGF5ZXJSZW5kZXJl
ckNhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVy
ZXJPbkNDVGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QWxsb3dDcm9zc1RocmVhZEFjY2Vzcyhvd25lckhhY2spLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KGNvbnRleHRQdHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbiksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MoJmluaXRpYWxpemVTdWNjZWVkZWQpLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKCZjYXBhYmls
aXRpZXMpKSk7CisgICAgY29tcGxldGlvbi53YWl0KCk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZVN1
Y2NlZWRlZCkKKyAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzTWFpblRocmVhZENv
cHkgPSBjYXBhYmlsaXRpZXM7CisgICAgcmV0dXJuIGluaXRpYWxpemVTdWNjZWVkZWQ7Cit9CisK
K2NvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMmIENDVGhyZWFkUHJveHk6OmxheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXJD
YXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5Ojpsb3Nl
Q29tcG9zaXRvckNvbnRleHQoKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIENDVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0QW5kUmVkcmF3KCkKK3sKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2NvbW1pdFBlbmRpbmcpCisgICAgICAgIHJl
dHVybjsKKworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFu
ZFJlZHJhdyIsIHRoaXMsIDApOworICAgIG1fY29tbWl0UGVuZGluZyA9IHRydWU7CisgICAgY2NU
aHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6
c2V0TmVlZHNDb21taXRBbmRSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNSZWRyYXcoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQ
cm94eTo6c2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKSk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94
eTo6c3RhcnQoKQoreworICAgIC8vIENyZWF0ZSBMYXllclRyZWVIb3N0SW1wbC4KKyAgICBDQ0Nv
bXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhjcmVhdGVD
Q1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBsT25DQ1RocmVh
ZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmY29tcGxldGlvbikpKTsKKyAgICBjb21wbGV0aW9u
LndhaXQoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzdG9wKCkKK3sKKyAgICBUUkFDRV9F
VkVOVCgiQ0NUaHJlYWRQcm94eTo6c3RvcCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgLy8gU3luY2hyb25vdXNseSBkZWxldGVzIHRoZSBpbXBsLgorICAgIEND
Q29tcGxldGlvbkV2ZW50IGNvbXBsZXRpb247CisgICAgY2NUaHJlYWQtPnBvc3RUYXNrKGNyZWF0
ZUNDVGhyZWFkVGFzayh0aGlzLCAmQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9u
Q0NUaHJlYWQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29t
cGxldGlvbi53YWl0KCk7CisKKyAgICBBU1NFUlQoIW1fbGF5ZXJUcmVlSG9zdEltcGwpOyAvLyB2
ZXJpZnkgdGhhdCB0aGUgaW1wbCBkZWxldGVkLgorICAgIG1fbGF5ZXJUcmVlSG9zdCA9IDA7Cit9
CisKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogQ0NUaHJlYWRQcm94eTo6c2tpYUNvbnRleHQo
KQoreworICAgIC8vIE5vdCBzdXBwb3J0ZWQgb24gdGhlIGltcGwgdGhyZWFkLgorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYK
KworVGV4dHVyZU1hbmFnZXIqIENDVGhyZWFkUHJveHk6OmNvbnRlbnRzVGV4dHVyZU1hbmFnZXIo
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXRPbkNDVGhyZWFkKCkKK3sKKyAgICBU
UkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZUFuZENvbW1pdE9uQ0NUaHJlYWQi
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIC8vIEZJWE1FOiBjYWxsIGJlZ2luRnJhbWVBbmRDb21taXQgb24gbWFp
biB0aHJlYWQKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGRv
dWJsZSBmcmFtZUJlZ2luVGltZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmICghbV9sYXllclRyZWVIb3N0KQorICAgICAgICByZXR1cm47CisKKyAgICBUUkFDRV9FVkVO
VCgiQ0NUaHJlYWRQcm94eTo6cmVxdWVzdEZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CisgICAg
eworICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0
IiwgdGhpcywgMCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+YW5pbWF0ZUFuZExheW91dChm
cmFtZUJlZ2luVGltZSk7CisgICAgfQorCisgICAgbV9jb21taXRQZW5kaW5nID0gZmFsc2U7CisK
KyAgICAvLyBCbG9ja2luZyBjYWxsIHRvIENDVGhyZWFkUHJveHk6OnBlcmZvcm1Db21taXQKKyAg
ICBDQ0NvbXBsZXRpb25FdmVudCBjb21wbGV0aW9uOworICAgIGNjVGhyZWFkLT5wb3N0VGFzayhj
cmVhdGVDQ1RocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQs
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJmNvbXBsZXRpb24pKSk7CisgICAgY29tcGxldGlvbi53
YWl0KCk7Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1RocmVhZChDQ0NvbXBs
ZXRpb25FdmVudCogY29tcGxldGlvbikKK3sKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOwor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkIiwgdGhpcywg
MCk7CisgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKKyAgICB7CisgICAg
ICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdCIsIHRoaXMsIDApOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkp
OworICAgIH0KKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKKworICAgIG1fbGF5ZXJUcmVlSG9z
dEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CisgICAgc2V0TmVlZHNSZWRyYXdPbkNDVGhyZWFkKCk7
Cit9CisKK3ZvaWQgQ0NUaHJlYWRQcm94eTo6ZHJhd0xheWVyc09uQ0NUaHJlYWQoKQoreworICAg
IFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpkcmF3TGF5ZXJzT25DQ1RocmVhZCIsIHRoaXMs
IDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAgaWYgKG1fbGF5ZXJUcmVlSG9z
dEltcGwpCisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRyYXdMYXllcnMoKTsKK30KKwor
dm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJhd09uQ0NUaHJlYWQoKQor
eworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAg
IEFTU0VSVChtX2xheWVyVHJlZUhvc3RJbXBsKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQoKQorewor
ICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5OjpzZXROZWVkc1JlZHJhd09uQ0NUaHJlYWQi
LCB0aGlzLCAwKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBDQ1RocmVh
ZFByb3h5Ojppbml0aWFsaXplSW1wbE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBs
ZXRpb24pCit7CisgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmluaXRpYWxpemVJbXBs
T25DQ1RocmVhZCIsIHRoaXMsIDApOworICAgIEFTU0VSVChpc0ltcGxUaHJlYWQoKSk7CisgICAg
bV9sYXllclRyZWVIb3N0SW1wbCA9IG1fbGF5ZXJUcmVlSG9zdC0+Y3JlYXRlTGF5ZXJUcmVlSG9z
dEltcGwoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFBy
b3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0KiBv
d25lckhhY2ssIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0UHRyLCBDQ0NvbXBsZXRpb25FdmVu
dCogY29tcGxldGlvbiwgYm9vbCogaW5pdGlhbGl6ZVN1Y2NlZWRlZCwgTGF5ZXJSZW5kZXJlckNh
cGFiaWxpdGllcyogY2FwYWJpbGl0aWVzKQoreworICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFBy
b3h5Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dChhZG9wdFJlZihjb250ZXh0UHRyKSk7CisgICAgKmluaXRpYWxpemVTdWNjZWVkZWQgPSBt
X2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihvd25lckhhY2ssIGNv
bnRleHQpOworICAgIGlmICgqaW5pdGlhbGl6ZVN1Y2NlZWRlZCkKKyAgICAgICAgKmNhcGFiaWxp
dGllcyA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKTsK
KyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30KKwordm9pZCBDQ1RocmVhZFByb3h5OjpsYXll
clRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikK
K3sKKyAgICBUUkFDRV9FVkVOVCgiQ0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9u
Q0NUaHJlYWQiLCB0aGlzLCAwKTsKKyAgICBBU1NFUlQoaXNJbXBsVGhyZWFkKCkpOworICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKKyAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNmM0NDhiMGNlYWU3ZWJi
ZDQ2ODI2NDlhYTc5MjA1ZDRhYzUxMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKQEAgLTAsMCAr
MSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDQ1RocmVhZFByb3h5X2gKKyNkZWZpbmUg
Q0NUaHJlYWRQcm94eV9oCisKKyNpbmNsdWRlICJjYy9DQ0NvbXBsZXRpb25FdmVudC5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKKyNpbmNsdWRlICJjYy9DQ1Byb3h5Lmgi
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDTGF5ZXJUcmVlSG9zdDsKKworY2xhc3MgQ0NUaHJlYWRQcm94eSA6IHB1YmxpYyBDQ1Byb3h5
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxDQ1Byb3h5PiBjcmVhdGUoQ0NMYXll
clRyZWVIb3N0Kik7CisKKyAgICB2aXJ0dWFsIH5DQ1RocmVhZFByb3h5KCk7CisKKyAgICAvLyBD
Q1Byb3h5IGltcGxlbWVudGF0aW9uCisgICAgdmlydHVhbCBib29sIGNvbXBvc2l0ZUFuZFJlYWRi
YWNrKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYpOworICAgIHZpcnR1YWwgR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoQWxsUmVuZGVyaW5n
KCk7CisgICAgdmlydHVhbCBib29sIGlzU3RhcnRlZCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9v
bCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihDQ0xheWVyVHJlZUhvc3QqIG93bmVySGFjayk7Cisg
ICAgdmlydHVhbCBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGxvc2VDb21wb3NpdG9yQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJhdygpOworICAg
IHZpcnR1YWwgdm9pZCBzZXROZWVkc1JlZHJhdygpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydCgp
OworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CisKKyAgICAvLyBIb3JyaWJsZSB1Z2x5IGhhY2sg
dG8gYWxsb3cgbWFpbiB0aHJlYWRlZCBjb2RlIHRvIGdldCB0byB0aGUgR3JDb250ZXh0CisgICAg
Ly8gZm9yIGFjY2VsZXJhdGVkIHBhaW50aW5nLiBSZW1vdmUgdGhpcyBBU0FQLgorI2lmIFVTRShT
S0lBKQorICAgIHZpcnR1YWwgR3JDb250ZXh0KiBza2lhQ29udGV4dCgpOworI2VuZGlmCisKKyAg
ICAvLyBUZW1wb3JhcnkgaGFjayB3aGlsZSBMYXllckNocm9taXVtcyBob2xkIHJlZmVyZW5jZXMg
dG8gTGF5ZXJSZW5kZXJlckNocm9taXVtcworICAgIHZpcnR1YWwgVGV4dHVyZU1hbmFnZXIqIGNv
bnRlbnRzVGV4dHVyZU1hbmFnZXIoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBDQ1RocmVh
ZFByb3h5KENDTGF5ZXJUcmVlSG9zdCopOworCisgICAgLy8gQ2FsbGVkIG9uIENDTWFpblRocmVh
ZAorICAgIHZvaWQgYmVnaW5GcmFtZUFuZENvbW1pdChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwor
CisgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCisgICAgdm9pZCBiZWdpbkZyYW1lQW5kQ29tbWl0
T25DQ1RocmVhZCgpOworICAgIHZvaWQgY29tbWl0T25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVu
dCopOworICAgIHZvaWQgZHJhd0xheWVyc09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIGluaXRpYWxp
emVJbXBsT25DQ1RocmVhZChDQ0NvbXBsZXRpb25FdmVudCopOworICAgIHZvaWQgaW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdCosIEdyYXBoaWNzQ29udGV4
dDNEKiwgQ0NDb21wbGV0aW9uRXZlbnQqLCBib29sKiBpbml0aWFsaXplU3VjY2VlZGVkLCBMYXll
clJlbmRlcmVyQ2FwYWJpbGl0aWVzKik7CisgICAgdm9pZCBzZXROZWVkc0NvbW1pdEFuZFJlZHJh
d09uQ0NUaHJlYWQoKTsKKyAgICB2b2lkIHNldE5lZWRzUmVkcmF3T25DQ1RocmVhZCgpOworICAg
IHZvaWQgbGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqKTsK
KworICAgIC8vIFVzZWQgb24gbWFpbi10aHJlYWQgb25seS4KKyAgICBib29sIG1fY29tbWl0UGVu
ZGluZzsKKworICAgIC8vIEFjY2Vzc2VkIG9uIG1haW4gdGhyZWFkIG9ubHkuCisgICAgQ0NMYXll
clRyZWVIb3N0KiBtX2xheWVyVHJlZUhvc3Q7CisgICAgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNNYWluVGhyZWFkQ29weTsKKworICAgIC8vIFVz
ZWQgb24gdGhlIENDVGhyZWFkLCBidXQgY2hlY2tlZCBvbiBtYWluIHRocmVhZCBkdXJpbmcgaW5p
dGlhbGl6YXRpb24vc2h1dGRvd24uCisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1f
bGF5ZXJUcmVlSG9zdEltcGw7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRUYXNrLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aAppbmRleCA5MWM1OGU1ZDI1YjdiYjI4NmUyMTZjNGUwNjhjYmUxMDk1NzhmMTgzLi5kOGRlNGFi
MDM0Njk4ODc2OWZiZTI2NzRmZDMyMzYxMGM0NWQ3MjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFRhc2su
aApAQCAtMTk4LDYgKzE5OCw0OCBAQCBwcml2YXRlOgogICAgIFA0IG1fcGFyYW1ldGVyNDsKIH07
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVu
YW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1l
IFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+CitjbGFzcyBDQ1Ro
cmVhZFRhc2s1IDogcHVibGljIENDVGhyZWFkOjpUYXNrIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IHZvaWQgKFQ6OipNZXRob2QpKE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKKyAgICB0eXBlZGVm
IENDVGhyZWFkVGFzazU8VCwgUDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUs
IE1QNT4gQ0NUaHJlYWRUYXNrSW1wbDsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOworICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKKyAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQ
YXJhbTQ7CisgICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQ
YXJhbVR5cGUgUGFyYW01OworCisgICAgc3RhdGljIFBhc3NPd25QdHI8Q0NUaHJlYWRUYXNrSW1w
bD4gY3JlYXRlKFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwg
UGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwg
UGFyYW01IHBhcmFtZXRlcjUpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
VGhyZWFkVGFza0ltcGwoaW5zdGFuY2UsIG1ldGhvZCwgcGFyYW1ldGVyMSwgcGFyYW1ldGVyMiwg
cGFyYW1ldGVyMywgcGFyYW1ldGVyNCwgcGFyYW1ldGVyNSkpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBDQ1RocmVhZFRhc2s1KFQqIGluc3RhbmNlLCBNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFy
YW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFy
YW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUpCisgICAgICAgIDogQ0NUaHJlYWQ6OlRhc2soaW5z
dGFuY2UpCisgICAgICAgICwgbV9tZXRob2QobWV0aG9kKQorICAgICAgICAsIG1fcGFyYW1ldGVy
MShwYXJhbWV0ZXIxKQorICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQorICAgICAg
ICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQorICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJh
bWV0ZXI0KQorICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGVyZm9ybVRhc2soKQorICAgIHsKKyAgICAgICAgKCpzdGF0
aWNfY2FzdDxUKj4oaW5zdGFuY2UoKSkuKm1fbWV0aG9kKShtX3BhcmFtZXRlcjEsIG1fcGFyYW1l
dGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQsIG1fcGFyYW1ldGVyNSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIE1ldGhvZCBtX21ldGhvZDsKKyAgICBQMSBtX3BhcmFtZXRlcjE7Cisg
ICAgUDIgbV9wYXJhbWV0ZXIyOworICAgIFAzIG1fcGFyYW1ldGVyMzsKKyAgICBQNCBtX3BhcmFt
ZXRlcjQ7CisgICAgUDUgbV9wYXJhbWV0ZXI1OworfTsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRhc2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKICAgICBUKiBj
b25zdCBjYWxsZWUsCkBAIC0yNzQsNiArMzE2LDI3IEBAIFBhc3NPd25QdHI8Q0NUaHJlYWQ6OlRh
c2s+IGNyZWF0ZUNDVGhyZWFkVGFzaygKIAogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFt
ZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQ
NSwgdHlwZW5hbWUgTVA1PgorUGFzc093blB0cjxDQ1RocmVhZDo6VGFzaz4gY3JlYXRlQ0NUaHJl
YWRUYXNrKAorICAgIFQqIGNvbnN0IGNhbGxlZSwKKyAgICB2b2lkIChUOjoqbWV0aG9kKShNUDEs
IE1QMiwgTVAzLCBNUDQsIE1QNSksCisgICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsCisgICAgY29u
c3QgUDImIHBhcmFtZXRlcjIsCisgICAgY29uc3QgUDMmIHBhcmFtZXRlcjMsCisgICAgY29uc3Qg
UDQmIHBhcmFtZXRlcjQsCisgICAgY29uc3QgUDUmIHBhcmFtZXRlcjUpCit7CisgICAgcmV0dXJu
IENDVGhyZWFkVGFzazU8VCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBN
UDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBD
cm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwg
TVA1Pjo6Y3JlYXRlKAorICAgICAgICBjYWxsZWUsCisgICAgICAgIG1ldGhvZCwKKyAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLAorICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCisgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwKKyAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+
Ojpjb3B5KHBhcmFtZXRlcjQpLAorICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNT46OmNvcHko
cGFyYW1ldGVyNSkpOworCit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IENDVGhyZWFkVGFza19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCmluZGV4IGJm
MjNiZGVmZDlmM2Y1Y2I4MTE4NjQ4MGRmZjgxYzM3MjY5MTk5ZTIuLjVmNWIyNTY0M2E4YmY4NGRj
MGU2YTRmNTgxY2QwZGM2MzQ0MjEyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwu
Y3BwCkBAIC0zMSw3ICszMSw2IEBACiAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsUHJveHkuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggNGE1NWJj
YTBhMzY3ZDcwZjM4NzRjNjA4M2Q1MzYzYjVjNjRkNmJmMS4uOWZmMWZjY2M5NzE2YzEyNDJmZTM1
ZmU2OTBhMmE4MDIxNjBkMmYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1
ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
Ci0jaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbFByb3h5LmgiCisjaW5jbHVkZSAiY2Mv
Q0NQcm94eS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC03OSw3ICs3OSw3IEBAIHZvaWQgQ0NWaWRlb0xheWVySW1wbDo6c2V0VGV4
dHVyZShzaXplX3QgaW5kZXgsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZUlkLCBjb25zCiAKIHZv
aWQgQ0NWaWRlb0xheWVySW1wbDo6ZHJhdygpCiB7Ci0gICAgQVNTRVJUKENDTGF5ZXJUcmVlSG9z
dEltcGxQcm94eTo6aXNJbXBsVGhyZWFkKCkpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxU
aHJlYWQoKSk7CiAKICAgICBpZiAobV9za2lwc0RyYXcpCiAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNDJjYTcyNzFmOTEwN2I2YWQ3YjMzODc3MDVjNTY5NTkx
NjlkMTVmNy4uMjZhYTg1MzU0OWM4MjFhMjE4Yjg0Y2FlNzhjOThlNjM4ZGNkYTcwOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOC0yOSAgTmF0IER1
Y2EgIDxuZHVjYUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJbnRyb2R1Y2Ug
Q0NTaW5nbGVUaHJlYWRQcm94eSBpbiBvcmRlciB0byBtb3ZlIExheWVyUmVuZGVyZXIgdG8gQ0NM
YXllclRyZWVIb3N0SW1wbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjY4MDcKKworICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNvbi4KKwor
ICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJ
bXBsOjpjb21wb3NpdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0Um9vdEdy
YXBoaWNzTGF5ZXIpOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiB0ZXN0cy9DQ1RocmVhZFRhc2tU
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA4LTMxICBHcmVnIEJp
bGxvY2sgIDxnYmlsbG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIEFkZCBwYXNzLXRocm91Z2hz
IGZvciBOUE9iamVjdC92ODo6VmFsdWUgbWFyc2hhbGxpbmcgdG8gV2ViQmluZGluZ3MKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAppbmRleCA1ZDNmZDdhZWMwZWU1
ZDhlMDJmZDhlOGI3MGE4MDlmYWY0ZDA2YTBhLi45YzNkZDg0MDYyZmI2MDJmNDI3MDkzMDU4ZWNk
YTgzYWE0MTVmMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCkBAIC0xMTU3LDcgKzExNTcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjp0aGVtZUNoYW5nZWQo
KQogICAgIHZpZXctPmludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsKIH0KIAotdm9pZCBXZWJW
aWV3SW1wbDo6Y29tcG9zaXRlKGJvb2wgZmluaXNoKQordm9pZCBXZWJWaWV3SW1wbDo6Y29tcG9z
aXRlKGJvb2wpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2lmIFVTRShU
SFJFQURFRF9DT01QT1NJVElORykKQEAgLTExNzAsNyArMTE3MCw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmNvbXBvc2l0ZShib29sIGZpbmlzaCkKICAgICBpZiAobV9wYWdlT3ZlcmxheSkKICAgICAg
ICAgbV9wYWdlT3ZlcmxheS0+dXBkYXRlKCk7CiAKLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbXBv
c2l0ZShmaW5pc2gpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tcG9zaXRlKCk7CiAjZW5kaWYK
ICNlbmRpZgogfQpAQCAtMjUyNyw5ICsyNTI3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6c2V0Um9v
dEdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogbGF5ZXIpCiAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdC0+c2V0Um9vdExheWVyKGxheWVyKTsKIAogICAgIEludFJlY3QgZGFtYWdlZFJlY3QoMCwg
MCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KTsKLSAgICBpZiAobV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUpCi0gICAgICAgIGludmFsaWRhdGVSb290TGF5ZXJSZWN0KGRhbWFn
ZWRSZWN0KTsKLSAgICBlbHNlCisgICAgaWYgKCFtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSkKICAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KGRhbWFnZWRSZWN0KTsK
IH0KIApAQCAtMjYyMCwxMSArMjYxOCwxNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiAgICAgICAgIFdlYkNvcmU6OkND
U2V0dGluZ3MgY2NTZXR0aW5nczsKICAgICAgICAgY2NTZXR0aW5ncy5hY2NlbGVyYXRlUGFpbnRp
bmcgPSBwYWdlKCktPnNldHRpbmdzKCktPmFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoKTsKICAg
ICAgICAgY2NTZXR0aW5ncy5jb21wb3NpdGVPZmZzY3JlZW4gPSBzZXR0aW5ncygpLT5jb21wb3Np
dGVUb1RleHR1cmVFbmFibGVkKCk7CisjaWYgVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQorICAg
ICAgICBjY1NldHRpbmdzLmVuYWJsZUNvbXBvc2l0b3JUaHJlYWQgPSB0cnVlOworI2Vsc2UKKyAg
ICAgICAgY2NTZXR0aW5ncy5lbmFibGVDb21wb3NpdG9yVGhyZWFkID0gZmFsc2U7CisjZW5kaWYK
ICAgICAgICAgY2NTZXR0aW5ncy5zaG93RlBTQ291bnRlciA9IHNldHRpbmdzKCktPnNob3dGUFND
b3VudGVyKCk7CiAgICAgICAgIGNjU2V0dGluZ3Muc2hvd1BsYXRmb3JtTGF5ZXJUcmVlID0gc2V0
dGluZ3MoKS0+c2hvd1BsYXRmb3JtTGF5ZXJUcmVlKCk7CiAKICAgICAgICAgbV9sYXllclRyZWVI
b3N0ID0gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGUodGhpcywgY2NTZXR0aW5ncyk7CiAgICAgICAg
IGlmIChtX2xheWVyVHJlZUhvc3QpIHsKKyAgICAgICAgICAgIHVwZGF0ZUxheWVyVHJlZVZpZXdw
b3J0KCk7CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkQWN0aXZhdGVBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKHRydWUpOwogICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3Rp
dmUgPSB0cnVlOwogICAgICAgICAgICAgbV9jb21wb3NpdG9yQ3JlYXRpb25GYWlsZWQgPSBmYWxz
ZTsKQEAgLTI2NjksMTEgKzI2NzMsMjAgQEAgdm9pZCBXZWJWaWV3SW1wbDo6YW5pbWF0ZUFuZExh
eW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCiAKIHZvaWQgV2ViVmlld0ltcGw6OmRpZFJlY3Jl
YXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKLSAgICAvLyBGb3JjZSBWaWV3SG9z
dE1zZ19EaWRBY3RpdmF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmcgdG8gYmUgc2VudCBzbwotICAg
IC8vIHRoYXQgdGhlIGJyb3dzZXIgcHJvY2VzcyBjYW4gcmVhY3F1aXJlIHN1cmZhY2VzLgotICAg
IG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlID0gZmFsc2U7Ci0gICAgc2V0SXNBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlKHN1Y2Nlc3MpOwotICAgIGlmIChzdWNjZXNzICYmIG1f
cGFnZU92ZXJsYXkpCisKKyAgICAvLyBTd2l0Y2ggYmFjayB0byBzb2Z0d2FyZSByZW5kZXJpbmcg
bW9kZSwgaWYgbmVjZXNzYXJ5CisgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgIEFTU0VSVCht
X2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSk7CisgICAgICAgIHNldElzQWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0FjdGl2ZShmYWxzZSk7CisgICAgICAgIG1fY29tcG9zaXRvckNyZWF0aW9u
RmFpbGVkID0gdHJ1ZTsKKyAgICAgICAgbV9jbGllbnQtPmRpZEludmFsaWRhdGVSZWN0KEludFJl
Y3QoMCwgMCwgbV9zaXplLndpZHRoLCBtX3NpemUuaGVpZ2h0KSk7CisKKyAgICAgICAgLy8gRm9y
Y2UgYSBzdHlsZSByZWNhbGMgdG8gcmVtb3ZlIGFsbCB0aGUgY29tcG9zaXRlZCBsYXllcnMuCisg
ICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnNjaGVkdWxlRm9yY2VkU3R5
bGVSZWNhbGMoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BhZ2VPdmVy
bGF5KQogICAgICAgICBtX3BhZ2VPdmVybGF5LT51cGRhdGUoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAKaW5kZXggMWM1Zjg3
NzI1MjY2YjA4OGY2ODY2NzQ2YzhkM2ExZjk2M2I1NzdjMi4uZDk5NDNlNzEzYTIwYTRkN2IwOTA0
MWE0ZWNjZjc3ZDkwYjMzYjM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICBN
T0NLX01FVEhPRDIobWV0aG9kMiwgdm9pZChpbnQgYTEsIGludCBhMikpOwogICAgIE1PQ0tfTUVU
SE9EMyhtZXRob2QzLCB2b2lkKGludCBhMSwgaW50IGEyLCBpbnQgYTMpKTsKICAgICBNT0NLX01F
VEhPRDQobWV0aG9kNCwgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBpbnQgYTQpKTsKKyAg
ICBNT0NLX01FVEhPRDUobWV0aG9kNSwgdm9pZChpbnQgYTEsIGludCBhMiwgaW50IGEzLCBpbnQg
YTQsIGludCBhNSkpOwogfTsKIAogVEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1ldGhv
ZHMpCkBAIC01MSwxMiArNTIsMTQgQEAgVEVTVChDQ1RocmVhZFRhc2tUZXN0LCBydW5uYWJsZU1l
dGhvZHMpCiAgICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMig5LCA4KSkuVGltZXMoMSk7CiAg
ICAgRVhQRUNUX0NBTEwobW9jaywgbWV0aG9kMyg5LCA4LCA3KSkuVGltZXMoMSk7CiAgICAgRVhQ
RUNUX0NBTEwobW9jaywgbWV0aG9kNCg5LCA4LCA3LCA2KSkuVGltZXMoMSk7CisgICAgRVhQRUNU
X0NBTEwobW9jaywgbWV0aG9kNSg5LCA4LCA3LCA2LCA1KSkuVGltZXMoMSk7CiAKICAgICBjcmVh
dGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QwKS0+cGVyZm9ybVRhc2soKTsKICAg
ICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QxLCA5KS0+cGVyZm9ybVRh
c2soKTsKICAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2QyLCA5LCA4
KS0+cGVyZm9ybVRhc2soKTsKICAgICBjcmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjpt
ZXRob2QzLCA5LCA4LCA3KS0+cGVyZm9ybVRhc2soKTsKICAgICBjcmVhdGVDQ1RocmVhZFRhc2so
Jm1vY2ssICZNb2NrOjptZXRob2Q0LCA5LCA4LCA3LCA2KS0+cGVyZm9ybVRhc2soKTsKKyAgICBj
cmVhdGVDQ1RocmVhZFRhc2soJm1vY2ssICZNb2NrOjptZXRob2Q1LCA5LCA4LCA3LCA2LCA1KS0+
cGVyZm9ybVRhc2soKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UK
</data>
<flag name="commit-queue"
          id="102330"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>